def width(self, text): seg = gr.Segment(self.font, self.grface, self.script, text, self.rtl, feats=self.feats) return seg.advance[0]
def glyphs(self, text, includewidth=False): seg = gr.Segment(self.font, self.grface, self.script, text, self.rtl, feats=self.feats) res = [] for s in seg.slots: res.append((s.gid, s.origin, seg.cinfo(s.original).unicode)) if includewidth: res.append((None, seg.advance)) return res
def glyphs(self, text, includewidth = False, feats = None, rtl = None, lang = None, **kw) : if feats is None: feats = self.feats else: feats = self._featureval(feats, lang if lang is not None else self.lang) if rtl is None: rtl = self.rtl seg = gr.Segment(self.font, self.grface, self.script, str(text), rtl, feats = feats) res = [] for s in seg.slots : res.append((s.gid, s.origin, seg.cinfo(s.original).unicode)) if includewidth : res.append((None, seg.advance)) return res
def measure(self, text, after = False) : """Returns a list of x positions for before/after the indexth character and a list of breakweights""" seg = gr.Segment(self.font, self.grface, self.script, str(text), self.rtl, feats = self.feats) num = seg.num_cinfo() pos = [] bw = [] for i in range(num) : c = seg.cinfo(i) bw.append(c.breakweight) if after : s = c.slots[c.after] else : s = c.slots[c.before] pos.append(s.origin[0]) return (pos, bw)
from palaso.font.icule import TTXLEFont import icu icufont = TTXLEFont(sys.argv[1], ttx=tt) iculayout = icu.LayoutEngine( icufont, icu.ScriptCodes.index(opts.script) if opts.script else 0, 0) lf = codecs.open(sys.argv[2], "r", "utf_8") count = 0 for line in lf.readlines(): count += 1 text = line.strip() b = hbng.Buffer(text) b.shape(hbfont, shapers=["ot"]) hbres = [x.gid for x in b.glyphs] s = gr.Segment(grfont, grface, 0, text, 0) grres = [x.gid for x in s.slots] if opts.compare == 'graphite': if hbres != grres: hbnres = [tt.getGlyphName(x) for x in hbres] grnres = [tt.getGlyphName(x) for x in grres] print("Failed at line %d: %s %r, %r" % (count, text.encode('utf_8'), hbnres, grnres)) elif opts.compare == "icu": iculayout.layoutChars(text, 0) icures = filter(lambda x: x != 65535, list(iculayout.getGlyphs())) if hbres != icures: hbnres = [tt.getGlyphName(x) for x in hbres] icunres = [tt.getGlyphName(x) for x in icures] print("Failed at line %d: %s %r, %r" % (count, text.encode('utf_8'), hbnres, icunres))