makenoto.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #!/usr/bin/env python3
  2. import glob, os
  3. scripts = []
  4. for line in open("include/mupdf/ucdn.h").readlines():
  5. if line.startswith("#define"):
  6. name = line.split()[1]
  7. if name.startswith("UCDN_SCRIPT_"):
  8. scripts.append(name)
  9. blacklist = [
  10. "UCDN_SCRIPT_UNKNOWN",
  11. "UCDN_SCRIPT_INHERITED",
  12. "UCDN_SCRIPT_COMMON",
  13. "UCDN_SCRIPT_LATIN",
  14. "UCDN_SCRIPT_GREEK",
  15. "UCDN_SCRIPT_CYRILLIC",
  16. "UCDN_SCRIPT_HIRAGANA",
  17. "UCDN_SCRIPT_KATAKANA",
  18. "UCDN_SCRIPT_BOPOMOFO",
  19. "UCDN_SCRIPT_HAN",
  20. "UCDN_SCRIPT_HANGUL",
  21. "UCDN_SCRIPT_BRAILLE",
  22. "UCDN_SCRIPT_MEROITIC_CURSIVE",
  23. "UCDN_SCRIPT_MEROITIC_HIEROGLYPHS",
  24. "UCDN_SCRIPT_SYRIAC",
  25. ]
  26. for s in blacklist:
  27. scripts.remove(s)
  28. fonts = glob.glob("resources/fonts/noto/*.?tf")
  29. #fonts.remove("resources/fonts/noto/NotoSans-Regular.otf")
  30. #fonts.remove("resources/fonts/noto/NotoSerif-Regular.otf")
  31. #fonts.remove("resources/fonts/noto/NotoSansSymbols-Regular.ttf")
  32. #fonts.remove("resources/fonts/noto/NotoEmoji-Regular.ttf")
  33. lower = {}
  34. for f in fonts:
  35. lower[f.lower()] = os.path.basename(f)
  36. unused = list(lower.keys())
  37. unused.sort()
  38. def casefont(us, ss, n):
  39. if n in lower:
  40. nn = lower[n].replace('.','_').replace('-','_')
  41. print("case %s: RETURN(noto_%s);" % (us,nn))
  42. del lower[n]
  43. return True
  44. return False
  45. for us in scripts:
  46. ss = "".join([s.capitalize() for s in us.split("_")[2:]])
  47. list = []
  48. list.append("resources/fonts/noto/NotoSerif" + ss + "-Regular.otf")
  49. list.append("resources/fonts/noto/NotoSans" + ss + "-Regular.otf")
  50. list.append("resources/fonts/noto/NotoSerif" + ss + "-Regular.ttf")
  51. list.append("resources/fonts/noto/NotoSans" + ss + "-Regular.ttf")
  52. found = False
  53. for font in list:
  54. if casefont(us, ss, font.lower()):
  55. found = True
  56. break
  57. if not found:
  58. print("case %s: break;" % us)
  59. for font in list:
  60. if font.lower() in unused: unused.remove(font.lower())
  61. for f in unused:
  62. print("// unmapped font:", lower[f])
  63. for f in lower:
  64. if not f in unused:
  65. print("// unused font file:", lower[f])