text-to-log.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #!/usr/bin/env python3
  2. import os
  3. import sys
  4. charmap = {
  5. '9': [[1, 0]],
  6. '7': [[2, 0]], '@': [[2, 5], [2, 0]],
  7. '5': [[3, 0]], '*': [[2, 5], [3, 0]],
  8. '3': [[4, 0]], '^': [[2, 5], [4, 0]],
  9. '1': [[5, 0]], '$': [[2, 5], [5, 0]],
  10. '0': [[8, 0]], '%': [[2, 5], [8, 0]],
  11. '2': [[9, 0]], '!': [[2, 5], [9, 0]],
  12. '4': [[10, 0]], '#': [[2, 5], [10, 0]],
  13. '6': [[11, 0]], '&': [[2, 5], [11, 0]],
  14. '8': [[12, 0]],
  15. '`': [[0, 1]], '~': [[2, 5], [0, 1]],
  16. 'y': [[1, 1]], 'Y': [[2, 5], [1, 1]],
  17. 'w': [[2, 1]], 'W': [[2, 5], [2, 1]],
  18. 'g': [[3, 1]], 'G': [[2, 5], [3, 1]],
  19. 'l': [[4, 1]], 'L': [[2, 5], [4, 1]],
  20. 'm': [[5, 1]], 'M': [[2, 5], [5, 1]],
  21. '[': [[6, 1]], '{': [[2, 5], [6, 1]], '(': [[6, 1], [6, 1]],
  22. ']': [[7, 1]], '}': [[2, 5], [7, 1]], ')': [[7, 1], [7, 1]],
  23. 'f': [[8, 1]], 'F': [[2, 5], [8, 1]],
  24. 'h': [[9, 1]], 'H': [[2, 5], [9, 1]],
  25. 'c': [[10, 1]], 'C': [[2, 5], [10, 1]],
  26. 'p': [[11, 1]], 'P': [[2, 5], [11, 1]],
  27. 'x': [[12, 1]], 'X': [[2, 5], [12, 1]],
  28. '\\': [[13, 1]], '|': [[2, 5], [13, 1]],
  29. '\t': [[0, 2]],
  30. 'a': [[1, 2]], 'A': [[2, 5], [1, 2]],
  31. 'o': [[2, 2]], 'O': [[2, 5], [2, 2]],
  32. 'e': [[3, 2]], 'E': [[2, 5], [3, 2]],
  33. 'i': [[4, 2]], 'I': [[2, 5], [4, 2]],
  34. 'u': [[5, 2]], 'U': [[2, 5], [5, 2]],
  35. 'd': [[8, 2]], 'D': [[2, 5], [8, 2]],
  36. 'r': [[9, 2]], 'R': [[2, 5], [9, 2]],
  37. 't': [[10, 2]], 'T': [[2, 5], [10, 2]],
  38. 'n': [[11, 2]], 'N': [[2, 5], [11, 2]],
  39. 's': [[12, 2]], 'S': [[2, 5], [12, 2]],
  40. '=': [[13, 2]], '+': [[2, 5], [13, 2]],
  41. 'z': [[1, 3]], 'Z': [[2, 5], [1, 3]],
  42. 'q': [[2, 3]], 'Q': [[2, 5], [2, 3]],
  43. '\'': [[3, 3]], '"': [[2, 5], [3, 3]],
  44. ',': [[4, 3]], '<': [[2, 5], [4, 3]],
  45. '.': [[5, 3]], '>': [[2, 5], [5, 3]],
  46. 'b': [[8, 3]], 'B': [[2, 5], [8, 3]],
  47. 'k': [[9, 3]], 'K': [[2, 5], [9, 3]],
  48. 'v': [[10, 3]], 'V': [[2, 5], [10, 3]],
  49. 'j': [[11, 3]], 'J': [[2, 5], [11, 3]],
  50. '/': [[12, 3]], '?': [[2, 5], [12, 3]],
  51. ':': [[4, 4]], ';': [[4, 4], [4, 4]],
  52. '-': [[9, 4]], '_': [[2, 5], [9, 4]],
  53. ' ': [[10, 5]],
  54. '\n': [[11, 5]],
  55. ## Layered things
  56. # Hungarian
  57. 'á': [[9, 5], [1, 2]], 'Á': [[2, 5], [9, 5], [1, 2]],
  58. 'ó': [[9, 5], [2, 2]], 'Ó': [[2, 5], [9, 5], [2, 2]],
  59. 'ő': [[9, 5], [2, 1]], 'Ő': [[2, 5], [9, 5], [2, 1]],
  60. 'ö': [[9, 5], [2, 3]], 'Ö': [[2, 5], [9, 5], [2, 3]],
  61. 'é': [[9, 5], [3, 2]], 'É': [[2, 5], [9, 5], [3, 2]],
  62. 'ú': [[9, 5], [4, 2]], 'Ú': [[2, 5], [9, 5], [4, 2]],
  63. 'ű': [[9, 5], [4, 1]], 'Ű': [[2, 5], [9, 5], [4, 1]],
  64. 'ü': [[9, 5], [4, 3]], 'Ü': [[2, 5], [9, 5], [4, 3]],
  65. 'í': [[9, 5], [5, 2]], 'Í': [[2, 5], [9, 5], [5, 2]],
  66. }
  67. def lookup_char(layer, ch):
  68. if ch in charmap:
  69. return charmap[ch]
  70. return None
  71. def process_char(layer, ch, out=sys.stdout):
  72. keys = lookup_char(layer, ch)
  73. if not keys:
  74. print ("Unknown char: %s" % ch, file=sys.stderr)
  75. else:
  76. for (c, r) in keys:
  77. print ("KL: col=%d, row=%d, pressed=1, layer=%s" % (r, c, layer), file=out)
  78. print ("KL: col=%d, row=%d, pressed=0, layer=%s" % (r, c, layer), file=out)
  79. def process_file(fn, layer, out=sys.stdout):
  80. with open(fn, "r") as f:
  81. ch = f.read(1)
  82. while ch:
  83. process_char(layer, ch, out)
  84. ch = f.read(1)
  85. if sys.argv[1] == '-':
  86. out='/dev/stdin'
  87. else:
  88. out=sys.argv[1]
  89. if len(sys.argv) >= 2:
  90. layer = 'ADORE'
  91. else:
  92. layer = sys.argv[2]
  93. process_file(out, layer = layer)