Exemple #1
0
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)
Exemple #2
0
    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)
Exemple #3
0
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)
Exemple #4
0
    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)
Exemple #5
0
    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)
Exemple #6
0
    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))