test-freetype.nut 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. //print(sqFreetype.loadlib("/usr/lib/x86_64-linux-gnu/libfreetype.so"));
  2. auto ft_library = new sqFreetype();
  3. //print(ft_library);
  4. auto function getFontGlyps(ft_library, font_fname, isMemory=false, max_glyphs=256)
  5. {
  6. auto face = new sqFreetypeFace(ft_library, font_fname, 0, isMemory);
  7. //print(face);
  8. auto face_num_glyps = face.get_num_glyphs();
  9. if(face_num_glyps > max_glyphs) face_num_glyps = max_glyphs;
  10. //auto font_size = 64*12;
  11. auto font_size = 32*12;
  12. face.set_char_size(font_size, font_size);
  13. auto glyphs = array(face_num_glyps);
  14. for(auto i=0; i < face_num_glyps; ++i)
  15. {
  16. glyphs[i] = face.load_char(i);
  17. }
  18. return [face, glyphs];
  19. }
  20. auto function crossMatch(font1_glyphs, font2_glyphs)
  21. {
  22. auto face1 = font1_glyphs[0];
  23. auto glyphs1 = font1_glyphs[1];
  24. auto face2 = font2_glyphs[0];
  25. auto glyphs2 = font2_glyphs[1];
  26. auto first_char = face2.first_char();
  27. print(glyphs1.len(), glyphs2.len(), first_char[0], first_char[1], face2.postscript_name());
  28. for(auto n0=0, len0=glyphs1.len(); n0 < len0; ++n0)
  29. {
  30. auto glyph1 = glyphs1[n0];
  31. for(auto n2=0, len2=glyphs2.len(); n2 < len2; ++n2)
  32. {
  33. auto glyph2 = glyphs2[n2];
  34. if(glyph1 == glyph2)
  35. {
  36. auto glyph_index = face2.char_index(n2);
  37. print("Glyphs are equal", n0, n2, face2.glyph_name(glyph_index));
  38. break;
  39. }
  40. }
  41. }
  42. }
  43. auto font1_fname = "../tmp/CLFGJN_Arial_Bold.font";
  44. //auto font1_data = readfile(font1_fname);
  45. //auto font1_glyphs = getFontGlyps(ft_library, font1_data, true);
  46. //auto font1_glyphs = getFontGlyps(ft_library, font1_fname);
  47. auto font_ref_bold_glyphs = getFontGlyps(ft_library, "../tmp/Arial_Bold.ttf");
  48. auto font_ref_glyphs = getFontGlyps(ft_library, "../tmp/Arial.ttf");
  49. //crossMatch(font1_glyphs, font2_glyphs);
  50. foreach(fn in ["CLFGJN_Arial_Bold.font", "CLFGKO_Arial.font",
  51. "CLFGON_Helvetica.font", "CLFGPO_Helvetica_Bold.font",
  52. "CLFHEN_Helvetica_Bold.font", "CLFHEO_Helvetica.font"])
  53. {
  54. print("\nShowing font ", fn);
  55. auto font_glyphs = getFontGlyps(ft_library, "../tmp/" + fn);
  56. crossMatch(font_glyphs, (fn.indexOf("Bold") > 0) ? font_ref_bold_glyphs : font_ref_glyphs);
  57. }
  58. /*
  59. for(auto n2=0, len2=glyphs2.len(); n2 < len2; ++n2)
  60. {
  61. auto glyph_index = face2.char_index(n2);
  62. print("Glyphs name", n2, glyph_index, face2.glyph_name(glyph_index));
  63. }
  64. */