class TextRun(object): def __init__(self, ctRun, runIndex): self.runIndex = runIndex # Index of the run in the TextLine self._ctRun = ctRun self.glyphCount = gc = CoreText.CTRunGetGlyphCount(ctRun) attrs = CoreText.CTRunGetAttributes(ctRun) self.nsFont = attrs['NSFont'] #self.fontDescriptor = f.fontDescriptor() self.fill = attrs['NSColor'] self.nsParagraphStyle = attrs['NSParagraphStyle'] self.iStart, self.iEnd = CoreText.CTRunGetStringRange(ctRun) self.string = u'' # Hack for now to find the string in repr-string if self._ctLine. for index, part in enumerate( ` ctRun `.split('"')[1].split('\\u')): if index == 0: self.string += part elif len(part) >= 4: self.string += unichr(int(part[0:4], 16)) self.string += part[4:] self.stringIndices = CoreText.CTRunGetStringIndicesPtr(ctRun)[0:gc] #CoreText.CTRunGetStringIndices(ctRun._ctRun, CoreText.CFRange(0, 5), None)[4] self.advances = CoreText.CTRunGetAdvances(ctRun, CoreText.CFRange(0, 5), None) self.positions = CoreText.CTRunGetPositionsPtr(ctRun)[0:gc] #CoreText.CTRunGetPositions(ctRun, CoreText.CFRange(0, 5), None)[4] #self.glyphFontIndices = CoreText.CTRunGetGlyphsPtr(ctRun)[0:gc] #print(CoreText.CTRunGetGlyphs(ctRun, CoreText.CFRange(0, 5), None)[0:5]) self.status = CoreText.CTRunGetStatus(ctRun)
def testMethods10_5(self): setter = CoreText.CTFramesetterCreateWithAttributedString( CoreText.CFAttributedStringCreate(None, "hello", None)) self.assertIsInstance(setter, CoreText.CTFramesetterRef) self.assertArgIsOut( CoreText.CTFramesetterSuggestFrameSizeWithConstraints, 4) r = CoreText.CTFramesetterSuggestFrameSizeWithConstraints( setter, CoreText.CFRange(0, 2), None, CGSize(100, 500), None) self.assertIsInstance(r, tuple) self.assertEqual(len(r), 2) size, a_range = r self.assertIsInstance(size, CGSize) self.assertIsInstance(a_range, CoreText.CFRange)
class TextRun(object): def __init__(self, ctRun, runIndex): self.runIndex = runIndex # Index of the run in the TextLine self._ctRun = ctRun self._style = None # Property cash for constructed style from run parameters. self.glyphCount = gc = CoreText.CTRunGetGlyphCount(ctRun) # Reverse the style from attrs = CoreText.CTRunGetAttributes(ctRun) self.nsFont = attrs['NSFont'] #self.fontDescriptor = f.fontDescriptor() self.fill = attrs['NSColor'] self.nsParagraphStyle = attrs['NSParagraphStyle'] self.attrs = attrs # Save, in case the caller want to query run parameters. self.iStart, self.iEnd = CoreText.CTRunGetStringRange(ctRun) self.string = u'' # Hack for now to find the string in repr-string if self._ctLine. # TODO: Make a better conversion here, not relying on the format of the repr-string. for index, part in enumerate( ` ctRun `.split('"')[1].split('\\u')): if index == 0: self.string += part elif len(part) >= 4: self.string += unichr(int(part[0:4], 16)) self.string += part[4:] #print gc, len(CoreText.CTRunGetStringIndicesPtr(ctRun)), CoreText.CTRunGetStringIndicesPtr(ctRun), ctRun try: self.stringIndices = CoreText.CTRunGetStringIndicesPtr(ctRun)[0:gc] except TypeError: self.stringIndices = [0] #CoreText.CTRunGetStringIndices(ctRun._ctRun, CoreText.CFRange(0, 5), None)[4] self.advances = CoreText.CTRunGetAdvances(ctRun, CoreText.CFRange(0, 5), None) #self.positions = CoreText.CTRunGetPositionsPtr(ctRun)[0:gc] #CoreText.CTRunGetPositions(ctRun, CoreText.CFRange(0, 5), None)[4] #self.glyphFontIndices = CoreText.CTRunGetGlyphsPtr(ctRun)[0:gc] #print CoreText.CTRunGetGlyphs(ctRun, CoreText.CFRange(0, 5), None)[0:5] self.status = CoreText.CTRunGetStatus(ctRun) # get all positions self.positions = CoreText.CTRunGetPositions(ctRun, (0, gc), None) # get all glyphs self.glyphs = CoreText.CTRunGetGlyphs(ctRun, (0, gc), None)
def testFunctions10_5(self): self.assertArgIsOut(CoreText.CTRunGetAdvances, 2) self.assertArgSizeInArg(CoreText.CTRunGetAdvances, 2, 1) line = CoreText.CTLineCreateWithAttributedString( CoreText.CFAttributedStringCreate(None, "hello world", None)) self.assertIsInstance(line, CoreText.CTLineRef) run = CoreText.CTLineGetGlyphRuns(line)[0] self.assertIsInstance(run, CoreText.CTRunRef) r = CoreText.CTRunGetAdvances(run, CoreText.CFRange(1, 3), None) self.assertIsInstance(r, (list, tuple)) self.assertEqual(len(r), 3) for i in range(3): self.assertIsInstance(r[i], CGSize) v = CoreText.CTRunGetAdvancesPtr(run) self.assertIsInstance(v, objc.varlist) self.assertIsInstance(v[0], CGSize)
def testFunctions(self): self.assertIsInstance(CoreText.CTRunGetTypeID(), int) line = CoreText.CTLineCreateWithAttributedString( CoreText.CFAttributedStringCreate(None, "hello world", None)) self.assertIsInstance(line, CoreText.CTLineRef) run = CoreText.CTLineGetGlyphRuns(line)[0] self.assertIsInstance(run, CoreText.CTRunRef) v = CoreText.CTRunGetGlyphCount(run) self.assertIsInstance(v, int) v = CoreText.CTRunGetAttributes(run) self.assertIsInstance(v, (dict, NSDictionary)) v = CoreText.CTRunGetStatus(run) self.assertIsInstance(v, int) buf = CoreText.CTRunGetGlyphsPtr(run) self.assertIsInstance(buf, objc.varlist) self.assertIsInstance(buf[0], int) buf = CoreText.CTRunGetGlyphs(run, CoreText.CFRange(0, 5), None) self.assertIsInstance(buf, tuple) self.assertEqual(len(buf), 5) self.assertIsInstance(buf[0], int) buf = CoreText.CTRunGetPositionsPtr(run) self.assertIsInstance(buf, objc.varlist) self.assertIsInstance(buf[0], CGPoint) buf = CoreText.CTRunGetPositions(run, CoreText.CFRange(0, 5), None) self.assertIsInstance(buf, tuple) self.assertEqual(len(buf), 5) self.assertIsInstance(buf[0], CGPoint) buf = CoreText.CTRunGetStringIndicesPtr(run) self.assertIsInstance(buf, objc.varlist) self.assertIsInstance(buf[0], int) buf = CoreText.CTRunGetStringIndices(run, CoreText.CFRange(0, 5), None) self.assertIsInstance(buf, tuple) self.assertEqual(len(buf), 5) self.assertIsInstance(buf[0], int) v = CoreText.CTRunGetStringRange(run) self.assertIsInstance(v, CoreText.CFRange) v = CoreText.CTRunGetTypographicBounds(run, CoreText.CFRange(0, 5), None, None, None) self.assertIsInstance(v, tuple) self.assertEqual(len(v), 4) self.assertIsInstance(v[0], float) self.assertIsInstance(v[1], float) self.assertIsInstance(v[2], float) self.assertIsInstance(v[3], float) url = CoreText.CFURLCreateWithFileSystemPath( None, "/tmp/pyobjc.test.pdf", CoreText.kCFURLPOSIXPathStyle, False) self.assertIsInstance(url, CoreText.CFURLRef) ctx = CGPDFContextCreateWithURL( url, CGRect(CGPoint(0, 0), CGSize(1000, 1000)), None) v = CoreText.CTRunGetImageBounds(run, ctx, CoreText.CFRange(0, 5)) self.assertIsInstance(v, CGRect) v = CoreText.CTRunGetTextMatrix(run) self.assertIsInstance(v, CoreText.CGAffineTransform) v = CoreText.CTRunDraw(run, ctx, CoreText.CFRange(0, 5)) self.assertTrue(v is None)
def testFunctions(self): font = CoreText.CTFontCreateWithName("Optima Bold", 14, None) self.assertIsInstance(font, CoreText.CTFontRef) self.assertResultIsCFRetained(CoreText.CTFontCreateWithName) descriptor = CoreText.CTFontDescriptorCreateWithNameAndSize( "Optima Bold", 14.0) self.assertIsInstance(descriptor, CoreText.CTFontDescriptorRef) font = CoreText.CTFontCreateWithFontDescriptor(descriptor, 5.0, None) self.assertIsInstance(font, CoreText.CTFontRef) self.assertResultIsCFRetained(CoreText.CTFontCreateWithFontDescriptor) font = CoreText.CTFontCreateUIFontForLanguage( CoreText.kCTFontMiniSystemFontType, 10.0, "nl_NL") self.assertIsInstance(font, CoreText.CTFontRef) self.assertResultIsCFRetained(CoreText.CTFontCreateUIFontForLanguage) font2 = CoreText.CTFontCreateCopyWithAttributes(font, 9.0, None, None) self.assertIsInstance(font2, CoreText.CTFontRef) self.assertResultIsCFRetained(CoreText.CTFontCreateCopyWithAttributes) font2 = CoreText.CTFontCreateCopyWithSymbolicTraits( font, 14.0, None, CoreText.kCTFontBoldTrait, CoreText.kCTFontBoldTrait) self.assertIsInstance(font2, CoreText.CTFontRef) self.assertResultIsCFRetained(CoreText.CTFontCreateCopyWithAttributes) font2 = CoreText.CTFontCreateCopyWithFamily(font, 14.0, None, "Lucida Grande") self.assertIsInstance(font2, CoreText.CTFontRef) self.assertResultIsCFRetained(CoreText.CTFontCreateCopyWithFamily) font2 = CoreText.CTFontCreateForString(font, "hello world", CoreText.CFRange(1, 4)) self.assertIsInstance(font2, CoreText.CTFontRef) self.assertResultIsCFRetained(CoreText.CTFontCreateForString) descriptor = CoreText.CTFontCopyFontDescriptor(font) self.assertIsInstance(descriptor, CoreText.CTFontDescriptorRef) v = CoreText.CTFontCopyAttribute(font, "size") self.assertIsNone(v) self.assertResultIsCFRetained(CoreText.CTFontCopyAttribute) v = CoreText.CTFontGetSize(font) self.assertIsInstance(v, float) v = CoreText.CTFontGetMatrix(font) self.assertIsInstance(v, Quartz.CGAffineTransform) v = CoreText.CTFontGetSymbolicTraits(font) self.assertIsInstance(v, int) v = CoreText.CTFontCopyTraits(font) self.assertIsInstance(v, CoreText.CFDictionaryRef) v = CoreText.CTFontCopyPostScriptName(font) self.assertIsInstance(v, str) v = CoreText.CTFontCopyFamilyName(font) self.assertIsInstance(v, str) v = CoreText.CTFontCopyFullName(font) self.assertIsInstance(v, str) v = CoreText.CTFontCopyDisplayName(font) self.assertIsInstance(v, str) v = CoreText.CTFontCopyName(font, CoreText.kCTFontCopyrightNameKey) self.assertIsInstance(v, str) v, locname = CoreText.CTFontCopyLocalizedName( font, CoreText.kCTFontCopyrightNameKey, None) self.assertIsInstance(v, (str, type(None))) self.assertIsInstance(locname, (str, type(None))) self.assertArgIsOut(CoreText.CTFontCopyLocalizedName, 2) v = CoreText.CTFontCopyCharacterSet(font) # self.assertIsInstance(v, CoreText.CFCharacterSetRef) self.assertIn("CharacterSet", type(v).__name__) v = CoreText.CTFontGetStringEncoding(font) self.assertIsInstance(v, int) v = CoreText.CTFontCopySupportedLanguages(font) self.assertIsInstance(v, CoreText.CFArrayRef) self.assertArgIsOut(CoreText.CTFontGetGlyphsForCharacters, 2) v, gl = CoreText.CTFontGetGlyphsForCharacters(font, "hello", None, 5) self.assertTrue(v is True) self.assertIsInstance(gl, tuple) self.assertEqual(len(gl), 5) self.assertIsInstance(gl[0], int) v = CoreText.CTFontGetAscent(font) self.assertIsInstance(v, float) v = CoreText.CTFontGetDescent(font) self.assertIsInstance(v, float) v = CoreText.CTFontGetLeading(font) self.assertIsInstance(v, float) v = CoreText.CTFontGetUnitsPerEm(font) self.assertIsInstance(v, int) v = CoreText.CTFontGetGlyphCount(font) self.assertIsInstance(v, int) v = CoreText.CTFontGetBoundingBox(font) self.assertIsInstance(v, CoreText.CGRect) v = CoreText.CTFontGetUnderlinePosition(font) self.assertIsInstance(v, float) v = CoreText.CTFontGetUnderlineThickness(font) self.assertIsInstance(v, float) v = CoreText.CTFontGetSlantAngle(font) self.assertIsInstance(v, float) v = CoreText.CTFontGetCapHeight(font) self.assertIsInstance(v, float) v = CoreText.CTFontGetXHeight(font) self.assertIsInstance(v, float) v = CoreText.CTFontGetGlyphWithName(font, "A") self.assertIsInstance(v, int) v, r = CoreText.CTFontGetBoundingRectsForGlyphs( font, CoreText.kCTFontDefaultOrientation, gl, None, 5) self.assertIsInstance(v, Quartz.CGRect) self.assertIsInstance(r, tuple) self.assertEqual(len(r), 5) self.assertIsInstance(r[0], Quartz.CGRect) v, r = CoreText.CTFontGetAdvancesForGlyphs( font, CoreText.kCTFontDefaultOrientation, gl, None, 5) self.assertIsInstance(v, float) self.assertIsInstance(r, tuple) self.assertEqual(len(r), 5) self.assertIsInstance(r[0], Quartz.CGSize) r = CoreText.CTFontGetVerticalTranslationsForGlyphs(font, gl, None, 5) self.assertIsInstance(r, tuple) self.assertEqual(len(r), 5) self.assertIsInstance(r[0], Quartz.CGSize) v = CoreText.CTFontCreatePathForGlyph(font, gl[0], None) self.assertIsInstance(v, CoreText.CGPathRef) self.assertResultIsCFRetained(CoreText.CTFontCopyVariationAxes) v = CoreText.CTFontCopyVariationAxes(font) if v is not None: self.assertIsInstance(v, CoreText.CFArrayRef) self.assertResultIsCFRetained(CoreText.CTFontCopyVariation) v = CoreText.CTFontCopyVariation(font) if v is not None: self.assertIsInstance(v, CoreText.CFDictionaryRef) v = CoreText.CTFontCopyFeatures(font) self.assertIsInstance(v, CoreText.CFArrayRef) self.assertResultIsCFRetained(CoreText.CTFontCopyFeatures) self.assertResultIsCFRetained(CoreText.CTFontCopyFeatureSettings) v = CoreText.CTFontCopyFeatureSettings(font) if v is not None: self.assertIsInstance(v, CoreText.CFArrayRef) v, o = CoreText.CTFontCopyGraphicsFont(font, None) self.assertIsInstance(v, CoreText.CGFontRef) if o is not None: self.assertIsInstance(o, CoreText.CTFontDescriptorRef) self.assertResultIsCFRetained(CoreText.CTFontCopyGraphicsFont) self.assertArgIsCFRetained(CoreText.CTFontCopyGraphicsFont, 1) self.assertArgIsOut(CoreText.CTFontCopyGraphicsFont, 1) v = CoreText.CTFontCreateWithGraphicsFont(v, 20.5, None, None) self.assertIsInstance(v, CoreText.CTFontRef) self.assertResultIsCFRetained(CoreText.CTFontCreateWithGraphicsFont) if 0: # Cannot tests these because the ATS framework is not # wrapped. v, o = CoreText.CTFontGetPlatformFont(font, None) self.assertIsInstance(v, CoreText.ATSFontRef) self.assertIsInstance(o, CoreText.CTFontDescriptorRef) v = CoreText.CTFontCreateWithPlatformFont(v, 22.5, None, None) self.assertIsInstance(v, CoreText.CGFontRef) self.assertArgIsCFRetained(CoreText.CTFontGetPlatformFont, 1) self.assertResultIsCFRetained(CoreText.CTFontCreateWithPlatformFont) v = CoreText.CTFontCopyAvailableTables( font, CoreText.kCTFontTableOptionNoOptions) self.assertIsInstance(v, tuple) v = CoreText.CTFontCopyTable(font, v[0], 0) self.assertIsInstance(v, CoreText.CFDataRef) v = CoreText.CTFontGetTypeID() self.assertIsInstance(v, int) v, a = CoreText.CTFontGetLigatureCaretPositions(font, gl[0], None, 5) self.assertIsInstance(v, int) self.assertIsInstance(a, tuple) self.assertEqual(len(a), 5) self.assertTrue(all(isinstance(x, float) for x in a))