about summary refs log tree commit diff stats
path: root/lib/chame0/chame/res/genentity.nim
blob: b25a8993300f5b4e1f53ba1726f61fe7e45d1415 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import std/json
import std/streams
import std/strutils

type LineWriter = object
  s: Stream
  line: string

proc write(writer: var LineWriter, s: string) =
  if s.len + writer.line.len > 80:
    writer.s.writeLine(writer.line)
    writer.line = ""
  writer.line &= s

proc flush(writer: var LineWriter) =
  writer.s.writeLine(writer.line)
  writer.line = ""

proc main() =
  let entityJson = parseJson(readFile("entity.json"))
  echo "type Z = cstring"
  var writer = LineWriter(s: newFileStream(stdout))
  var cc: char
  var charMap: array[char, int]
  for i in charMap.mitems:
    i = -1
  var entityMap: seq[tuple[name, value: string]]
  for k, v in entityJson:
    entityMap.add((k.substr(1), v{"characters"}.getStr()))
  let n = entityMap.len
  echo "const entityMap*: array[" & $n & ", Z] = ["
  var i = 0
  for (k, v) in entityMap:
    if k[0] != cc:
      charMap[cc] = i - 1
      cc = k[0]
    writer.write((k & ":" & v).escape() & ",")
    inc i
  assert cc == 'z'
  charMap[cc] = i - 1
  writer.flush()
  echo "]"
  echo ""
  echo "const charMap*: array[char, int] = ["
  for c in char.low..char.high:
    writer.write($charMap[c] & ",")
  writer.flush()
  echo "]"
main()