ft-svg-render test

This commit is contained in:
Adrian Johnson 2022-06-24 06:44:30 +09:30
parent 252ff60f1e
commit 8233c6362b
86 changed files with 4806 additions and 0 deletions

689
test/cairo-svg-test-doc.ttx Normal file
View file

@ -0,0 +1,689 @@
<?xml version="1.0" encoding="UTF-8"?>
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="4.19">
<GlyphOrder>
<!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
<GlyphID id="0" name=".notdef"/>
<GlyphID id="1" name="zero"/>
<GlyphID id="2" name="one"/>
<GlyphID id="3" name="two"/>
<GlyphID id="4" name="three"/>
<GlyphID id="5" name="four"/>
<GlyphID id="6" name="five"/>
<GlyphID id="7" name="six"/>
<GlyphID id="8" name="seven"/>
<GlyphID id="9" name="eight"/>
<GlyphID id="10" name="nine"/>
<GlyphID id="11" name="A"/>
</GlyphOrder>
<head>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="1.0"/>
<fontRevision value="1.0"/>
<checkSumAdjustment value="0x6d925ed5"/>
<magicNumber value="0x5f0f3cf5"/>
<flags value="00000000 00000011"/>
<unitsPerEm value="1000"/>
<created value="Wed Jun 15 00:00:00 2022"/>
<modified value="Fri Jul 1 06:21:40 2022"/>
<xMin value="0"/>
<yMin value="0"/>
<xMax value="1000"/>
<yMax value="1000"/>
<macStyle value="00000000 00000000"/>
<lowestRecPPEM value="6"/>
<fontDirectionHint value="2"/>
<indexToLocFormat value="0"/>
<glyphDataFormat value="0"/>
</head>
<hhea>
<tableVersion value="0x00010000"/>
<ascent value="1000"/>
<descent value="0"/>
<lineGap value="200"/>
<advanceWidthMax value="1100"/>
<minLeftSideBearing value="0"/>
<minRightSideBearing value="100"/>
<xMaxExtent value="1000"/>
<caretSlopeRise value="1"/>
<caretSlopeRun value="0"/>
<caretOffset value="0"/>
<reserved0 value="0"/>
<reserved1 value="0"/>
<reserved2 value="0"/>
<reserved3 value="0"/>
<metricDataFormat value="0"/>
<numberOfHMetrics value="1"/>
</hhea>
<maxp>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="0x10000"/>
<numGlyphs value="12"/>
<maxPoints value="4"/>
<maxContours value="1"/>
<maxCompositePoints value="0"/>
<maxCompositeContours value="0"/>
<maxZones value="1"/>
<maxTwilightPoints value="0"/>
<maxStorage value="0"/>
<maxFunctionDefs value="0"/>
<maxInstructionDefs value="0"/>
<maxStackElements value="256"/>
<maxSizeOfInstructions value="1"/>
<maxComponentElements value="0"/>
<maxComponentDepth value="0"/>
</maxp>
<OS_2>
<!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
will be recalculated by the compiler -->
<version value="3"/>
<xAvgCharWidth value="1000"/>
<usWeightClass value="400"/>
<usWidthClass value="5"/>
<fsType value="00000000 00000001"/>
<ySubscriptXSize value="600"/>
<ySubscriptYSize value="600"/>
<ySubscriptXOffset value="0"/>
<ySubscriptYOffset value="75"/>
<ySuperscriptXSize value="600"/>
<ySuperscriptYSize value="600"/>
<ySuperscriptXOffset value="0"/>
<ySuperscriptYOffset value="300"/>
<yStrikeoutSize value="0"/>
<yStrikeoutPosition value="300"/>
<sFamilyClass value="0"/>
<panose>
<bFamilyType value="0"/>
<bSerifStyle value="0"/>
<bWeight value="0"/>
<bProportion value="0"/>
<bContrast value="0"/>
<bStrokeVariation value="0"/>
<bArmStyle value="0"/>
<bLetterForm value="0"/>
<bMidline value="0"/>
<bXHeight value="0"/>
</panose>
<ulUnicodeRange1 value="00000000 00000000 00000000 00000001"/>
<ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
<achVendID value="djr "/>
<fsSelection value="00000000 01000000"/>
<usFirstCharIndex value="48"/>
<usLastCharIndex value="65"/>
<sTypoAscender value="1000"/>
<sTypoDescender value="0"/>
<sTypoLineGap value="200"/>
<usWinAscent value="1000"/>
<usWinDescent value="300"/>
<ulCodePageRange1 value="00000000 00000000 00000000 00000001"/>
<ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
<sxHeight value="500"/>
<sCapHeight value="720"/>
<usDefaultChar value="0"/>
<usBreakChar value="32"/>
<usMaxContext value="3"/>
</OS_2>
<hmtx>
<mtx name=".notdef" width="1100" lsb="0"/>
<mtx name="A" width="1100" lsb="0"/>
<mtx name="eight" width="1100" lsb="0"/>
<mtx name="five" width="1100" lsb="0"/>
<mtx name="four" width="1100" lsb="0"/>
<mtx name="nine" width="1100" lsb="0"/>
<mtx name="one" width="1100" lsb="0"/>
<mtx name="seven" width="1100" lsb="0"/>
<mtx name="six" width="1100" lsb="0"/>
<mtx name="three" width="1100" lsb="0"/>
<mtx name="two" width="1100" lsb="0"/>
<mtx name="zero" width="1100" lsb="0"/>
</hmtx>
<cmap>
<tableVersion version="0"/>
<cmap_format_4 platformID="0" platEncID="3" language="0">
<map code="0x30" name="zero"/><!-- DIGIT ZERO -->
<map code="0x31" name="one"/><!-- DIGIT ONE -->
<map code="0x32" name="two"/><!-- DIGIT TWO -->
<map code="0x33" name="three"/><!-- DIGIT THREE -->
<map code="0x34" name="four"/><!-- DIGIT FOUR -->
<map code="0x35" name="five"/><!-- DIGIT FIVE -->
<map code="0x36" name="six"/><!-- DIGIT SIX -->
<map code="0x37" name="seven"/><!-- DIGIT SEVEN -->
<map code="0x38" name="eight"/><!-- DIGIT EIGHT -->
<map code="0x39" name="nine"/><!-- DIGIT NINE -->
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
</cmap_format_4>
</cmap>
<loca>
<!-- The 'loca' table will be calculated by the compiler -->
</loca>
<glyf>
<!-- The xMin, yMin, xMax and yMax values
will be recalculated by the compiler. -->
<TTGlyph name=".notdef"/><!-- contains no outline data -->
<TTGlyph name="A" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="eight" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="five" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="four" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="nine" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="one" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="seven" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="six" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="three" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="two" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="zero" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
</glyf>
<name>
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
Cairo Svg Test Doc
</namerecord>
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
Regular
</namerecord>
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
Cairo Svg Test Doc Regular
</namerecord>
</name>
<post>
<formatType value="3.0"/>
<italicAngle value="0.0"/>
<underlinePosition value="0"/>
<underlineThickness value="0"/>
<isFixedPitch value="0"/>
<minMemType42 value="0"/>
<maxMemType42 value="0"/>
<minMemType1 value="0"/>
<maxMemType1 value="0"/>
</post>
<CPAL>
<version value="0"/>
<numPaletteEntries value="2"/>
<palette index="0">
<color index="0" value="#C5A1D7FF"/>
<color index="1" value="#80DFC8FF"/>
</palette>
<palette index="1">
<color index="0" value="#6392A9FF"/>
<color index="1" value="#7896B3FF"/>
</palette>
</CPAL>
<SVG>
<svgDoc endGlyphID="0" startGlyphID="0">
<![CDATA[<svg xmlns="http://www.w3.org/2000/svg"></svg>]]>
</svgDoc>
<svgDoc endGlyphID="1" startGlyphID="1">
<![CDATA[<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<rect x="10" y="-90" width="80" height="80"
fill="none" stroke="black" stroke-width="10"/>
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="2" startGlyphID="2">
<![CDATA[<svg viewBox="-5 -5 10 10" xmlns="http://www.w3.org/2000/svg">
<rect x="-4" y="-14" width="8" height="8"
fill="none" stroke="black" stroke-width="1"/>
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="3" startGlyphID="3">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<image x="0" y="-1000" width="1000" height="1000"
xlink:href="data:image/png;base64,
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
BNcsrHnv+f9Qc51Rfhz5VAAAAABJRU5ErkJggg=="/>
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="4" startGlyphID="4">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<image x="0" y="-1000" width="1000" height="1000"
transform="scale(0.5) rotate(-45),translate(800,500)"
xlink:href="data:image/png;base64,
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
BNcsrHnv+f9Qc51Rfhz5VAAAAABJRU5ErkJggg=="/>
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="5" startGlyphID="5">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="1000" height="1000">
<clipPath id="clip" clipPathUnits="userSpaceOnUse" >
<circle cx="500" cy="-500" r="400" />
</clipPath>
<rect x="100" y="-900" width="800" height="800"
stroke="green" stroke-width="100"
clip-path="url(#clip)" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="6" startGlyphID="6">
<![CDATA[<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000">
<clipPath id="clip" clipPathUnits="objectBoundingBox">
<circle cx=".5" cy=".5" r=".5" />
</clipPath>
<rect x="100" y="-900" width="800" height="800"
stroke="green" stroke-width="100"
clip-path="url(#clip)" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="7" startGlyphID="7">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="1000" height="1000">
<clipPath id="clip" clipPathUnits="userSpaceOnUse" >
<circle cx="500" cy="-500" r="400" />
<rect x="100" y="-900" width="800" height="400"/>
</clipPath>
<rect x="100" y="-900" width="800" height="800"
stroke="green" stroke-width="100"
clip-path="url(#clip)" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="8" startGlyphID="8">
<![CDATA[<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000">
<clipPath id="clip" clipPathUnits="objectBoundingBox">
<circle cx=".5" cy=".5" r=".5" />
<rect x="0" y="0" width="1" height="0.5"/>
</clipPath>
<rect x="100" y="-900" width="800" height="800"
stroke="green" stroke-width="100"
clip-path="url(#clip)" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="9" startGlyphID="9">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="1000" height="1000">
<clipPath id="clip" clipPathUnits="userSpaceOnUse" >
<circle cx="500" cy="-500" r="400" />
</clipPath>
<clipPath id="clip2" clipPathUnits="userSpaceOnUse" >
<rect x="100" y="-900" width="800" height="400"/>
</clipPath>
<g clip-path="url(#clip)">
<rect x="100" y="-900" width="800" height="800"
stroke="green" stroke-width="100"
clip-path="url(#clip2)" />
</g>
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="10" startGlyphID="10">
<![CDATA[<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000">
<clipPath id="clip" clipPathUnits="objectBoundingBox">
<circle cx=".5" cy=".5" r=".5" />
</clipPath>
<clipPath id="clip2" clipPathUnits="objectBoundingBox">
<rect x="0" y="0" width="1" height="0.5"/>
</clipPath>
<g clip-path="url(#clip)">
<rect x="100" y="-900" width="800" height="800"
stroke="green" stroke-width="100"
clip-path="url(#clip2)" />
</g>
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="11" startGlyphID="11">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" >
<defs>
<circle id="circle"
cx="0" cy="0" r="250" />
</defs>
<g opacity="0.5">
<use xlink:href="#circle" x="330" y="-500"
fill="red" />
<use xlink:href="#circle" x="670" y="-500"
fill="green" />
</g>
</svg>]]>
</svgDoc>
</SVG>
</ttFont>

View file

@ -0,0 +1,365 @@
<?xml version="1.0" encoding="UTF-8"?>
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="4.19">
<GlyphOrder>
<!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
<GlyphID id="0" name=".notdef"/>
<GlyphID id="1" name="zero"/>
<GlyphID id="2" name="one"/>
<GlyphID id="3" name="two"/>
<GlyphID id="4" name="three"/>
<GlyphID id="5" name="four"/>
<GlyphID id="6" name="five"/>
<GlyphID id="7" name="six"/>
<GlyphID id="8" name="seven"/>
<GlyphID id="9" name="eight"/>
</GlyphOrder>
<head>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="1.0"/>
<fontRevision value="1.0"/>
<checkSumAdjustment value="0x71e2812"/>
<magicNumber value="0x5f0f3cf5"/>
<flags value="00000000 00000011"/>
<unitsPerEm value="1000"/>
<created value="Wed Jun 15 00:00:00 2022"/>
<modified value="Fri Jul 1 06:21:40 2022"/>
<xMin value="0"/>
<yMin value="0"/>
<xMax value="1000"/>
<yMax value="1000"/>
<macStyle value="00000000 00000000"/>
<lowestRecPPEM value="6"/>
<fontDirectionHint value="2"/>
<indexToLocFormat value="0"/>
<glyphDataFormat value="0"/>
</head>
<hhea>
<tableVersion value="0x00010000"/>
<ascent value="1000"/>
<descent value="0"/>
<lineGap value="200"/>
<advanceWidthMax value="1100"/>
<minLeftSideBearing value="0"/>
<minRightSideBearing value="100"/>
<xMaxExtent value="1000"/>
<caretSlopeRise value="1"/>
<caretSlopeRun value="0"/>
<caretOffset value="0"/>
<reserved0 value="0"/>
<reserved1 value="0"/>
<reserved2 value="0"/>
<reserved3 value="0"/>
<metricDataFormat value="0"/>
<numberOfHMetrics value="1"/>
</hhea>
<maxp>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="0x10000"/>
<numGlyphs value="10"/>
<maxPoints value="4"/>
<maxContours value="1"/>
<maxCompositePoints value="0"/>
<maxCompositeContours value="0"/>
<maxZones value="1"/>
<maxTwilightPoints value="0"/>
<maxStorage value="0"/>
<maxFunctionDefs value="0"/>
<maxInstructionDefs value="0"/>
<maxStackElements value="256"/>
<maxSizeOfInstructions value="1"/>
<maxComponentElements value="0"/>
<maxComponentDepth value="0"/>
</maxp>
<OS_2>
<!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
will be recalculated by the compiler -->
<version value="3"/>
<xAvgCharWidth value="1000"/>
<usWeightClass value="400"/>
<usWidthClass value="5"/>
<fsType value="00000000 00000001"/>
<ySubscriptXSize value="600"/>
<ySubscriptYSize value="600"/>
<ySubscriptXOffset value="0"/>
<ySubscriptYOffset value="75"/>
<ySuperscriptXSize value="600"/>
<ySuperscriptYSize value="600"/>
<ySuperscriptXOffset value="0"/>
<ySuperscriptYOffset value="300"/>
<yStrikeoutSize value="0"/>
<yStrikeoutPosition value="300"/>
<sFamilyClass value="0"/>
<panose>
<bFamilyType value="0"/>
<bSerifStyle value="0"/>
<bWeight value="0"/>
<bProportion value="0"/>
<bContrast value="0"/>
<bStrokeVariation value="0"/>
<bArmStyle value="0"/>
<bLetterForm value="0"/>
<bMidline value="0"/>
<bXHeight value="0"/>
</panose>
<ulUnicodeRange1 value="00000000 00000000 00000000 00000001"/>
<ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
<achVendID value="djr "/>
<fsSelection value="00000000 01000000"/>
<usFirstCharIndex value="48"/>
<usLastCharIndex value="56"/>
<sTypoAscender value="1000"/>
<sTypoDescender value="0"/>
<sTypoLineGap value="200"/>
<usWinAscent value="1000"/>
<usWinDescent value="300"/>
<ulCodePageRange1 value="00000000 00000000 00000000 00000001"/>
<ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
<sxHeight value="500"/>
<sCapHeight value="720"/>
<usDefaultChar value="0"/>
<usBreakChar value="32"/>
<usMaxContext value="3"/>
</OS_2>
<hmtx>
<mtx name=".notdef" width="1100" lsb="0"/>
<mtx name="eight" width="1100" lsb="0"/>
<mtx name="five" width="1100" lsb="0"/>
<mtx name="four" width="1100" lsb="0"/>
<mtx name="one" width="1100" lsb="0"/>
<mtx name="seven" width="1100" lsb="0"/>
<mtx name="six" width="1100" lsb="0"/>
<mtx name="three" width="1100" lsb="0"/>
<mtx name="two" width="1100" lsb="0"/>
<mtx name="zero" width="1100" lsb="0"/>
</hmtx>
<cmap>
<tableVersion version="0"/>
<cmap_format_4 platformID="0" platEncID="3" language="0">
<map code="0x30" name="zero"/><!-- DIGIT ZERO -->
<map code="0x31" name="one"/><!-- DIGIT ONE -->
<map code="0x32" name="two"/><!-- DIGIT TWO -->
<map code="0x33" name="three"/><!-- DIGIT THREE -->
<map code="0x34" name="four"/><!-- DIGIT FOUR -->
<map code="0x35" name="five"/><!-- DIGIT FIVE -->
<map code="0x36" name="six"/><!-- DIGIT SIX -->
<map code="0x37" name="seven"/><!-- DIGIT SEVEN -->
<map code="0x38" name="eight"/><!-- DIGIT EIGHT -->
</cmap_format_4>
</cmap>
<loca>
<!-- The 'loca' table will be calculated by the compiler -->
</loca>
<glyf>
<!-- The xMin, yMin, xMax and yMax values
will be recalculated by the compiler. -->
<TTGlyph name=".notdef"/><!-- contains no outline data -->
<TTGlyph name="eight" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="five" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="four" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="one" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="seven" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="six" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="three" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="two" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="zero" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
</glyf>
<name>
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
Cairo Svg Test Fill
</namerecord>
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
Regular
</namerecord>
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
Cairo Svg Test Fill Regular
</namerecord>
</name>
<post>
<formatType value="3.0"/>
<italicAngle value="0.0"/>
<underlinePosition value="0"/>
<underlineThickness value="0"/>
<isFixedPitch value="0"/>
<minMemType42 value="0"/>
<maxMemType42 value="0"/>
<minMemType1 value="0"/>
<maxMemType1 value="0"/>
</post>
<CPAL>
<version value="0"/>
<numPaletteEntries value="2"/>
<palette index="0">
<color index="0" value="#C5A1D7FF"/>
<color index="1" value="#80DFC8FF"/>
</palette>
<palette index="1">
<color index="0" value="#6392A9FF"/>
<color index="1" value="#7896B3FF"/>
</palette>
</CPAL>
<SVG>
<svgDoc endGlyphID="0" startGlyphID="0">
<![CDATA[<svg xmlns="http://www.w3.org/2000/svg"></svg>]]>
</svgDoc>
<svgDoc endGlyphID="1" startGlyphID="1">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<rect x="100" y="-750" width="800" height="500"
fill="indigo" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="2" startGlyphID="2">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<rect x="100" y="-750" width="800" height="500"
fill="#AA55AA" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="3" startGlyphID="3">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<rect x="100" y="-750" width="800" height="500"
fill="#A5A" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="4" startGlyphID="4">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<rect x="100" y="-750" width="800" height="500"
fill="rgb (75, 0 , 130)" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="5" startGlyphID="5">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<rect x="100" y="-750" width="800" height="500"
fill="currentColor" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="6" startGlyphID="6">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<rect x="100" y="-750" width="800" height="500"
fill="var(--color1, red)" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="7" startGlyphID="7">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<rect x="100" y="-750" width="800" height="500"
fill="magenta" fill-opacity="0.5" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="8" startGlyphID="8">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
color="green" >
<rect x="100" y="-750" width="800" height="500"
fill="currentColor" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="9" startGlyphID="9">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<g transform="scale(5,5) translate(0,-150)">
<polygon fill-rule="nonzero"
points="50,0 21,90 98,35 2,35 79,90"/>
<polygon fill-rule="evenodd"
points="150,0 121,90 198,35 102,35 179,90"/>
</g>
</svg>]]>
</svgDoc>
</SVG>
</ttFont>

View file

@ -0,0 +1,441 @@
<?xml version="1.0" encoding="UTF-8"?>
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="4.19">
<GlyphOrder>
<!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
<GlyphID id="0" name=".notdef"/>
<GlyphID id="1" name="zero"/>
<GlyphID id="2" name="one"/>
<GlyphID id="3" name="two"/>
<GlyphID id="4" name="three"/>
<GlyphID id="5" name="four"/>
<GlyphID id="6" name="five"/>
<GlyphID id="7" name="six"/>
<GlyphID id="8" name="seven"/>
<GlyphID id="9" name="eight"/>
<GlyphID id="10" name="nine"/>
</GlyphOrder>
<head>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="1.0"/>
<fontRevision value="1.0"/>
<checkSumAdjustment value="0x4322c7de"/>
<magicNumber value="0x5f0f3cf5"/>
<flags value="00000000 00000011"/>
<unitsPerEm value="1000"/>
<created value="Wed Jun 15 00:00:00 2022"/>
<modified value="Fri Jul 1 06:21:39 2022"/>
<xMin value="0"/>
<yMin value="0"/>
<xMax value="1000"/>
<yMax value="1000"/>
<macStyle value="00000000 00000000"/>
<lowestRecPPEM value="6"/>
<fontDirectionHint value="2"/>
<indexToLocFormat value="0"/>
<glyphDataFormat value="0"/>
</head>
<hhea>
<tableVersion value="0x00010000"/>
<ascent value="1000"/>
<descent value="0"/>
<lineGap value="200"/>
<advanceWidthMax value="1100"/>
<minLeftSideBearing value="0"/>
<minRightSideBearing value="100"/>
<xMaxExtent value="1000"/>
<caretSlopeRise value="1"/>
<caretSlopeRun value="0"/>
<caretOffset value="0"/>
<reserved0 value="0"/>
<reserved1 value="0"/>
<reserved2 value="0"/>
<reserved3 value="0"/>
<metricDataFormat value="0"/>
<numberOfHMetrics value="1"/>
</hhea>
<maxp>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="0x10000"/>
<numGlyphs value="11"/>
<maxPoints value="4"/>
<maxContours value="1"/>
<maxCompositePoints value="0"/>
<maxCompositeContours value="0"/>
<maxZones value="1"/>
<maxTwilightPoints value="0"/>
<maxStorage value="0"/>
<maxFunctionDefs value="0"/>
<maxInstructionDefs value="0"/>
<maxStackElements value="256"/>
<maxSizeOfInstructions value="1"/>
<maxComponentElements value="0"/>
<maxComponentDepth value="0"/>
</maxp>
<OS_2>
<!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
will be recalculated by the compiler -->
<version value="3"/>
<xAvgCharWidth value="1000"/>
<usWeightClass value="400"/>
<usWidthClass value="5"/>
<fsType value="00000000 00000001"/>
<ySubscriptXSize value="600"/>
<ySubscriptYSize value="600"/>
<ySubscriptXOffset value="0"/>
<ySubscriptYOffset value="75"/>
<ySuperscriptXSize value="600"/>
<ySuperscriptYSize value="600"/>
<ySuperscriptXOffset value="0"/>
<ySuperscriptYOffset value="300"/>
<yStrikeoutSize value="0"/>
<yStrikeoutPosition value="300"/>
<sFamilyClass value="0"/>
<panose>
<bFamilyType value="0"/>
<bSerifStyle value="0"/>
<bWeight value="0"/>
<bProportion value="0"/>
<bContrast value="0"/>
<bStrokeVariation value="0"/>
<bArmStyle value="0"/>
<bLetterForm value="0"/>
<bMidline value="0"/>
<bXHeight value="0"/>
</panose>
<ulUnicodeRange1 value="00000000 00000000 00000000 00000001"/>
<ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
<achVendID value="djr "/>
<fsSelection value="00000000 01000000"/>
<usFirstCharIndex value="48"/>
<usLastCharIndex value="57"/>
<sTypoAscender value="1000"/>
<sTypoDescender value="0"/>
<sTypoLineGap value="200"/>
<usWinAscent value="1000"/>
<usWinDescent value="300"/>
<ulCodePageRange1 value="00000000 00000000 00000000 00000001"/>
<ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
<sxHeight value="500"/>
<sCapHeight value="720"/>
<usDefaultChar value="0"/>
<usBreakChar value="32"/>
<usMaxContext value="3"/>
</OS_2>
<hmtx>
<mtx name=".notdef" width="1100" lsb="0"/>
<mtx name="eight" width="1100" lsb="0"/>
<mtx name="five" width="1100" lsb="0"/>
<mtx name="four" width="1100" lsb="0"/>
<mtx name="nine" width="1100" lsb="0"/>
<mtx name="one" width="1100" lsb="0"/>
<mtx name="seven" width="1100" lsb="0"/>
<mtx name="six" width="1100" lsb="0"/>
<mtx name="three" width="1100" lsb="0"/>
<mtx name="two" width="1100" lsb="0"/>
<mtx name="zero" width="1100" lsb="0"/>
</hmtx>
<cmap>
<tableVersion version="0"/>
<cmap_format_4 platformID="0" platEncID="3" language="0">
<map code="0x30" name="zero"/><!-- DIGIT ZERO -->
<map code="0x31" name="one"/><!-- DIGIT ONE -->
<map code="0x32" name="two"/><!-- DIGIT TWO -->
<map code="0x33" name="three"/><!-- DIGIT THREE -->
<map code="0x34" name="four"/><!-- DIGIT FOUR -->
<map code="0x35" name="five"/><!-- DIGIT FIVE -->
<map code="0x36" name="six"/><!-- DIGIT SIX -->
<map code="0x37" name="seven"/><!-- DIGIT SEVEN -->
<map code="0x38" name="eight"/><!-- DIGIT EIGHT -->
<map code="0x39" name="nine"/><!-- DIGIT NINE -->
</cmap_format_4>
</cmap>
<loca>
<!-- The 'loca' table will be calculated by the compiler -->
</loca>
<glyf>
<!-- The xMin, yMin, xMax and yMax values
will be recalculated by the compiler. -->
<TTGlyph name=".notdef"/><!-- contains no outline data -->
<TTGlyph name="eight" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="five" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="four" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="nine" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="one" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="seven" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="six" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="three" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="two" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="zero" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
</glyf>
<name>
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
Cairo Svg Test Gradient
</namerecord>
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
Regular
</namerecord>
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
Cairo Svg Test Gradient Regular
</namerecord>
</name>
<post>
<formatType value="3.0"/>
<italicAngle value="0.0"/>
<underlinePosition value="0"/>
<underlineThickness value="0"/>
<isFixedPitch value="0"/>
<minMemType42 value="0"/>
<maxMemType42 value="0"/>
<minMemType1 value="0"/>
<maxMemType1 value="0"/>
</post>
<CPAL>
<version value="0"/>
<numPaletteEntries value="2"/>
<palette index="0">
<color index="0" value="#C5A1D7FF"/>
<color index="1" value="#80DFC8FF"/>
</palette>
<palette index="1">
<color index="0" value="#6392A9FF"/>
<color index="1" value="#7896B3FF"/>
</palette>
</CPAL>
<SVG>
<svgDoc endGlyphID="0" startGlyphID="0">
<![CDATA[<svg xmlns="http://www.w3.org/2000/svg"></svg>]]>
</svgDoc>
<svgDoc endGlyphID="1" startGlyphID="1">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="grad" x1="33%" x21="66%">
<stop offset="0%" stop-color="blue" stop-opacity="1" />
<stop offset="100%" stop-color="red" stop-opacity="0.5" />
</linearGradient>
</defs>
<rect x="100" y="-900" width="800" height="800" fill="url(#grad)" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="2" startGlyphID="2">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="grad" x1="33%" x2="66%"
spreadMethod="reflect">
<stop offset="0%" stop-color="blue" stop-opacity="1" />
<stop offset="100%" stop-color="red" stop-opacity="1" />
</linearGradient>
</defs>
<rect x="0" y="-900" width="1000" height="800" fill="url(#grad)" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="3" startGlyphID="3">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="grad" x1="33%" x2="66%"
spreadMethod="repeat">
<stop offset="0%" stop-color="blue" stop-opacity="1" />
<stop offset="100%" stop-color="red" stop-opacity="1" />
</linearGradient>
</defs>
<rect x="0" y="-900" width="1000" height="800" fill="url(#grad)" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="4" startGlyphID="4">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="grad" x1="300" y1="-500" x2="600" y2="-500"
gradientUnits="userSpaceOnUse">
<stop offset="0%" stop-color="blue" stop-opacity="1" />
<stop offset="100%" stop-color="red" stop-opacity="1" />
</linearGradient>
</defs>
<rect x="0" y="-900" width="1000" height="800" fill="url(#grad)" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="5" startGlyphID="5">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="grad" gradientTransform="rotate(45)">
<stop offset="0%" stop-color="blue" stop-opacity="1" />
<stop offset="100%" stop-color="red" stop-opacity="1" />
</linearGradient>
</defs>
<rect x="100" y="-900" width="800" height="800" fill="url(#grad)" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="6" startGlyphID="6">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<radialGradient id="grad" cx="50%" cy="50%"
fx="0.75" fy="0.35" r="0.5">
<stop offset="0%" stop-color="white" stop-opacity="1" />
<stop offset="100%" stop-color="green" stop-opacity="1" />
</radialGradient>
</defs>
<rect x="100" y="-900" width="800" height="800" fill="url(#grad)" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="7" startGlyphID="7">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<radialGradient id="grad" cx="75%" cy="25%" r="33%"
fx="0.64" fy="0.18" fr="0.17"
spreadMethod="reflect" >
<stop offset="0%" stop-color="white" stop-opacity="1" />
<stop offset="100%" stop-color="green" stop-opacity="1" />
</radialGradient>
</defs>
<rect x="100" y="-900" width="800" height="800" fill="url(#grad)" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="8" startGlyphID="8">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<radialGradient id="grad" cx="75%" cy="25%" r="33%"
fx="0.64" fy="0.18" fr="0.17"
spreadMethod="repeat" >
<stop offset="0%" stop-color="white" stop-opacity="1" />
<stop offset="100%" stop-color="green" stop-opacity="1" />
</radialGradient>
</defs>
<rect x="100" y="-900" width="800" height="800" fill="url(#grad)" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="9" startGlyphID="9">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<radialGradient id="grad" cx="450" cy="-550" r="400"
fx="600" fy="-400" fr="10"
gradientUnits="userSpaceOnUse" >
<stop offset="0%" stop-color="red" stop-opacity="1" />
<stop offset="100%" stop-color="green" stop-opacity="0.5" />
</radialGradient>
</defs>
<rect x="0" y="-1000" width="1000" height="1000" fill="url(#grad)" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="10" startGlyphID="10">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<radialGradient id="grad" cx="50%" cy="25%"
fx="0.75" fy="0.35" r="0.5"
gradientTransform="scale(1, 2)">
<stop offset="0%" stop-color="red" stop-opacity="1" />
<stop offset="100%" stop-color="green" stop-opacity="1" />
</radialGradient>
</defs>
<rect x="100" y="-900" width="800" height="800" fill="url(#grad)" />
</svg>]]>
</svgDoc>
</SVG>
</ttFont>

View file

@ -0,0 +1,281 @@
<?xml version="1.0" encoding="UTF-8"?>
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="4.19">
<GlyphOrder>
<!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
<GlyphID id="0" name=".notdef"/>
<GlyphID id="1" name="zero"/>
<GlyphID id="2" name="one"/>
<GlyphID id="3" name="two"/>
<GlyphID id="4" name="three"/>
</GlyphOrder>
<head>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="1.0"/>
<fontRevision value="1.0"/>
<checkSumAdjustment value="0x20ff0b91"/>
<magicNumber value="0x5f0f3cf5"/>
<flags value="00000000 00000011"/>
<unitsPerEm value="1000"/>
<created value="Wed Jun 15 00:00:00 2022"/>
<modified value="Fri Jul 1 06:21:40 2022"/>
<xMin value="0"/>
<yMin value="0"/>
<xMax value="1000"/>
<yMax value="1000"/>
<macStyle value="00000000 00000000"/>
<lowestRecPPEM value="6"/>
<fontDirectionHint value="2"/>
<indexToLocFormat value="0"/>
<glyphDataFormat value="0"/>
</head>
<hhea>
<tableVersion value="0x00010000"/>
<ascent value="1000"/>
<descent value="0"/>
<lineGap value="200"/>
<advanceWidthMax value="1100"/>
<minLeftSideBearing value="0"/>
<minRightSideBearing value="100"/>
<xMaxExtent value="1000"/>
<caretSlopeRise value="1"/>
<caretSlopeRun value="0"/>
<caretOffset value="0"/>
<reserved0 value="0"/>
<reserved1 value="0"/>
<reserved2 value="0"/>
<reserved3 value="0"/>
<metricDataFormat value="0"/>
<numberOfHMetrics value="1"/>
</hhea>
<maxp>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="0x10000"/>
<numGlyphs value="5"/>
<maxPoints value="4"/>
<maxContours value="1"/>
<maxCompositePoints value="0"/>
<maxCompositeContours value="0"/>
<maxZones value="1"/>
<maxTwilightPoints value="0"/>
<maxStorage value="0"/>
<maxFunctionDefs value="0"/>
<maxInstructionDefs value="0"/>
<maxStackElements value="256"/>
<maxSizeOfInstructions value="1"/>
<maxComponentElements value="0"/>
<maxComponentDepth value="0"/>
</maxp>
<OS_2>
<!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
will be recalculated by the compiler -->
<version value="3"/>
<xAvgCharWidth value="1000"/>
<usWeightClass value="400"/>
<usWidthClass value="5"/>
<fsType value="00000000 00000001"/>
<ySubscriptXSize value="600"/>
<ySubscriptYSize value="600"/>
<ySubscriptXOffset value="0"/>
<ySubscriptYOffset value="75"/>
<ySuperscriptXSize value="600"/>
<ySuperscriptYSize value="600"/>
<ySuperscriptXOffset value="0"/>
<ySuperscriptYOffset value="300"/>
<yStrikeoutSize value="0"/>
<yStrikeoutPosition value="300"/>
<sFamilyClass value="0"/>
<panose>
<bFamilyType value="0"/>
<bSerifStyle value="0"/>
<bWeight value="0"/>
<bProportion value="0"/>
<bContrast value="0"/>
<bStrokeVariation value="0"/>
<bArmStyle value="0"/>
<bLetterForm value="0"/>
<bMidline value="0"/>
<bXHeight value="0"/>
</panose>
<ulUnicodeRange1 value="00000000 00000000 00000000 00000001"/>
<ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
<achVendID value="djr "/>
<fsSelection value="00000000 01000000"/>
<usFirstCharIndex value="48"/>
<usLastCharIndex value="51"/>
<sTypoAscender value="1000"/>
<sTypoDescender value="0"/>
<sTypoLineGap value="200"/>
<usWinAscent value="1000"/>
<usWinDescent value="300"/>
<ulCodePageRange1 value="00000000 00000000 00000000 00000001"/>
<ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
<sxHeight value="500"/>
<sCapHeight value="720"/>
<usDefaultChar value="0"/>
<usBreakChar value="32"/>
<usMaxContext value="3"/>
</OS_2>
<hmtx>
<mtx name=".notdef" width="1100" lsb="0"/>
<mtx name="one" width="1100" lsb="0"/>
<mtx name="three" width="1100" lsb="0"/>
<mtx name="two" width="1100" lsb="0"/>
<mtx name="zero" width="1100" lsb="0"/>
</hmtx>
<cmap>
<tableVersion version="0"/>
<cmap_format_4 platformID="0" platEncID="3" language="0">
<map code="0x30" name="zero"/><!-- DIGIT ZERO -->
<map code="0x31" name="one"/><!-- DIGIT ONE -->
<map code="0x32" name="two"/><!-- DIGIT TWO -->
<map code="0x33" name="three"/><!-- DIGIT THREE -->
</cmap_format_4>
</cmap>
<loca>
<!-- The 'loca' table will be calculated by the compiler -->
</loca>
<glyf>
<!-- The xMin, yMin, xMax and yMax values
will be recalculated by the compiler. -->
<TTGlyph name=".notdef"/><!-- contains no outline data -->
<TTGlyph name="one" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="three" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="two" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="zero" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
</glyf>
<name>
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
Cairo Svg Test Path
</namerecord>
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
Regular
</namerecord>
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
Cairo Svg Test Path Regular
</namerecord>
</name>
<post>
<formatType value="3.0"/>
<italicAngle value="0.0"/>
<underlinePosition value="0"/>
<underlineThickness value="0"/>
<isFixedPitch value="0"/>
<minMemType42 value="0"/>
<maxMemType42 value="0"/>
<minMemType1 value="0"/>
<maxMemType1 value="0"/>
</post>
<CPAL>
<version value="0"/>
<numPaletteEntries value="2"/>
<palette index="0">
<color index="0" value="#C5A1D7FF"/>
<color index="1" value="#80DFC8FF"/>
</palette>
<palette index="1">
<color index="0" value="#6392A9FF"/>
<color index="1" value="#7896B3FF"/>
</palette>
</CPAL>
<SVG>
<svgDoc endGlyphID="0" startGlyphID="0">
<![CDATA[<svg xmlns="http://www.w3.org/2000/svg"></svg>]]>
</svgDoc>
<svgDoc endGlyphID="1" startGlyphID="1">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<path fill="none" stroke="black" stroke-width="20"
d="M 200 -200
L 500 -500
H 800
V -200
" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="2" startGlyphID="2">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<path fill="none" stroke="black" stroke-width="20"
d="M200,-400
C200,-200
500,-200
500,-400
S800,-600
800,-400" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="3" startGlyphID="3">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<path fill="none" stroke="black" stroke-width="20"
d="M200,-300
Q400,-50
600,-300
T1000,-300"
/>
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="4" startGlyphID="4">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<path fill="none" stroke="black" stroke-width="20"
d="M500,-500
L 712 -712
A300,300 0 1,0 712, -288 z"
/>
</svg>]]>
</svgDoc>
</SVG>
</ttFont>

View file

@ -0,0 +1,333 @@
<?xml version="1.0" encoding="UTF-8"?>
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="4.19">
<GlyphOrder>
<!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
<GlyphID id="0" name=".notdef"/>
<GlyphID id="1" name="zero"/>
<GlyphID id="2" name="one"/>
<GlyphID id="3" name="two"/>
<GlyphID id="4" name="three"/>
<GlyphID id="5" name="four"/>
<GlyphID id="6" name="five"/>
<GlyphID id="7" name="six"/>
</GlyphOrder>
<head>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="1.0"/>
<fontRevision value="1.0"/>
<checkSumAdjustment value="0xa8919a30"/>
<magicNumber value="0x5f0f3cf5"/>
<flags value="00000000 00000011"/>
<unitsPerEm value="1000"/>
<created value="Wed Jun 15 00:00:00 2022"/>
<modified value="Fri Jul 1 06:21:40 2022"/>
<xMin value="0"/>
<yMin value="0"/>
<xMax value="1000"/>
<yMax value="1000"/>
<macStyle value="00000000 00000000"/>
<lowestRecPPEM value="6"/>
<fontDirectionHint value="2"/>
<indexToLocFormat value="0"/>
<glyphDataFormat value="0"/>
</head>
<hhea>
<tableVersion value="0x00010000"/>
<ascent value="1000"/>
<descent value="0"/>
<lineGap value="200"/>
<advanceWidthMax value="1100"/>
<minLeftSideBearing value="0"/>
<minRightSideBearing value="100"/>
<xMaxExtent value="1000"/>
<caretSlopeRise value="1"/>
<caretSlopeRun value="0"/>
<caretOffset value="0"/>
<reserved0 value="0"/>
<reserved1 value="0"/>
<reserved2 value="0"/>
<reserved3 value="0"/>
<metricDataFormat value="0"/>
<numberOfHMetrics value="1"/>
</hhea>
<maxp>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="0x10000"/>
<numGlyphs value="8"/>
<maxPoints value="4"/>
<maxContours value="1"/>
<maxCompositePoints value="0"/>
<maxCompositeContours value="0"/>
<maxZones value="1"/>
<maxTwilightPoints value="0"/>
<maxStorage value="0"/>
<maxFunctionDefs value="0"/>
<maxInstructionDefs value="0"/>
<maxStackElements value="256"/>
<maxSizeOfInstructions value="1"/>
<maxComponentElements value="0"/>
<maxComponentDepth value="0"/>
</maxp>
<OS_2>
<!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
will be recalculated by the compiler -->
<version value="3"/>
<xAvgCharWidth value="1000"/>
<usWeightClass value="400"/>
<usWidthClass value="5"/>
<fsType value="00000000 00000001"/>
<ySubscriptXSize value="600"/>
<ySubscriptYSize value="600"/>
<ySubscriptXOffset value="0"/>
<ySubscriptYOffset value="75"/>
<ySuperscriptXSize value="600"/>
<ySuperscriptYSize value="600"/>
<ySuperscriptXOffset value="0"/>
<ySuperscriptYOffset value="300"/>
<yStrikeoutSize value="0"/>
<yStrikeoutPosition value="300"/>
<sFamilyClass value="0"/>
<panose>
<bFamilyType value="0"/>
<bSerifStyle value="0"/>
<bWeight value="0"/>
<bProportion value="0"/>
<bContrast value="0"/>
<bStrokeVariation value="0"/>
<bArmStyle value="0"/>
<bLetterForm value="0"/>
<bMidline value="0"/>
<bXHeight value="0"/>
</panose>
<ulUnicodeRange1 value="00000000 00000000 00000000 00000001"/>
<ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
<achVendID value="djr "/>
<fsSelection value="00000000 01000000"/>
<usFirstCharIndex value="48"/>
<usLastCharIndex value="54"/>
<sTypoAscender value="1000"/>
<sTypoDescender value="0"/>
<sTypoLineGap value="200"/>
<usWinAscent value="1000"/>
<usWinDescent value="300"/>
<ulCodePageRange1 value="00000000 00000000 00000000 00000001"/>
<ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
<sxHeight value="500"/>
<sCapHeight value="720"/>
<usDefaultChar value="0"/>
<usBreakChar value="32"/>
<usMaxContext value="3"/>
</OS_2>
<hmtx>
<mtx name=".notdef" width="1100" lsb="0"/>
<mtx name="five" width="1100" lsb="0"/>
<mtx name="four" width="1100" lsb="0"/>
<mtx name="one" width="1100" lsb="0"/>
<mtx name="six" width="1100" lsb="0"/>
<mtx name="three" width="1100" lsb="0"/>
<mtx name="two" width="1100" lsb="0"/>
<mtx name="zero" width="1100" lsb="0"/>
</hmtx>
<cmap>
<tableVersion version="0"/>
<cmap_format_4 platformID="0" platEncID="3" language="0">
<map code="0x30" name="zero"/><!-- DIGIT ZERO -->
<map code="0x31" name="one"/><!-- DIGIT ONE -->
<map code="0x32" name="two"/><!-- DIGIT TWO -->
<map code="0x33" name="three"/><!-- DIGIT THREE -->
<map code="0x34" name="four"/><!-- DIGIT FOUR -->
<map code="0x35" name="five"/><!-- DIGIT FIVE -->
<map code="0x36" name="six"/><!-- DIGIT SIX -->
</cmap_format_4>
</cmap>
<loca>
<!-- The 'loca' table will be calculated by the compiler -->
</loca>
<glyf>
<!-- The xMin, yMin, xMax and yMax values
will be recalculated by the compiler. -->
<TTGlyph name=".notdef"/><!-- contains no outline data -->
<TTGlyph name="five" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="four" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="one" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="six" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="three" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="two" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="zero" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
</glyf>
<name>
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
Cairo Svg Test Shapes
</namerecord>
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
Regular
</namerecord>
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
Cairo Svg Test Shapes Regular
</namerecord>
</name>
<post>
<formatType value="3.0"/>
<italicAngle value="0.0"/>
<underlinePosition value="0"/>
<underlineThickness value="0"/>
<isFixedPitch value="0"/>
<minMemType42 value="0"/>
<maxMemType42 value="0"/>
<minMemType1 value="0"/>
<maxMemType1 value="0"/>
</post>
<CPAL>
<version value="0"/>
<numPaletteEntries value="2"/>
<palette index="0">
<color index="0" value="#C5A1D7FF"/>
<color index="1" value="#80DFC8FF"/>
</palette>
<palette index="1">
<color index="0" value="#6392A9FF"/>
<color index="1" value="#7896B3FF"/>
</palette>
</CPAL>
<SVG>
<svgDoc endGlyphID="0" startGlyphID="0">
<![CDATA[<svg xmlns="http://www.w3.org/2000/svg"></svg>]]>
</svgDoc>
<svgDoc endGlyphID="1" startGlyphID="1">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<rect x="100" y="-750" width="800" height="500"/>
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="2" startGlyphID="2">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<rect x="100" y="-750" width="800" height="500" rx="100" ry="100"/>
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="3" startGlyphID="3">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<circle cx="500" cy="-500" r="400"/>
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="4" startGlyphID="4">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<ellipse cx="500" cy="-500" rx="400" ry="200"/>
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="5" startGlyphID="5">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<line x1="200" y1="-200" x2="800" y2="-800" stroke="black" stroke-width="20"/>
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="6" startGlyphID="6">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<polyline fill="none" stroke="black" stroke-width="20"
points="100, -100,
300, -100,
300, -300,
500, -300,
500, -500,
700, -500
700, -700
900, -700
900, -900" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="7" startGlyphID="7">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="500" height="500">
<polygon points="350, -75
379, -161
469, -161
397, -215
423, -301
350, -250
277, -301
303, -215
231, -161
321, -161" />
</svg>]]>
</svgDoc>
</SVG>
</ttFont>

View file

@ -0,0 +1,608 @@
<?xml version="1.0" encoding="UTF-8"?>
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="4.19">
<GlyphOrder>
<!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
<GlyphID id="0" name=".notdef"/>
<GlyphID id="1" name="zero"/>
<GlyphID id="2" name="one"/>
<GlyphID id="3" name="two"/>
<GlyphID id="4" name="three"/>
<GlyphID id="5" name="four"/>
<GlyphID id="6" name="five"/>
<GlyphID id="7" name="six"/>
<GlyphID id="8" name="seven"/>
<GlyphID id="9" name="eight"/>
<GlyphID id="10" name="nine"/>
<GlyphID id="11" name="A"/>
<GlyphID id="12" name="B"/>
<GlyphID id="13" name="C"/>
<GlyphID id="14" name="D"/>
<GlyphID id="15" name="E"/>
<GlyphID id="16" name="F"/>
</GlyphOrder>
<head>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="1.0"/>
<fontRevision value="1.0"/>
<checkSumAdjustment value="0x2d1b9ede"/>
<magicNumber value="0x5f0f3cf5"/>
<flags value="00000000 00000011"/>
<unitsPerEm value="1000"/>
<created value="Wed Jun 15 00:00:00 2022"/>
<modified value="Fri Jul 1 06:21:39 2022"/>
<xMin value="0"/>
<yMin value="0"/>
<xMax value="1000"/>
<yMax value="1000"/>
<macStyle value="00000000 00000000"/>
<lowestRecPPEM value="6"/>
<fontDirectionHint value="2"/>
<indexToLocFormat value="0"/>
<glyphDataFormat value="0"/>
</head>
<hhea>
<tableVersion value="0x00010000"/>
<ascent value="1000"/>
<descent value="0"/>
<lineGap value="200"/>
<advanceWidthMax value="1100"/>
<minLeftSideBearing value="0"/>
<minRightSideBearing value="100"/>
<xMaxExtent value="1000"/>
<caretSlopeRise value="1"/>
<caretSlopeRun value="0"/>
<caretOffset value="0"/>
<reserved0 value="0"/>
<reserved1 value="0"/>
<reserved2 value="0"/>
<reserved3 value="0"/>
<metricDataFormat value="0"/>
<numberOfHMetrics value="1"/>
</hhea>
<maxp>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="0x10000"/>
<numGlyphs value="17"/>
<maxPoints value="4"/>
<maxContours value="1"/>
<maxCompositePoints value="0"/>
<maxCompositeContours value="0"/>
<maxZones value="1"/>
<maxTwilightPoints value="0"/>
<maxStorage value="0"/>
<maxFunctionDefs value="0"/>
<maxInstructionDefs value="0"/>
<maxStackElements value="256"/>
<maxSizeOfInstructions value="1"/>
<maxComponentElements value="0"/>
<maxComponentDepth value="0"/>
</maxp>
<OS_2>
<!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
will be recalculated by the compiler -->
<version value="3"/>
<xAvgCharWidth value="1000"/>
<usWeightClass value="400"/>
<usWidthClass value="5"/>
<fsType value="00000000 00000001"/>
<ySubscriptXSize value="600"/>
<ySubscriptYSize value="600"/>
<ySubscriptXOffset value="0"/>
<ySubscriptYOffset value="75"/>
<ySuperscriptXSize value="600"/>
<ySuperscriptYSize value="600"/>
<ySuperscriptXOffset value="0"/>
<ySuperscriptYOffset value="300"/>
<yStrikeoutSize value="0"/>
<yStrikeoutPosition value="300"/>
<sFamilyClass value="0"/>
<panose>
<bFamilyType value="0"/>
<bSerifStyle value="0"/>
<bWeight value="0"/>
<bProportion value="0"/>
<bContrast value="0"/>
<bStrokeVariation value="0"/>
<bArmStyle value="0"/>
<bLetterForm value="0"/>
<bMidline value="0"/>
<bXHeight value="0"/>
</panose>
<ulUnicodeRange1 value="00000000 00000000 00000000 00000001"/>
<ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
<achVendID value="djr "/>
<fsSelection value="00000000 01000000"/>
<usFirstCharIndex value="48"/>
<usLastCharIndex value="70"/>
<sTypoAscender value="1000"/>
<sTypoDescender value="0"/>
<sTypoLineGap value="200"/>
<usWinAscent value="1000"/>
<usWinDescent value="300"/>
<ulCodePageRange1 value="00000000 00000000 00000000 00000001"/>
<ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
<sxHeight value="500"/>
<sCapHeight value="720"/>
<usDefaultChar value="0"/>
<usBreakChar value="32"/>
<usMaxContext value="3"/>
</OS_2>
<hmtx>
<mtx name=".notdef" width="1100" lsb="0"/>
<mtx name="A" width="1100" lsb="0"/>
<mtx name="B" width="1100" lsb="0"/>
<mtx name="C" width="1100" lsb="0"/>
<mtx name="D" width="1100" lsb="0"/>
<mtx name="E" width="1100" lsb="0"/>
<mtx name="F" width="1100" lsb="0"/>
<mtx name="eight" width="1100" lsb="0"/>
<mtx name="five" width="1100" lsb="0"/>
<mtx name="four" width="1100" lsb="0"/>
<mtx name="nine" width="1100" lsb="0"/>
<mtx name="one" width="1100" lsb="0"/>
<mtx name="seven" width="1100" lsb="0"/>
<mtx name="six" width="1100" lsb="0"/>
<mtx name="three" width="1100" lsb="0"/>
<mtx name="two" width="1100" lsb="0"/>
<mtx name="zero" width="1100" lsb="0"/>
</hmtx>
<cmap>
<tableVersion version="0"/>
<cmap_format_4 platformID="0" platEncID="3" language="0">
<map code="0x30" name="zero"/><!-- DIGIT ZERO -->
<map code="0x31" name="one"/><!-- DIGIT ONE -->
<map code="0x32" name="two"/><!-- DIGIT TWO -->
<map code="0x33" name="three"/><!-- DIGIT THREE -->
<map code="0x34" name="four"/><!-- DIGIT FOUR -->
<map code="0x35" name="five"/><!-- DIGIT FIVE -->
<map code="0x36" name="six"/><!-- DIGIT SIX -->
<map code="0x37" name="seven"/><!-- DIGIT SEVEN -->
<map code="0x38" name="eight"/><!-- DIGIT EIGHT -->
<map code="0x39" name="nine"/><!-- DIGIT NINE -->
<map code="0x41" name="A"/><!-- LATIN CAPITAL LETTER A -->
<map code="0x42" name="B"/><!-- LATIN CAPITAL LETTER B -->
<map code="0x43" name="C"/><!-- LATIN CAPITAL LETTER C -->
<map code="0x44" name="D"/><!-- LATIN CAPITAL LETTER D -->
<map code="0x45" name="E"/><!-- LATIN CAPITAL LETTER E -->
<map code="0x46" name="F"/><!-- LATIN CAPITAL LETTER F -->
</cmap_format_4>
</cmap>
<loca>
<!-- The 'loca' table will be calculated by the compiler -->
</loca>
<glyf>
<!-- The xMin, yMin, xMax and yMax values
will be recalculated by the compiler. -->
<TTGlyph name=".notdef"/><!-- contains no outline data -->
<TTGlyph name="A" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="B" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="C" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="D" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="E" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="F" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="eight" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="five" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="four" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="nine" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="one" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="seven" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="six" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="three" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="two" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="zero" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
</glyf>
<name>
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
Cairo Svg Test Stroke
</namerecord>
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
Regular
</namerecord>
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
Cairo Svg Test Stroke Regular
</namerecord>
</name>
<post>
<formatType value="3.0"/>
<italicAngle value="0.0"/>
<underlinePosition value="0"/>
<underlineThickness value="0"/>
<isFixedPitch value="0"/>
<minMemType42 value="0"/>
<maxMemType42 value="0"/>
<minMemType1 value="0"/>
<maxMemType1 value="0"/>
</post>
<CPAL>
<version value="0"/>
<numPaletteEntries value="2"/>
<palette index="0">
<color index="0" value="#C5A1D7FF"/>
<color index="1" value="#80DFC8FF"/>
</palette>
<palette index="1">
<color index="0" value="#6392A9FF"/>
<color index="1" value="#7896B3FF"/>
</palette>
</CPAL>
<SVG>
<svgDoc endGlyphID="0" startGlyphID="0">
<![CDATA[<svg xmlns="http://www.w3.org/2000/svg"></svg>]]>
</svgDoc>
<svgDoc endGlyphID="1" startGlyphID="1">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<line x1="100" y1="-500" x2="900" y2="-500"
fill="none"
stroke-width="100"
stroke="indigo" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="2" startGlyphID="2">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<line x1="100" y1="-500" x2="900" y2="-500"
fill="none"
stroke-width="100"
stroke="#AA55AA" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="3" startGlyphID="3">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<line x1="100" y1="-500" x2="900" y2="-500"
fill="none"
stroke-width="100"
stroke="#A5A" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="4" startGlyphID="4">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<line x1="100" y1="-500" x2="900" y2="-500"
fill="none"
stroke-width="100"
stroke="rgb(75,0,130)" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="5" startGlyphID="5">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<line x1="100" y1="-500" x2="900" y2="-500"
fill="none"
stroke-width="100"
stroke="currentColor" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="6" startGlyphID="6">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<line x1="100" y1="-500" x2="900" y2="-500"
fill="none"
stroke-width="100"
stroke="var(--color1, red)" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="7" startGlyphID="7">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<line x1="100" y1="-500" x2="900" y2="-500"
fill="none"
stroke-width="100"
stroke="magenta" stroke-opacity="0.5" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="8" startGlyphID="8">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
color="green" >
<line x1="100" y1="-500" x2="900" y2="-500"
fill="none"
stroke-width="100"
stroke="currentColor" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="9" startGlyphID="9">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<line x1="100" y1="-900" x2="900" y2="-900"
fill="none"
stroke-width="100"
stroke="black" />
<line x1="100" y1="-500" x2="900" y2="-500"
fill="none"
stroke-width="200"
stroke="black" />
<line x1="100" y1="-100" x2="900" y2="-100"
fill="none"
stroke-width="300"
stroke="black" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="10" startGlyphID="10">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<line x1="100" y1="-900" x2="900" y2="-900"
fill="none"
stroke-width="200"
stroke-linecap="butt"
stroke="black" />
<line x1="100" y1="-500" x2="900" y2="-500"
fill="none"
stroke-width="200"
stroke-linecap="round"
stroke="black" />
<line x1="100" y1="-100" x2="900" y2="-100"
fill="none"
stroke-width="200"
stroke-linecap="square"
stroke="black" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="11" startGlyphID="11">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<line x1="100" y1="-950" x2="900" y2="-950"
fill="none"
stroke-width="100"
stroke-dasharray="none"
stroke="black" />
<line x1="100" y1="-750" x2="900" y2="-750"
fill="none"
stroke-width="100"
stroke-dasharray="200"
stroke="black" />
<line x1="100" y1="-550" x2="900" y2="-550"
fill="none"
stroke-width="100"
stroke-dasharray="200 50"
stroke="black" />
<line x1="100" y1="-350" x2="900" y2="-350"
fill="none"
stroke-width="100"
stroke-dasharray="200 50 100"
stroke="black" />
<line x1="100" y1="-150" x2="900" y2="-150"
fill="none"
stroke-width="100"
stroke-dasharray="200 50 100 150"
stroke="black" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="12" startGlyphID="12">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<line x1="100" y1="-950" x2="900" y2="-950"
fill="none"
stroke-width="100"
stroke-dasharray="none"
stroke="black" />
<line x1="100" y1="-750" x2="900" y2="-750"
fill="none"
stroke-width="100"
stroke-dasharray="200"
stroke-dashoffset="100"
stroke="black" />
<line x1="100" y1="-550" x2="900" y2="-550"
fill="none"
stroke-width="100"
stroke-dasharray="200 50"
stroke-dashoffset="100"
stroke="black" />
<line x1="100" y1="-350" x2="900" y2="-350"
fill="none"
stroke-width="100"
stroke-dasharray="200 50 100"
stroke-dashoffset="100"
stroke="black" />
<line x1="100" y1="-150" x2="900" y2="-150"
fill="none"
stroke-width="100"
stroke-dasharray="200 50 100 150"
stroke-dashoffset="100"
stroke="black" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="13" startGlyphID="13">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<polyline
points="100, -200
900, -400
100, -700"
fill="none"
stroke-width="200"
stroke-linejoin="miter"
stroke="black" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="14" startGlyphID="14">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<polyline
points="100, -200
900, -400
100, -700"
fill="none"
stroke-width="200"
stroke-linejoin="round"
stroke="black" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="15" startGlyphID="15">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<polyline
points="100, -200
900, -400
100, -700"
fill="none"
stroke-width="200"
stroke-linejoin="bevel"
stroke="black" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="16" startGlyphID="16">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<polyline
points="100, -200
900, -400
100, -700"
fill="none"
stroke-width="200"
stroke-linejoin="miter"
stroke-miterlimit="2"
stroke="black" />
</svg>]]>
</svgDoc>
</SVG>
</ttFont>

View file

@ -0,0 +1,403 @@
<?xml version="1.0" encoding="UTF-8"?>
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="4.19">
<GlyphOrder>
<!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
<GlyphID id="0" name=".notdef"/>
<GlyphID id="1" name="zero"/>
<GlyphID id="2" name="one"/>
<GlyphID id="3" name="two"/>
<GlyphID id="4" name="three"/>
<GlyphID id="5" name="four"/>
<GlyphID id="6" name="five"/>
<GlyphID id="7" name="six"/>
<GlyphID id="8" name="seven"/>
</GlyphOrder>
<head>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="1.0"/>
<fontRevision value="1.0"/>
<checkSumAdjustment value="0x970fff1"/>
<magicNumber value="0x5f0f3cf5"/>
<flags value="00000000 00000011"/>
<unitsPerEm value="1000"/>
<created value="Wed Jun 15 00:00:00 2022"/>
<modified value="Fri Jul 1 06:21:39 2022"/>
<xMin value="0"/>
<yMin value="0"/>
<xMax value="1000"/>
<yMax value="1000"/>
<macStyle value="00000000 00000000"/>
<lowestRecPPEM value="6"/>
<fontDirectionHint value="2"/>
<indexToLocFormat value="0"/>
<glyphDataFormat value="0"/>
</head>
<hhea>
<tableVersion value="0x00010000"/>
<ascent value="1000"/>
<descent value="0"/>
<lineGap value="200"/>
<advanceWidthMax value="1100"/>
<minLeftSideBearing value="0"/>
<minRightSideBearing value="100"/>
<xMaxExtent value="1000"/>
<caretSlopeRise value="1"/>
<caretSlopeRun value="0"/>
<caretOffset value="0"/>
<reserved0 value="0"/>
<reserved1 value="0"/>
<reserved2 value="0"/>
<reserved3 value="0"/>
<metricDataFormat value="0"/>
<numberOfHMetrics value="1"/>
</hhea>
<maxp>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="0x10000"/>
<numGlyphs value="9"/>
<maxPoints value="4"/>
<maxContours value="1"/>
<maxCompositePoints value="0"/>
<maxCompositeContours value="0"/>
<maxZones value="1"/>
<maxTwilightPoints value="0"/>
<maxStorage value="0"/>
<maxFunctionDefs value="0"/>
<maxInstructionDefs value="0"/>
<maxStackElements value="256"/>
<maxSizeOfInstructions value="1"/>
<maxComponentElements value="0"/>
<maxComponentDepth value="0"/>
</maxp>
<OS_2>
<!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
will be recalculated by the compiler -->
<version value="3"/>
<xAvgCharWidth value="1000"/>
<usWeightClass value="400"/>
<usWidthClass value="5"/>
<fsType value="00000000 00000001"/>
<ySubscriptXSize value="600"/>
<ySubscriptYSize value="600"/>
<ySubscriptXOffset value="0"/>
<ySubscriptYOffset value="75"/>
<ySuperscriptXSize value="600"/>
<ySuperscriptYSize value="600"/>
<ySuperscriptXOffset value="0"/>
<ySuperscriptYOffset value="300"/>
<yStrikeoutSize value="0"/>
<yStrikeoutPosition value="300"/>
<sFamilyClass value="0"/>
<panose>
<bFamilyType value="0"/>
<bSerifStyle value="0"/>
<bWeight value="0"/>
<bProportion value="0"/>
<bContrast value="0"/>
<bStrokeVariation value="0"/>
<bArmStyle value="0"/>
<bLetterForm value="0"/>
<bMidline value="0"/>
<bXHeight value="0"/>
</panose>
<ulUnicodeRange1 value="00000000 00000000 00000000 00000001"/>
<ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
<achVendID value="djr "/>
<fsSelection value="00000000 01000000"/>
<usFirstCharIndex value="48"/>
<usLastCharIndex value="55"/>
<sTypoAscender value="1000"/>
<sTypoDescender value="0"/>
<sTypoLineGap value="200"/>
<usWinAscent value="1000"/>
<usWinDescent value="300"/>
<ulCodePageRange1 value="00000000 00000000 00000000 00000001"/>
<ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
<sxHeight value="500"/>
<sCapHeight value="720"/>
<usDefaultChar value="0"/>
<usBreakChar value="32"/>
<usMaxContext value="3"/>
</OS_2>
<hmtx>
<mtx name=".notdef" width="1100" lsb="0"/>
<mtx name="five" width="1100" lsb="0"/>
<mtx name="four" width="1100" lsb="0"/>
<mtx name="one" width="1100" lsb="0"/>
<mtx name="seven" width="1100" lsb="0"/>
<mtx name="six" width="1100" lsb="0"/>
<mtx name="three" width="1100" lsb="0"/>
<mtx name="two" width="1100" lsb="0"/>
<mtx name="zero" width="1100" lsb="0"/>
</hmtx>
<cmap>
<tableVersion version="0"/>
<cmap_format_4 platformID="0" platEncID="3" language="0">
<map code="0x30" name="zero"/><!-- DIGIT ZERO -->
<map code="0x31" name="one"/><!-- DIGIT ONE -->
<map code="0x32" name="two"/><!-- DIGIT TWO -->
<map code="0x33" name="three"/><!-- DIGIT THREE -->
<map code="0x34" name="four"/><!-- DIGIT FOUR -->
<map code="0x35" name="five"/><!-- DIGIT FIVE -->
<map code="0x36" name="six"/><!-- DIGIT SIX -->
<map code="0x37" name="seven"/><!-- DIGIT SEVEN -->
</cmap_format_4>
</cmap>
<loca>
<!-- The 'loca' table will be calculated by the compiler -->
</loca>
<glyf>
<!-- The xMin, yMin, xMax and yMax values
will be recalculated by the compiler. -->
<TTGlyph name=".notdef"/><!-- contains no outline data -->
<TTGlyph name="five" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="four" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="one" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="seven" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="six" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="three" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="two" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
<TTGlyph name="zero" xMin="0" yMin="0" xMax="1000" yMax="1000">
<contour>
<pt x="0" y="0" on="1"/>
<pt x="0" y="1000" on="1"/>
<pt x="1000" y="1000" on="1"/>
<pt x="1000" y="0" on="1"/>
</contour>
<instructions/>
</TTGlyph>
</glyf>
<name>
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
Cairo Svg Test Transform
</namerecord>
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
Regular
</namerecord>
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
Cairo Svg Test Transform Regular
</namerecord>
</name>
<post>
<formatType value="3.0"/>
<italicAngle value="0.0"/>
<underlinePosition value="0"/>
<underlineThickness value="0"/>
<isFixedPitch value="0"/>
<minMemType42 value="0"/>
<maxMemType42 value="0"/>
<minMemType1 value="0"/>
<maxMemType1 value="0"/>
</post>
<CPAL>
<version value="0"/>
<numPaletteEntries value="2"/>
<palette index="0">
<color index="0" value="#C5A1D7FF"/>
<color index="1" value="#80DFC8FF"/>
</palette>
<palette index="1">
<color index="0" value="#6392A9FF"/>
<color index="1" value="#7896B3FF"/>
</palette>
</CPAL>
<SVG>
<svgDoc endGlyphID="0" startGlyphID="0">
<![CDATA[<svg xmlns="http://www.w3.org/2000/svg"></svg>]]>
</svgDoc>
<svgDoc endGlyphID="1" startGlyphID="1">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<rect id="square" width="300" height="300"/>
</defs>
<use xlink:href="#square" transform="translate(100, -900)"/>
<use xlink:href="#square" transform="translate(600, -400)"/>
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="2" startGlyphID="2">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<rect id="square" width="300" height="300"/>
</defs>
<use xlink:href="#square" transform="translate(100, -900)"/>
<g transform="translate(400, -400)">
<use xlink:href="#square" transform="scale(1.5, 0.5)"/>
</g>
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="3" startGlyphID="3">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<rect id="square" width="300" height="300"/>
</defs>
<use xlink:href="#square" transform="translate(100, -900)"/>
<g transform="translate(600, -600)">
<use xlink:href="#square" transform="rotate(30)"/>
</g>
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="4" startGlyphID="4">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<rect id="square" width="300" height="300"/>
</defs>
<use xlink:href="#square" transform="translate(100, -900)"/>
<g transform="translate(400, -400)">
<use xlink:href="#square" transform="skewX(30)"/>
</g>
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="5" startGlyphID="5">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<rect id="square" width="300" height="300"/>
</defs>
<use xlink:href="#square" transform="translate(100, -900)"/>
<g transform="translate(400, -500)">
<use xlink:href="#square" transform="skewY(30)"/>
</g>
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="6" startGlyphID="6">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<rect id="square" width="300" height="300"/>
</defs>
<use xlink:href="#square" transform="translate(100, -900)"/>
<g transform="translate(600, -600)">
<use xlink:href="#square" transform="matrix(1, 0.4, -0.6, 1.1, 50, -70)"/>
</g>
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="7" startGlyphID="7">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<path id="heart" d="M 10,30 A 20,20 0,0,1 50,30 A 20,20 0,0,1 90,30 Q 90,60 50,90 Q 10,60 10,30 z" />
</defs>
<use xlink:href="#heart"
transform="translate(10, -650)
rotate(-10 50 100)
translate(-166 125.5)
skewX(40)
scale(1 0.5),scale(8, 8)"
fill="grey"/>
<use xlink:href="#heart"
transform="translate(300, -800),scale(6, 6)"
fill="none" stroke="red" />
</svg>]]>
</svgDoc>
<svgDoc endGlyphID="8" startGlyphID="8">
<![CDATA[<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<circle id="c1"
cx="100" cy="100" r="80"
fill="none"
stroke="black"
stroke-width="20" />
<circle id="c2"
cx="100" cy="100" r="80"
fill="none"
stroke="black"
stroke-width="20"
transform="scale(3,3)" />
</defs>
<use xlink:href="#c1" x="100" y="-900"/>
<use xlink:href="#c2" x="300" y="-700"/>
</svg>]]>
</svgDoc>
</SVG>
</ttFont>

159
test/ft-svg-render.c Normal file
View file

@ -0,0 +1,159 @@
/*
* Copyright © 2022 Adrian Johnson
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Author: Adrian Johnson <ajohnson@redneon.com>
*/
#include "cairo-test.h"
#include <cairo-ft.h>
#define GLYPH_SIZE 50
#define PAD 5
#define WIDTH (4*(GLYPH_SIZE + PAD) + PAD)
#define HEIGHT WIDTH
//#define CLIP 1
#define LOG_EXTENTS 1
static cairo_test_status_t
draw_font (cairo_t *cr, int width, int height, const char *font_file)
{
cairo_test_status_t result;
char buf[10];
cairo_text_extents_t extents;
cairo_font_options_t *font_options;
cairo_set_source_rgb (cr, 1, 1, 1);
cairo_paint (cr);
cairo_set_source_rgb (cr, 0, 0, 0);
result = cairo_test_ft_select_font_from_file (cr, font_file);
if (result)
return result;
font_options = cairo_font_options_create ();
cairo_font_options_set_color_mode (font_options, CAIRO_COLOR_MODE_NO_COLOR);
// cairo_set_font_options (cr, font_options);
cairo_font_options_destroy (font_options);
cairo_set_font_size (cr, GLYPH_SIZE);
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
int x = j * (GLYPH_SIZE + PAD) + PAD;
int y = i * (GLYPH_SIZE + PAD) + PAD;
int glyph_number = 4*i + j;
buf[0] = glyph_number < 10 ? '0' + glyph_number : 'A' + glyph_number - 10;
buf[1] = 0;
cairo_save (cr);
cairo_text_extents (cr, buf, &extents);
#if LOG_EXTENTS
cairo_test_log (cairo_test_get_context (cr),
"Char '%c' extents: x_bearing: %f y_bearing: %f width: %f height: %f x_advance: %f y_advance: %f\n",
buf[0],
extents.x_bearing,
extents.y_bearing,
extents.width,
extents.height,
extents.x_advance,
extents.y_advance);
#endif
#if CLIP
cairo_rectangle (cr, x, y, GLYPH_SIZE, GLYPH_SIZE);
cairo_clip (cr);
#endif
cairo_move_to (cr, x, y + GLYPH_SIZE);
cairo_show_text (cr, buf);
cairo_restore (cr);
if (cairo_status (cr)) {
cairo_test_log (cairo_test_get_context (cr),
"cairo_show_text() failed with \"%s\"\n",
buf);
return CAIRO_TEST_FAILURE;
}
}
}
return CAIRO_TEST_SUCCESS;
}
#define DRAW_FUNC(name) \
static cairo_test_status_t \
draw_##name (cairo_t *cr, int width, int height) { \
return draw_font (cr, width, height, "cairo-svg-test-" #name ".ttf"); \
}
DRAW_FUNC(doc)
CAIRO_TEST (ft_svg_render_doc,
"Test SVG glyph render",
"svgrender", /* keywords */
NULL, /* requirements */
WIDTH, HEIGHT,
NULL, draw_doc)
DRAW_FUNC(fill)
CAIRO_TEST (ft_svg_render_fill,
"Test SVG glyph render",
"svgrender", /* keywords */
NULL, /* requirements */
WIDTH, HEIGHT,
NULL, draw_fill)
DRAW_FUNC(gradient)
CAIRO_TEST (ft_svg_render_gradient,
"Test SVG glyph render",
"svgrender", /* keywords */
NULL, /* requirements */
WIDTH, HEIGHT,
NULL, draw_gradient)
DRAW_FUNC(path)
CAIRO_TEST (ft_svg_render_path,
"Test SVG glyph render",
"svgrender", /* keywords */
NULL, /* requirements */
WIDTH, HEIGHT,
NULL, draw_path)
DRAW_FUNC(shapes)
CAIRO_TEST (ft_svg_render_shapes,
"Test SVG glyph render",
"svgrender", /* keywords */
NULL, /* requirements */
WIDTH, HEIGHT,
NULL, draw_shapes)
DRAW_FUNC(stroke)
CAIRO_TEST (ft_svg_render_stroke,
"Test SVG glyph render",
"svgrender", /* keywords */
NULL, /* requirements */
WIDTH, HEIGHT,
NULL, draw_stroke)
DRAW_FUNC(transform)
CAIRO_TEST (ft_svg_render_transform,
"Test SVG glyph render",
"svgrender", /* keywords */
NULL, /* requirements */
WIDTH, HEIGHT,
NULL, draw_transform)

View file

@ -431,6 +431,7 @@ test_ft_svg_font_sources = [
test_ft_svg_ttx_font_sources = [
'ft-svg-cairo-logo.c',
'ft-svg-render.c'
]
test_gl_sources = [
@ -525,6 +526,13 @@ ps2png_sources = [
test_ttx_fonts = [
'cairo-logo-font.ttx',
'cairo-svg-test-doc.ttx',
'cairo-svg-test-fill.ttx',
'cairo-svg-test-gradient.ttx',
'cairo-svg-test-path.ttx',
'cairo-svg-test-shapes.ttx',
'cairo-svg-test-stroke.ttx',
'cairo-svg-test-transform.ttx',
]
build_any2ppm = false
@ -681,3 +689,9 @@ test('cairo', exe,
suite: ['cairo-test-suite', 'slow'],
workdir: meson.current_build_dir(),
depends: test_depends)
# The SVG renderer debug tools can only be built if the _cairo_debug_svg_render()
# function has been exposed by defining DEBUG_SVG_RENDER
if conf.get('HAVE_FT_SVG_DOCUMENT', 0) == 1 and cc.get_define('DEBUG_SVG_RENDER') != ''
subdir('svg')
endif

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

22
test/svg/README Normal file
View file

@ -0,0 +1,22 @@
build_ttx_fonts.py
==================
Is used to create the test/*.ttx files used for testing the SVG glyph renderer.
build_ttx_fonts.py will look for files of the form
<font-name>.<char>.<test-name>.svg
in the input directory, and using svg-font-template.ttx, create <font-name>.ttx
files that contain one glyph for each svg file. Each <font-name>.ttx will contain
a glyph for each svg with the matching <font-name> prefix. Each glyphs will be mapped
to the <char> i nthe svg filename. The <char> must be one of 0-9,A-F.
svg-render.c
============
svg-render renders SVG files using both librsvg and cairo-svg-glyph-render.c.
It is used for testing cairo-svg-glyph-render.c during development.
To use svg-render, cairo must be built with CFLAGS="-DDEBUG_SVG_RENDER" to enable the
_cairo_debug_svg_render() function.

161
test/svg/build_ttx_fonts.py Executable file
View file

@ -0,0 +1,161 @@
#!/usr/bin/env python3
# Build the ttx cairo svg test fonts from svg files
# The svg files use the naming convention
# <font-name>.<char>.<test-name>.svg
# eg "circle.A.cx_cy_r.svg"
#
# <font-name> is use to create the name of the ttx font.
# <char> is a ascii hex character (uppercase) that the font fill map to the SVG description.
# <test-name> is a descriptive name of the SVG file and is not used to build the font…
#
# This script looks for all files matching the above pattern and
# creates one ttx font for each unique <font-name>. Each font will
# contain up to 16 characters. The SVG description of each character
# and the character that maps to the SVG description is obtained from
# the SVG file beginning with <font-name>.<char>.
import argparse
import os
import re
import sys
import xml.dom.minidom
TEMPLATE_FILE="svg-font-template.ttx"
glyph_names = {
'0': 'zero',
'1': 'one',
'2': 'two',
'3': 'three',
'4': 'four',
'5': 'five',
'6': 'six',
'7': 'seven',
'8': 'eight',
'9': 'nine',
'A': 'A',
'B': 'B',
'C': 'C',
'D': 'D',
'E': 'E',
'F': 'F'
}
# files is list of (char, filename)
def build_font(font_name, files, in_dir, out_dir, no_reformat):
name = "cairo-svg-test-" + font_name
doc = xml.dom.minidom.parse(os.path.join(in_dir, TEMPLATE_FILE))
glyph_id = 1
text_nl = doc.createTextNode('\n\n')
for f in sorted(files):
glyph_name = glyph_names[f[0]]
glyph_order = doc.getElementsByTagName('GlyphOrder')[0]
glyph_id_elem = doc.createElement('GlyphID')
glyph_id_elem.setAttribute('id', str(glyph_id))
glyph_id_elem.setAttribute('name', glyph_name)
glyph_order.appendChild(glyph_id_elem)
glyph_order.appendChild(text_nl)
hmtx = doc.getElementsByTagName('hmtx')[0]
mtx = doc.createElement('mtx')
mtx.setAttribute('name', glyph_name)
mtx.setAttribute('width', '1100')
mtx.setAttribute('lsb', '0')
hmtx.appendChild(mtx)
cmap_format = doc.getElementsByTagName('cmap_format_4')[0]
map = doc.createElement('map')
map.setAttribute('code', hex(ord(f[0])))
map.setAttribute('name', glyph_name)
cmap_format.appendChild(map)
glyf = doc.getElementsByTagName('glyf')[0]
tt_glyph = doc.createElement('TTGlyph')
tt_glyph.setAttribute('name', glyph_name)
glyf.appendChild(tt_glyph)
contour = doc.createElement('contour')
tt_glyph.appendChild(contour)
pt = doc.createElement('pt')
pt.setAttribute('x', "0")
pt.setAttribute('y', "0")
pt.setAttribute('on', "1")
contour.appendChild(pt)
pt = doc.createElement('pt')
pt.setAttribute('x', "0")
pt.setAttribute('y', "1000")
pt.setAttribute('on', "1")
contour.appendChild(pt)
pt = doc.createElement('pt')
pt.setAttribute('x', "1000")
pt.setAttribute('y', "1000")
pt.setAttribute('on', "1")
contour.appendChild(pt)
pt = doc.createElement('pt')
pt.setAttribute('x', "1000")
pt.setAttribute('y', "0")
pt.setAttribute('on', "1")
contour.appendChild(pt)
instructions = doc.createElement('instructions')
tt_glyph.appendChild(instructions)
svg = doc.getElementsByTagName('SVG')[0]
svgdoc = doc.createElement('svgDoc')
svgdoc.setAttribute('startGlyphID', str(glyph_id))
svgdoc.setAttribute('endGlyphID', str(glyph_id))
with open(os.path.join(in_dir, f[1]), 'r') as svg_file:
svg_data = svg_file.read()
cdata = doc.createCDATASection(svg_data)
svgdoc.appendChild(cdata)
svg.appendChild(svgdoc)
glyph_id += 1
name_record = doc.getElementsByTagName('namerecord')[0]
name_record.firstChild.replaceWholeText(name.replace("-", " ").title())
name_record = doc.getElementsByTagName('namerecord')[2]
name_record.firstChild.replaceWholeText(name.replace("-", " ").title() + " Regular")
ttx_filename = os.path.join(out_dir, name + '.ttx')
ttf_filename = os.path.join(out_dir, name + '.ttf')
with open(ttx_filename, 'w') as ttx_file:
doc.writexml(ttx_file)
if not no_reformat:
# Convert to ttf and back to ttx. This reformats the ttx file
# which allows better quality diffs.
if os.path.exists(ttf_filename):
os.remove(ttf_filename)
os.system("ttx " + ttx_filename)
os.remove(ttx_filename)
os.system("ttx " + ttf_filename)
os.remove(ttf_filename)
def build_file_list(in_dir):
dict = {}
regex_prog = re.compile(r"([^\.]+)\.(.)\.[^\.]+\.svg", re.ASCII)
files = os.listdir(in_dir)
for f in files:
match = regex_prog.fullmatch(f)
if match:
fontname = match.group(1)
character = match.group(2)
if (fontname not in dict):
dict[fontname] = [(character, f)];
else:
dict[fontname].append((character, f))
return dict
if __name__=='__main__':
parser = argparse.ArgumentParser(description='Build ttx fonts.')
parser.add_argument("-i", nargs=1, metavar="indir", default=["."], help="Input directory")
parser.add_argument("-o", nargs=1, metavar="outdir", default=["."], help="Output directory")
parser.add_argument("-n", action='store_true', help="Don't reformat the output.")
args = parser.parse_args()
in_dir = args.i[0]
out_dir = args.o[0]
no_reformat = args.n
file_list = build_file_list(in_dir)
font_name = None
for key, value in file_list.items():
build_font(key, value, in_dir, out_dir, no_reformat)

View file

@ -0,0 +1,4 @@
<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">
<rect x="10" y="-90" width="80" height="80"
fill="none" stroke="black" stroke-width="10"/>
</svg>

After

Width:  |  Height:  |  Size: 171 B

View file

@ -0,0 +1,4 @@
<svg viewBox="-5 -5 10 10" xmlns="http://www.w3.org/2000/svg">
<rect x="-4" y="-14" width="8" height="8"
fill="none" stroke="black" stroke-width="1"/>
</svg>

After

Width:  |  Height:  |  Size: 168 B

121
test/svg/doc.2.image.svg Normal file
View file

@ -0,0 +1,121 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<image x="0" y="-1000" width="1000" height="1000"
xlink:href="data:image/png;base64,
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
BNcsrHnv+f9Qc51Rfhz5VAAAAABJRU5ErkJggg=="/>
</svg>

After

Width:  |  Height:  |  Size: 8.9 KiB

View file

@ -0,0 +1,122 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<image x="0" y="-1000" width="1000" height="1000"
transform="scale(0.5) rotate(-45),translate(800,500)"
xlink:href="data:image/png;base64,
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
BNcsrHnv+f9Qc51Rfhz5VAAAAABJRU5ErkJggg=="/>
</svg>

After

Width:  |  Height:  |  Size: 9 KiB

View file

@ -0,0 +1,9 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="1000" height="1000">
<clipPath id="clip" clipPathUnits="userSpaceOnUse" >
<circle cx="500" cy="-500" r="400" />
</clipPath>
<rect x="100" y="-900" width="800" height="800"
stroke="green" stroke-width="100"
clip-path="url(#clip)" />
</svg>

After

Width:  |  Height:  |  Size: 328 B

View file

@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000">
<clipPath id="clip" clipPathUnits="objectBoundingBox">
<circle cx=".5" cy=".5" r=".5" />
</clipPath>
<rect x="100" y="-900" width="800" height="800"
stroke="green" stroke-width="100"
clip-path="url(#clip)" />
</svg>

After

Width:  |  Height:  |  Size: 313 B

View file

@ -0,0 +1,10 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="1000" height="1000">
<clipPath id="clip" clipPathUnits="userSpaceOnUse" >
<circle cx="500" cy="-500" r="400" />
<rect x="100" y="-900" width="800" height="400"/>
</clipPath>
<rect x="100" y="-900" width="800" height="800"
stroke="green" stroke-width="100"
clip-path="url(#clip)" />
</svg>

After

Width:  |  Height:  |  Size: 382 B

View file

@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000">
<clipPath id="clip" clipPathUnits="objectBoundingBox">
<circle cx=".5" cy=".5" r=".5" />
<rect x="0" y="0" width="1" height="0.5"/>
</clipPath>
<rect x="100" y="-900" width="800" height="800"
stroke="green" stroke-width="100"
clip-path="url(#clip)" />
</svg>

After

Width:  |  Height:  |  Size: 360 B

View file

@ -0,0 +1,15 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="1000" height="1000">
<clipPath id="clip" clipPathUnits="userSpaceOnUse" >
<circle cx="500" cy="-500" r="400" />
</clipPath>
<clipPath id="clip2" clipPathUnits="userSpaceOnUse" >
<rect x="100" y="-900" width="800" height="400"/>
</clipPath>
<g clip-path="url(#clip)">
<rect x="100" y="-900" width="800" height="800"
stroke="green" stroke-width="100"
clip-path="url(#clip2)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 500 B

View file

@ -0,0 +1,15 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1000">
<clipPath id="clip" clipPathUnits="objectBoundingBox">
<circle cx=".5" cy=".5" r=".5" />
</clipPath>
<clipPath id="clip2" clipPathUnits="objectBoundingBox">
<rect x="0" y="0" width="1" height="0.5"/>
</clipPath>
<g clip-path="url(#clip)">
<rect x="100" y="-900" width="800" height="800"
stroke="green" stroke-width="100"
clip-path="url(#clip2)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 485 B

14
test/svg/doc.A.g.svg Normal file
View file

@ -0,0 +1,14 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" >
<defs>
<circle id="circle"
cx="0" cy="0" r="250" />
</defs>
<g opacity="0.5">
<use xlink:href="#circle" x="330" y="-500"
fill="red" />
<use xlink:href="#circle" x="670" y="-500"
fill="green" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 363 B

4
test/svg/fill.0.name.svg Normal file
View file

@ -0,0 +1,4 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<rect x="100" y="-750" width="800" height="500"
fill="indigo" />
</svg>

After

Width:  |  Height:  |  Size: 137 B

4
test/svg/fill.1.hex6.svg Normal file
View file

@ -0,0 +1,4 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<rect x="100" y="-750" width="800" height="500"
fill="#AA55AA" />
</svg>

After

Width:  |  Height:  |  Size: 138 B

4
test/svg/fill.2.hex3.svg Normal file
View file

@ -0,0 +1,4 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<rect x="100" y="-750" width="800" height="500"
fill="#A5A" />
</svg>

After

Width:  |  Height:  |  Size: 135 B

4
test/svg/fill.3.rgb.svg Normal file
View file

@ -0,0 +1,4 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<rect x="100" y="-750" width="800" height="500"
fill="rgb (75, 0 , 130)" />
</svg>

After

Width:  |  Height:  |  Size: 148 B

View file

@ -0,0 +1,4 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<rect x="100" y="-750" width="800" height="500"
fill="currentColor" />
</svg>

After

Width:  |  Height:  |  Size: 143 B

View file

@ -0,0 +1,4 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<rect x="100" y="-750" width="800" height="500"
fill="var(--color1, red)" />
</svg>

After

Width:  |  Height:  |  Size: 149 B

View file

@ -0,0 +1,4 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<rect x="100" y="-750" width="800" height="500"
fill="magenta" fill-opacity="0.5" />
</svg>

After

Width:  |  Height:  |  Size: 157 B

View file

@ -0,0 +1,5 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
color="green" >
<rect x="100" y="-750" width="800" height="500"
fill="currentColor" />
</svg>

After

Width:  |  Height:  |  Size: 163 B

8
test/svg/fill.8.rule.svg Normal file
View file

@ -0,0 +1,8 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<g transform="scale(5,5) translate(0,-150)">
<polygon fill-rule="nonzero"
points="50,0 21,90 98,35 2,35 79,90"/>
<polygon fill-rule="evenodd"
points="150,0 121,90 198,35 102,35 179,90"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 292 B

View file

@ -0,0 +1,10 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="grad" x1="33%" x21="66%">
<stop offset="0%" stop-color="blue" stop-opacity="1" />
<stop offset="100%" stop-color="red" stop-opacity="0.5" />
</linearGradient>
</defs>
<rect x="100" y="-900" width="800" height="800" fill="url(#grad)" />
</svg>

After

Width:  |  Height:  |  Size: 352 B

View file

@ -0,0 +1,11 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="grad" x1="33%" x2="66%"
spreadMethod="reflect">
<stop offset="0%" stop-color="blue" stop-opacity="1" />
<stop offset="100%" stop-color="red" stop-opacity="1" />
</linearGradient>
</defs>
<rect x="0" y="-900" width="1000" height="800" fill="url(#grad)" />
</svg>

After

Width:  |  Height:  |  Size: 391 B

View file

@ -0,0 +1,11 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="grad" x1="33%" x2="66%"
spreadMethod="repeat">
<stop offset="0%" stop-color="blue" stop-opacity="1" />
<stop offset="100%" stop-color="red" stop-opacity="1" />
</linearGradient>
</defs>
<rect x="0" y="-900" width="1000" height="800" fill="url(#grad)" />
</svg>

After

Width:  |  Height:  |  Size: 390 B

View file

@ -0,0 +1,11 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="grad" x1="300" y1="-500" x2="600" y2="-500"
gradientUnits="userSpaceOnUse">
<stop offset="0%" stop-color="blue" stop-opacity="1" />
<stop offset="100%" stop-color="red" stop-opacity="1" />
</linearGradient>
</defs>
<rect x="0" y="-900" width="1000" height="800" fill="url(#grad)" />
</svg>

After

Width:  |  Height:  |  Size: 419 B

View file

@ -0,0 +1,10 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="grad" gradientTransform="rotate(45)">
<stop offset="0%" stop-color="blue" stop-opacity="1" />
<stop offset="100%" stop-color="red" stop-opacity="1" />
</linearGradient>
</defs>
<rect x="100" y="-900" width="800" height="800" fill="url(#grad)" />
</svg>

After

Width:  |  Height:  |  Size: 362 B

View file

@ -0,0 +1,10 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<radialGradient id="grad" cx="50%" cy="50%"
fx="0.75" fy="0.35" r="0.5">
<stop offset="0%" stop-color="white" stop-opacity="1" />
<stop offset="100%" stop-color="green" stop-opacity="1" />
</radialGradient>
</defs>
<rect x="100" y="-900" width="800" height="800" fill="url(#grad)" />
</svg>

After

Width:  |  Height:  |  Size: 399 B

View file

@ -0,0 +1,11 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<radialGradient id="grad" cx="75%" cy="25%" r="33%"
fx="0.64" fy="0.18" fr="0.17"
spreadMethod="reflect" >
<stop offset="0%" stop-color="white" stop-opacity="1" />
<stop offset="100%" stop-color="green" stop-opacity="1" />
</radialGradient>
</defs>
<rect x="100" y="-900" width="800" height="800" fill="url(#grad)" />
</svg>

After

Width:  |  Height:  |  Size: 453 B

View file

@ -0,0 +1,11 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<radialGradient id="grad" cx="75%" cy="25%" r="33%"
fx="0.64" fy="0.18" fr="0.17"
spreadMethod="repeat" >
<stop offset="0%" stop-color="white" stop-opacity="1" />
<stop offset="100%" stop-color="green" stop-opacity="1" />
</radialGradient>
</defs>
<rect x="100" y="-900" width="800" height="800" fill="url(#grad)" />
</svg>

After

Width:  |  Height:  |  Size: 452 B

View file

@ -0,0 +1,11 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<radialGradient id="grad" cx="450" cy="-550" r="400"
fx="600" fy="-400" fr="10"
gradientUnits="userSpaceOnUse" >
<stop offset="0%" stop-color="red" stop-opacity="1" />
<stop offset="100%" stop-color="green" stop-opacity="0.5" />
</radialGradient>
</defs>
<rect x="0" y="-1000" width="1000" height="1000" fill="url(#grad)" />
</svg>

After

Width:  |  Height:  |  Size: 460 B

View file

@ -0,0 +1,11 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<radialGradient id="grad" cx="50%" cy="25%"
fx="0.75" fy="0.35" r="0.5"
gradientTransform="scale(1, 2)">
<stop offset="0%" stop-color="red" stop-opacity="1" />
<stop offset="100%" stop-color="green" stop-opacity="1" />
</radialGradient>
</defs>
<rect x="100" y="-900" width="800" height="800" fill="url(#grad)" />
</svg>

After

Width:  |  Height:  |  Size: 450 B

5
test/svg/meson.build Normal file
View file

@ -0,0 +1,5 @@
if librsvg_dep.found()
executable('svg-render',
'svg-render.c',
dependencies: [libcairo_dep, librsvg_dep])
endif

8
test/svg/path.0.line.svg Normal file
View file

@ -0,0 +1,8 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<path fill="none" stroke="black" stroke-width="20"
d="M 200 -200
L 500 -500
H 800
V -200
" />
</svg>

After

Width:  |  Height:  |  Size: 202 B

View file

@ -0,0 +1,9 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<path fill="none" stroke="black" stroke-width="20"
d="M200,-400
C200,-200
500,-200
500,-400
S800,-600
800,-400" />
</svg>

After

Width:  |  Height:  |  Size: 242 B

8
test/svg/path.2.quad.svg Normal file
View file

@ -0,0 +1,8 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<path fill="none" stroke="black" stroke-width="20"
d="M200,-300
Q400,-50
600,-300
T1000,-300"
/>
</svg>

After

Width:  |  Height:  |  Size: 210 B

7
test/svg/path.3.arc.svg Normal file
View file

@ -0,0 +1,7 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<path fill="none" stroke="black" stroke-width="20"
d="M500,-500
L 712 -712
A300,300 0 1,0 712, -288 z"
/>
</svg>

After

Width:  |  Height:  |  Size: 208 B

View file

@ -0,0 +1,3 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<rect x="100" y="-750" width="800" height="500"/>
</svg>

After

Width:  |  Height:  |  Size: 114 B

View file

@ -0,0 +1,3 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<rect x="100" y="-750" width="800" height="500" rx="100" ry="100"/>
</svg>

After

Width:  |  Height:  |  Size: 132 B

View file

@ -0,0 +1,3 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<circle cx="500" cy="-500" r="400"/>
</svg>

After

Width:  |  Height:  |  Size: 101 B

View file

@ -0,0 +1,3 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<ellipse cx="500" cy="-500" rx="400" ry="200"/>
</svg>

After

Width:  |  Height:  |  Size: 112 B

View file

@ -0,0 +1,3 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<line x1="200" y1="-200" x2="800" y2="-800" stroke="black" stroke-width="20"/>
</svg>

After

Width:  |  Height:  |  Size: 143 B

View file

@ -0,0 +1,12 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<polyline fill="none" stroke="black" stroke-width="20"
points="100, -100,
300, -100,
300, -300,
500, -300,
500, -500,
700, -500
700, -700
900, -700
900, -900" />
</svg>

After

Width:  |  Height:  |  Size: 398 B

View file

@ -0,0 +1,12 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="500" height="500">
<polygon points="350, -75
379, -161
469, -161
397, -215
423, -301
350, -250
277, -301
303, -215
231, -161
321, -161" />
</svg>

After

Width:  |  Height:  |  Size: 360 B

View file

@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<line x1="100" y1="-500" x2="900" y2="-500"
fill="none"
stroke-width="100"
stroke="indigo" />
</svg>

After

Width:  |  Height:  |  Size: 182 B

View file

@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<line x1="100" y1="-500" x2="900" y2="-500"
fill="none"
stroke-width="100"
stroke="#AA55AA" />
</svg>

After

Width:  |  Height:  |  Size: 183 B

View file

@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<line x1="100" y1="-500" x2="900" y2="-500"
fill="none"
stroke-width="100"
stroke="#A5A" />
</svg>

After

Width:  |  Height:  |  Size: 180 B

View file

@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<line x1="100" y1="-500" x2="900" y2="-500"
fill="none"
stroke-width="100"
stroke="rgb(75,0,130)" />
</svg>

After

Width:  |  Height:  |  Size: 189 B

View file

@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<line x1="100" y1="-500" x2="900" y2="-500"
fill="none"
stroke-width="100"
stroke="currentColor" />
</svg>

After

Width:  |  Height:  |  Size: 188 B

View file

@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<line x1="100" y1="-500" x2="900" y2="-500"
fill="none"
stroke-width="100"
stroke="var(--color1, red)" />
</svg>

After

Width:  |  Height:  |  Size: 194 B

View file

@ -0,0 +1,6 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<line x1="100" y1="-500" x2="900" y2="-500"
fill="none"
stroke-width="100"
stroke="magenta" stroke-opacity="0.5" />
</svg>

After

Width:  |  Height:  |  Size: 204 B

View file

@ -0,0 +1,7 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
color="green" >
<line x1="100" y1="-500" x2="900" y2="-500"
fill="none"
stroke-width="100"
stroke="currentColor" />
</svg>

After

Width:  |  Height:  |  Size: 208 B

View file

@ -0,0 +1,14 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<line x1="100" y1="-900" x2="900" y2="-900"
fill="none"
stroke-width="100"
stroke="black" />
<line x1="100" y1="-500" x2="900" y2="-500"
fill="none"
stroke-width="200"
stroke="black" />
<line x1="100" y1="-100" x2="900" y2="-100"
fill="none"
stroke-width="300"
stroke="black" />
</svg>

After

Width:  |  Height:  |  Size: 419 B

17
test/svg/stroke.9.cap.svg Normal file
View file

@ -0,0 +1,17 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<line x1="100" y1="-900" x2="900" y2="-900"
fill="none"
stroke-width="200"
stroke-linecap="butt"
stroke="black" />
<line x1="100" y1="-500" x2="900" y2="-500"
fill="none"
stroke-width="200"
stroke-linecap="round"
stroke="black" />
<line x1="100" y1="-100" x2="900" y2="-100"
fill="none"
stroke-width="200"
stroke-linecap="square"
stroke="black" />
</svg>

After

Width:  |  Height:  |  Size: 512 B

View file

@ -0,0 +1,27 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<line x1="100" y1="-950" x2="900" y2="-950"
fill="none"
stroke-width="100"
stroke-dasharray="none"
stroke="black" />
<line x1="100" y1="-750" x2="900" y2="-750"
fill="none"
stroke-width="100"
stroke-dasharray="200"
stroke="black" />
<line x1="100" y1="-550" x2="900" y2="-550"
fill="none"
stroke-width="100"
stroke-dasharray="200 50"
stroke="black" />
<line x1="100" y1="-350" x2="900" y2="-350"
fill="none"
stroke-width="100"
stroke-dasharray="200 50 100"
stroke="black" />
<line x1="100" y1="-150" x2="900" y2="-150"
fill="none"
stroke-width="100"
stroke-dasharray="200 50 100 150"
stroke="black" />
</svg>

After

Width:  |  Height:  |  Size: 834 B

View file

@ -0,0 +1,31 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<line x1="100" y1="-950" x2="900" y2="-950"
fill="none"
stroke-width="100"
stroke-dasharray="none"
stroke="black" />
<line x1="100" y1="-750" x2="900" y2="-750"
fill="none"
stroke-width="100"
stroke-dasharray="200"
stroke-dashoffset="100"
stroke="black" />
<line x1="100" y1="-550" x2="900" y2="-550"
fill="none"
stroke-width="100"
stroke-dasharray="200 50"
stroke-dashoffset="100"
stroke="black" />
<line x1="100" y1="-350" x2="900" y2="-350"
fill="none"
stroke-width="100"
stroke-dasharray="200 50 100"
stroke-dashoffset="100"
stroke="black" />
<line x1="100" y1="-150" x2="900" y2="-150"
fill="none"
stroke-width="100"
stroke-dasharray="200 50 100 150"
stroke-dashoffset="100"
stroke="black" />
</svg>

After

Width:  |  Height:  |  Size: 962 B

View file

@ -0,0 +1,10 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<polyline
points="100, -200
900, -400
100, -700"
fill="none"
stroke-width="200"
stroke-linejoin="miter"
stroke="black" />
</svg>

After

Width:  |  Height:  |  Size: 244 B

View file

@ -0,0 +1,10 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<polyline
points="100, -200
900, -400
100, -700"
fill="none"
stroke-width="200"
stroke-linejoin="round"
stroke="black" />
</svg>

After

Width:  |  Height:  |  Size: 244 B

View file

@ -0,0 +1,10 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<polyline
points="100, -200
900, -400
100, -700"
fill="none"
stroke-width="200"
stroke-linejoin="bevel"
stroke="black" />
</svg>

After

Width:  |  Height:  |  Size: 244 B

View file

@ -0,0 +1,11 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<polyline
points="100, -200
900, -400
100, -700"
fill="none"
stroke-width="200"
stroke-linejoin="miter"
stroke-miterlimit="2"
stroke="black" />
</svg>

After

Width:  |  Height:  |  Size: 272 B

View file

@ -0,0 +1,190 @@
<?xml version="1.0" encoding="UTF-8"?>
<ttFont sfntVersion="\x00\x01\x00\x00" ttLibVersion="4.19">
<GlyphOrder>
<!-- The 'id' attribute is only for humans; it is ignored when parsed. -->
<GlyphID id="0" name=".notdef"/>
</GlyphOrder>
<head>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="1.0"/>
<fontRevision value="1.0"/>
<checkSumAdjustment value="0x3e7355ef"/>
<magicNumber value="0x5f0f3cf5"/>
<flags value="00000000 00000001"/>
<unitsPerEm value="1000"/>
<created value="Wed Jun 15 00:00:00 2022"/>
<modified value="Wed Jun 15 00:00:00 2022"/>
<xMin value="0"/>
<yMin value="0"/>
<xMax value="1000"/>
<yMax value="1000"/>
<macStyle value="00000000 00000000"/>
<lowestRecPPEM value="6"/>
<fontDirectionHint value="2"/>
<indexToLocFormat value="0"/>
<glyphDataFormat value="0"/>
</head>
<hhea>
<tableVersion value="0x00010000"/>
<ascent value="1000"/>
<descent value="0"/>
<lineGap value="200"/>
<advanceWidthMax value="1100"/>
<minLeftSideBearing value="0"/>
<minRightSideBearing value="0"/>
<xMaxExtent value="1000"/>
<caretSlopeRise value="1"/>
<caretSlopeRun value="0"/>
<caretOffset value="0"/>
<reserved0 value="0"/>
<reserved1 value="0"/>
<reserved2 value="0"/>
<reserved3 value="0"/>
<metricDataFormat value="0"/>
<numberOfHMetrics value="2"/>
</hhea>
<maxp>
<!-- Most of this table will be recalculated by the compiler -->
<tableVersion value="0x10000"/>
<numGlyphs value="2"/>
<maxPoints value="1"/>
<maxContours value="1"/>
<maxCompositePoints value="1"/>
<maxCompositeContours value="1"/>
<maxZones value="1"/>
<maxTwilightPoints value="0"/>
<maxStorage value="0"/>
<maxFunctionDefs value="0"/>
<maxInstructionDefs value="0"/>
<maxStackElements value="256"/>
<maxSizeOfInstructions value="1"/>
<maxComponentElements value="2"/>
<maxComponentDepth value="1"/>
</maxp>
<OS_2>
<!-- The fields 'usFirstCharIndex' and 'usLastCharIndex'
will be recalculated by the compiler -->
<version value="3"/>
<xAvgCharWidth value="1000"/>
<usWeightClass value="400"/>
<usWidthClass value="5"/>
<fsType value="00000000 00000001"/>
<ySubscriptXSize value="600"/>
<ySubscriptYSize value="600"/>
<ySubscriptXOffset value="0"/>
<ySubscriptYOffset value="75"/>
<ySuperscriptXSize value="600"/>
<ySuperscriptYSize value="600"/>
<ySuperscriptXOffset value="0"/>
<ySuperscriptYOffset value="300"/>
<yStrikeoutSize value="0"/>
<yStrikeoutPosition value="300"/>
<sFamilyClass value="0"/>
<panose>
<bFamilyType value="0"/>
<bSerifStyle value="0"/>
<bWeight value="0"/>
<bProportion value="0"/>
<bContrast value="0"/>
<bStrokeVariation value="0"/>
<bArmStyle value="0"/>
<bLetterForm value="0"/>
<bMidline value="0"/>
<bXHeight value="0"/>
</panose>
<ulUnicodeRange1 value="00000000 00000000 00000000 00000001"/>
<ulUnicodeRange2 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange3 value="00000000 00000000 00000000 00000000"/>
<ulUnicodeRange4 value="00000000 00000000 00000000 00000000"/>
<achVendID value="djr "/>
<fsSelection value="00000000 01000000"/>
<usFirstCharIndex value="65"/>
<usLastCharIndex value="65"/>
<sTypoAscender value="1000"/>
<sTypoDescender value="0"/>
<sTypoLineGap value="200"/>
<usWinAscent value="1000"/>
<usWinDescent value="300"/>
<ulCodePageRange1 value="00000000 00000000 00000000 00000001"/>
<ulCodePageRange2 value="00000000 00000000 00000000 00000000"/>
<sxHeight value="500"/>
<sCapHeight value="720"/>
<usDefaultChar value="0"/>
<usBreakChar value="32"/>
<usMaxContext value="3"/>
</OS_2>
<hmtx>
<mtx name=".notdef" width="1100" lsb="0"/>
</hmtx>
<cmap>
<tableVersion version="0"/>
<cmap_format_4 platformID="0" platEncID="3" language="0">
</cmap_format_4>
</cmap>
<loca>
<!-- The 'loca' table will be calculated by the compiler -->
</loca>
<glyf>
<!-- The xMin, yMin, xMax and yMax values
will be recalculated by the compiler. -->
<TTGlyph name=".notdef"/><!-- contains no outline data -->
</glyf>
<name>
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
Cairo Font Template
</namerecord>
<namerecord nameID="2" platformID="3" platEncID="1" langID="0x409">
Regular
</namerecord>
<namerecord nameID="4" platformID="3" platEncID="1" langID="0x409">
Cairo Font Template Regular
</namerecord>
</name>
<post>
<formatType value="3.0"/>
<italicAngle value="0.0"/>
<underlinePosition value="0"/>
<underlineThickness value="0"/>
<isFixedPitch value="0"/>
<minMemType42 value="0"/>
<maxMemType42 value="0"/>
<minMemType1 value="0"/>
<maxMemType1 value="0"/>
</post>
<CPAL>
<version value="0"/>
<numPaletteEntries value="2"/>
<palette index="0">
<color index="0" value="#C5A1D7FF"/>
<color index="1" value="#80DFC8FF"/>
</palette>
<palette index="1">
<color index="0" value="#6392A9FF"/>
<color index="1" value="#7896B3FF"/>
</palette>
</CPAL>
<SVG>
<svgDoc endGlyphID="0" startGlyphID="0">
<![CDATA[<svg xmlns="http://www.w3.org/2000/svg"></svg>]]>
</svgDoc>
<colorPalettes>
</colorPalettes>
</SVG>
</ttFont>

308
test/svg/svg-render.c Normal file
View file

@ -0,0 +1,308 @@
/*
* Copyright © 2016 Adrian Johnson
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
* Author: Adrian Johnson <ajohnson@redneon.com>
*/
/* Compilation:
* Build cairo with -DDEBUG_SVG_RENDER
* gcc -o svg-render svg-render.c `pkg-config --cflags --libs cairo librsvg`
*/
/* svg-render - render SVG files using both the cairo glyph renderer and librsvg.
*
* This allows testing the cairo SVG test cases before assembling them into an SVG font.
* Usage:
* svg-render [-b] [-s] [-g <id>] [-e <em_size> ] input.svg
*
* Output is written to input.cairo.png and input.rsvg.png.
*
* -b print bounding box.
* -s Use standard SVG viewport. See below.
* -g render glyph with id <id>
* -e set the EM size. The default is 1000.
*
* SVG Glyphs are assumed to be wholely within the view port.
*/
#include <stdio.h>
#include <math.h>
#include <cairo.h>
#include <librsvg/rsvg.h>
typedef enum { CAIRO_SVG, LIBRSVG } svg_renderer_t;
/* output image size */
#define WIDTH 1000
#define HEIGHT 1000
static cairo_bool_t bbox = FALSE;
static cairo_bool_t standard_svg = FALSE;
static const char *glyph_id = NULL;
static int em_size = 1000;
cairo_bool_t
_cairo_debug_svg_render (cairo_t *cr,
const char *svg_document,
const char *element,
double units_per_em,
int debug_level);
static void
cairo_render (const char *svg_document, cairo_t *cr)
{
if (!_cairo_debug_svg_render (cr, svg_document, glyph_id, em_size, 2))
printf("_cairo_debug_svg_render() failed\n");
}
static void
librsvg_render (const char *svg_document, cairo_t *cr)
{
gboolean has_width;
gboolean has_height;
gboolean has_viewbox;
RsvgLength svg_width;
RsvgLength svg_height;
RsvgRectangle svg_viewbox;
RsvgRectangle viewport;
double width, height;
GError *error = NULL;
RsvgHandle *handle = rsvg_handle_new_from_data ((guint8 *)svg_document,
strlen(svg_document),
&error);
if (!handle) {
printf ("Could not load: %s", error->message);
return;
}
/* Default width if not specified is EM Square */
width = em_size;
height = em_size;
/* Get width/height if specified. */
rsvg_handle_get_intrinsic_dimensions(handle,
&has_width,
&svg_width,
&has_height,
&svg_height,
&has_viewbox,
&svg_viewbox);
if (has_width)
width = svg_width.length;
if (has_height)
height = svg_height.length;
/* We set the viewport for the call rsvg_handle_render_layer() to
* width/height. That way if either dimension is not specified in
* the SVG it will be inherited from the viewport we provide.
*
* As this scales up the rendered dimensions by width/height we
* need to undo this scaling to get a unit square scale that
* matches the cairo SVG renderer scale. The OpenType SVG spec
* does not say what to do if width != height. In this case we
* will just use a uniform scale that ensures the viewport fits in
* the unit square and also center it.
*/
if (width > height) {
cairo_scale (cr, 1.0/width, 1.0/width);
cairo_translate (cr, 0, (width - height)/2.0);
} else {
cairo_scale (cr, 1.0/height, 1.0/height);
cairo_translate (cr, (height - width)/2.0, 0);
}
viewport.x = 0;
viewport.y = 0;
viewport.width = width;
viewport.height = height;
if (!rsvg_handle_render_layer (handle, cr, glyph_id, &viewport, &error)) {
printf ("librsvg render failed: %s", error->message);
return;
}
}
static void
render_svg (const char *svg_document, svg_renderer_t renderer, const char* out_file)
{
double x, y, w, h;
cairo_surface_t *recording = cairo_recording_surface_create (CAIRO_CONTENT_COLOR_ALPHA, NULL);
cairo_t *cr = cairo_create (recording);
/* Scale up to image size when recording to reduce rounding errors
* in cairo_recording_surface_ink_extents()
*/
cairo_scale (cr, WIDTH, HEIGHT);
if (renderer == CAIRO_SVG) {
cairo_render (svg_document, cr);
} else {
librsvg_render (svg_document, cr);
}
cairo_destroy (cr);
if (bbox) {
cairo_recording_surface_ink_extents (recording, &x, &y, &w, &h);
if (renderer == CAIRO_SVG)
printf("cairo ");
else
printf("librsvg");
printf(" bbox left: %d right: %d top: %d bottom: %d\n",
(int)floor(x),
(int)ceil(x + w),
(int)floor(y),
(int)ceil(y + h));
}
cairo_surface_t *surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, WIDTH, HEIGHT);
cr = cairo_create (surface);
/* If rendering a glyph need to translate base line to bottom of image */
if (standard_svg)
cairo_set_source_surface (cr, recording, 0, 0);
else
cairo_set_source_surface (cr, recording, 0, HEIGHT);
cairo_paint (cr);
cairo_surface_write_to_png (surface, out_file);
cairo_surface_destroy (surface);
}
static char *
create_output_name (const char *svg_file, svg_renderer_t renderer)
{
char buf[1000];
int len;
strcpy (buf, svg_file);
len = strlen (buf);
if (strlen (buf) > 5 && strcmp (buf + len - 4, ".svg") == 0)
buf[len - 4] = 0;
if (renderer == CAIRO_SVG)
strcat (buf, ".cairo.png");
else
strcat (buf, ".rsvg.png");
return strdup (buf);
}
static char *
read_file(const char *filename)
{
FILE *fp;
int len;
char *data;
fp = fopen (filename, "r");
if (fp == NULL)
return NULL;
fseek (fp, 0, SEEK_END);
len = ftell(fp);
rewind (fp);
data = malloc (len + 1);
if (fread(data, len, 1, fp) != 1)
return NULL;
data[len] = 0;
fclose(fp);
return data;
}
static void
usage_and_exit()
{
printf ("svg-render [-b] [-s] [-g <id>] [-e <em_size> ] input.svg\n");
exit (1);
}
int
main(int argc, char **argv)
{
const char *input_file = NULL;
char *svg_document;
char *output_file;
argc--;
argv++;
while (argc > 0) {
if (strcmp (argv[0], "-b") == 0) {
bbox = TRUE;
argc--;
argv++;
} else if (strcmp (argv[0], "-s") == 0) {
standard_svg = TRUE;
argc--;
argv++;
} else if (strcmp (argv[0], "-g") == 0) {
if (argc > 1) {
glyph_id = argv[1];
argc -= 2;
argv += 2;
} else {
usage_and_exit();
}
} else if (strcmp (argv[0], "-e") == 0) {
if (argc > 1) {
em_size = atoi (argv[1]);
if (em_size <= 0) {
usage_and_exit();
}
argc -= 2;
argv += 2;
} else {
usage_and_exit();
}
} else {
input_file = argv[0];
argc--;
argv++;
}
}
if (!input_file)
usage_and_exit();
svg_document = read_file (input_file);
if (!svg_document) {
printf("error reading file %s\n", input_file);
exit (1);
}
output_file = create_output_name (input_file, CAIRO_SVG);
render_svg (svg_document, CAIRO_SVG, output_file);
free (output_file);
output_file = create_output_name (input_file, LIBRSVG);
render_svg (svg_document, LIBRSVG, output_file);
free (output_file);
free (svg_document);
return 0;
}

View file

@ -0,0 +1,8 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<rect id="square" width="300" height="300"/>
</defs>
<use xlink:href="#square" transform="translate(100, -900)"/>
<use xlink:href="#square" transform="translate(600, -400)"/>
</svg>

After

Width:  |  Height:  |  Size: 304 B

View file

@ -0,0 +1,10 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<rect id="square" width="300" height="300"/>
</defs>
<use xlink:href="#square" transform="translate(100, -900)"/>
<g transform="translate(400, -400)">
<use xlink:href="#square" transform="scale(1.5, 0.5)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 347 B

View file

@ -0,0 +1,10 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<rect id="square" width="300" height="300"/>
</defs>
<use xlink:href="#square" transform="translate(100, -900)"/>
<g transform="translate(600, -600)">
<use xlink:href="#square" transform="rotate(30)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 342 B

View file

@ -0,0 +1,10 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<rect id="square" width="300" height="300"/>
</defs>
<use xlink:href="#square" transform="translate(100, -900)"/>
<g transform="translate(400, -400)">
<use xlink:href="#square" transform="skewX(30)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 341 B

View file

@ -0,0 +1,10 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<rect id="square" width="300" height="300"/>
</defs>
<use xlink:href="#square" transform="translate(100, -900)"/>
<g transform="translate(400, -500)">
<use xlink:href="#square" transform="skewY(30)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 341 B

View file

@ -0,0 +1,10 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<rect id="square" width="300" height="300"/>
</defs>
<use xlink:href="#square" transform="translate(100, -900)"/>
<g transform="translate(600, -600)">
<use xlink:href="#square" transform="matrix(1, 0.4, -0.6, 1.1, 50, -70)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 366 B

View file

@ -0,0 +1,16 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<path id="heart" d="M 10,30 A 20,20 0,0,1 50,30 A 20,20 0,0,1 90,30 Q 90,60 50,90 Q 10,60 10,30 z" />
</defs>
<use xlink:href="#heart"
transform="translate(10, -650)
rotate(-10 50 100)
translate(-166 125.5)
skewX(40)
scale(1 0.5),scale(8, 8)"
fill="grey"/>
<use xlink:href="#heart"
transform="translate(300, -800),scale(6, 6)"
fill="none" stroke="red" />
</svg>

After

Width:  |  Height:  |  Size: 584 B

View file

@ -0,0 +1,20 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<circle id="c1"
cx="100" cy="100" r="80"
fill="none"
stroke="black"
stroke-width="20" />
<circle id="c2"
cx="100" cy="100" r="80"
fill="none"
stroke="black"
stroke-width="20"
transform="scale(3,3)" />
</defs>
<use xlink:href="#c1" x="100" y="-900"/>
<use xlink:href="#c2" x="300" y="-700"/>
</svg>

After

Width:  |  Height:  |  Size: 527 B