mapA.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #! /usr/bin/env python2.7
  2. #
  3. # Alexander Shiryaev, 2012.10
  4. #
  5. # MAPPINGS .TXT format A parser
  6. import re
  7. _p1 = re.compile("(0x[0-9a-fA-F]+)\s+(0x[0-9a-fA-F]+)\s+#")
  8. _p2 = re.compile("0x[0-9a-fA-F]+\s*#\s*(UNDEFINED|DBCS LEAD BYTE)")
  9. # return values:
  10. # r, e tables:
  11. # r: [ eord, uord ] table
  12. # e: list of warnings
  13. # | error string
  14. def getMap (fh):
  15. e = []
  16. r = []
  17. de = {}
  18. du = {}
  19. while True:
  20. line = fh.readline()
  21. if line == '':
  22. break
  23. line = line.strip()
  24. if (len(line) > 0) and (line[0] != '#') and (line != chr(0x1a)):
  25. rr = _p1.match(line)
  26. if rr:
  27. eord = int(rr.group(1), 16)
  28. if len(rr.group(1)) == 4:
  29. assert eord < 256
  30. elif len(rr.group(1)) == 6:
  31. assert eord >= 256
  32. elif len(rr.group(1)) == 8:
  33. assert eord >= 65536
  34. else:
  35. print line
  36. assert False
  37. uord = int(rr.group(2), 16)
  38. assert uord < 65536
  39. # check unique eord
  40. if de.has_key(eord):
  41. # print line
  42. # print eord, de[eord]
  43. # assert False
  44. return "eord not unique"
  45. de[eord] = uord
  46. # check unique uord
  47. if du.has_key(uord):
  48. # print line
  49. # print du[uord], uord
  50. # assert False
  51. return "uord not unique"
  52. du[uord] = eord
  53. r.append( (eord, uord) )
  54. else:
  55. rr = _p2.match(line)
  56. if rr:
  57. pass # skip
  58. else:
  59. print line
  60. return "unexpected line"
  61. return r, e