Warning: session_start(): Session cannot be started after headers have already been sent in /home/tvrreohg/public_html/manga.php on line 13
3 ÌÁ b‚Ïã@sÖdZdZddlmZmZmZddlmZm Z m Z m Z m Z ddl mZmZddlmZddlmZmZmZmZddlmZdd lmZdd lZdd lZGd d „d ejƒZej d dƒfdd„Z!dd„Z"dd„Z#dd„Z$d=Z%d>Z&d?Z'd@Z(dAZ)dBZ*dCZ+dDZ,dEZ-dFZ.dGZ/dHZ0dIZ1iZ2d#d$„Z3d%d&„Z4Gd'd(„d(ƒZ5Gd)d*„d*ƒZ6ed+d,ƒZ7Gd-d.„d.eƒZ8Gd/d0„d0e5ƒZ9dKZ:dMZ;dOZdUZ?dWZ@dYZAd[ZBGd4d5„d5e9ejCƒZDGd6d7„d7ƒZEGd8d9„d9ƒZFd:d;„ZGdd> defz/CMapName /%s defz/CMapType 2 defz1 begincodespacerangez <00> <%02X>éZendcodespacerangez%d beginbfcharcSsg|]\}}d||f‘qS)z <%02X> <%04X>r)Ú.0ÚiÚvrrrú Zsz%makeToUnicodeCMap..Z endbfcharZendcmapz-CMapName currentdict /CMap defineresource popÚendÚ )ÚlenÚ enumerateÚjoin)ÚfontnameÚsubsetÚcmaprrrÚmakeToUnicodeCMapHsPr-cCs$|d|…|||t|ƒd…S)zxSplices the given value into stream at the given offset and returns the resulting stream (the original is unchanged)N)r')ÚstreamÚoffsetÚvaluerrrÚsplicecsr1cCst||td|ƒƒS)z†Writes the given unsigned short value into stream at the given offset and returns the resulting stream (the original is unchanged)z>H)r1r)r.r/r0rrrÚ _set_ushorthsr2r éééééééé é é é c Gsªtj|dƒ}|dkr¦tjj}tjj}g}|j}xn|D]f}x`tj|dd�D]N\}}}||ƒ} | |krj|| ƒx*|D]"} |||| ƒƒ} | |krp|| ƒqpWqHWq4W|t|<|S)NT)Ú followlinks)Ú_cached_ttf_dirsÚgetÚosÚpathr)ÚrealpathÚappendÚwalk) ÚrootsÚRr)rCZaRÚrootÚrÚdÚfÚsrrrÚ _ttf_dirs€s"   rMc Cs˜ddlm}m}y||dƒ}||fStk r’ddl}|jj|ƒs‚x:ttj ŽD],}|jj ||ƒ}||ƒrR||dƒ}||fSqRWt d|ƒ‚YnXdS)zXOpens a TTF file possibly after searching TTFSearchPath returns (filename,file) r)Ú rl_isfileÚ open_for_readÚrbNzCan't open file "%s") Úreportlab.lib.utilsrNrOÚIOErrorrArBÚisabsrMr Z TTFSearchPathr)r)ÚfnrNrOrKrAÚDZtfnrrrÚ TTFOpenFile‘s    rVc@sÈeZdZdZd3Zd4ZdZd5dd „Zd d „Zd d „Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zd6dd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,d-„Zd.d/„Zd0d1„Zd2S)7Ú TTFontParserzBasic TTF file parserééeurtéfcttéZTTFrcCsP||_|j|ƒ|jƒ}|r0|jƒ|j|ƒn|jr>|jƒ|jƒd|_dS)záLoads and parses a TrueType font file. file can be a filename or a file object. If validate is set to a false values, skips checksum validation. This can save time, especially if the font is large. óN)ÚvalidateÚreadFileÚ readHeaderÚ readTTCHeaderÚ getSubfontÚ checksumFileÚreadTableDirectoryÚ subfontNameX)ÚselfÚfiler]Ú subfontIndexZ isCollectionrrrÚ__init__©s  zTTFontParser.__init__cCs€|jƒ|_d|_|jdd…|_|j|jkrDtd|j|j|jfƒ‚|jƒ|_g|_|jj }xt |jƒD]}||jƒƒqhWdS)NÚTTCr z1"%s" is not a %s file: can't read version 0x%8.8xéÿÿÿÿ) Ú read_ulongZ ttcVersionÚfileKindÚ ttfVersionsÚ ttcVersionsrÚfilenameÚ numSubfontsÚsubfontOffsetsrDÚrange)reÚar"rrrr`¹s   zTTFontParser.readTTCHeaderc CsŒ|jdkrtd|j|jfƒ‚y|j|}Wn.tk rZtd|j||jdfƒ‚YnX|j|ƒ|jƒ|jƒt dt |ƒƒ|_ dS)Nriz'"%s" is not a TTC file: use this methodz0TTC file "%s": bad subfontIndex %s not in [0,%d]r ú-) rlrrorqÚ IndexErrorrpÚseekr_rcrÚstrrd)rergÚposrrrraÅs   zTTFontParser.getSubfontc CsÎyš|jƒ|_|jƒ|_|jƒ|_|jƒ|_i|_g|_x`t|jƒD]R}i}|jƒ|d<|j ƒ|d<|j ƒ|d<|j ƒ|d<|jj |ƒ||j|d<qBWWn t d|j |j fƒ‚YnX|jrÊ|jƒdS)NÚtagÚchecksumr/Úlengthz0Corrupt %s file "%s" cannot read Table Directory)Ú read_ushortÚ numTablesÚ searchRangeÚ entrySelectorÚ rangeShiftrÚtablesrrÚread_tagrkrDrrlror]ÚchecksumTables)rerÚrecordrrrrcÑs&         zTTFontParser.readTableDirectoryc Csty|jƒ|_}Wn td|j|jfƒ‚YnX|dkrPtd|j|jfƒ‚||jkrftd|ƒ‚||jdkS)z,read the sfnt header at the current positionz)"%s" is not a %s file: can't read versioniOTTOz3%s file "%s": postscript outlines are not supportedz/Not a recognized TrueType font: version=0x%8.8Xr rj)rkÚversionrrorlrm)rer…rrrr_çs  zTTFontParser.readHeadercCsXt|dƒsNt|dƒr.t|ddƒ|_|jƒ|_n t|ƒ\|_}|jƒ|_|jƒd|_dS)NÚ _ttf_dataÚreadÚnamez(ttf)r)ÚhasattrÚgetattrror‡r†rVÚcloseÚ_pos)rerKrrrr^õs    zTTFontParser.readFilecCs�xŠ|jD]€}|j|d|dƒ}t|ƒ}|ddkrVtd|dd …ƒd}t|| ƒ}|d }||krtd |jt|ƒ|dt|ƒfƒ‚qWdS) Nr/r{ryÚheadz>lr9r5rrzz:TTF file "%s": invalid checksum %s table: %s (expected %s)r=)r�Ú get_chunkrrrrror )reÚtrrzZ adjustmentZ xchecksumrrrrƒs   zTTFontParser.checksumTablescCs@t|jƒ}d|krHr)rŒrr†)rerrrr|3szTTFontParser.read_ushortcCs.|jd7_td|j|jd|j…ƒdS)zReads an unsigned longr5z>Lr)rŒrr†)rerrrrk8szTTFontParser.read_ulongcCs^|jd7_y td|j|jd|j…ƒdStk rX}zt|ƒ‚WYdd}~XnXdS)zReads a signed shortr3z>hrN)rŒrr†Ú structErrorr)rerrrrÚ read_short=s  zTTFontParser.read_shortcCstd|j||d…ƒdS)z*Return an unsigned short at given positionz>Hr3r)rr†)rerxrrrÚ get_ushortEszTTFontParser.get_ushortcCstd|j||d…ƒdS)z)Return an unsigned long at given positionz>Lr5r)rr†)rerxrrrÚ get_ulongIszTTFontParser.get_ulongcCs |j|ƒ\}}|j|||…S)zReturn the given TTF table)r�r†)reryrxr{rrrÚ get_tableMszTTFontParser.get_tableN)rXrYrZ)rXr[)rr)r)rrrrrmrnrlrhr`rarcr_r^rƒrbr�rvr’r“r‚rŽr–r|rkr˜r™ršr›rrrrrW£s2      rWc@s(eZdZdZdd„Zdd„Zdd„ZdS) Ú TTFontMakerzBasic TTF file generatorcCs i|_dS)zInitializes the generator.N)r�)rerrrrhUszTTFontMaker.__init__cCs"|dkrt|ddƒ}||j|<dS)zAdds a table to the TTF file.r�r9sN)r1r�)reryÚdatarrrÚaddYs zTTFontMaker.addcsbtƒ}|j‰|j}t|ƒ}d}d}x |d|krB|d}|d}q$W|d}|d|}ˆtdd||||ƒƒd|d}‡‡fdd „}tt|jƒƒƒ} xZ| D]R\‰} ˆd kr²|} t| ƒ} |ˆƒˆtd | |t| ƒƒƒt| ƒd d@} || }qžWx0| D](\‰} | d 7} ˆ| dt| ƒd@…ƒqúWt|j ƒƒ} t d| ƒ} |j | dƒˆtd| ƒƒ|j ƒS)zlHHHHir=csˆtˆdƒƒS)NÚlatin1)r)Úx)ryÚwriterrÚtsz(TTFontMaker.makeStream..r�z>LLLr4sNlº/acr9z>Léüÿÿÿr¤) rr¢r�r'rÚlistÚsortedÚitemsrÚgetvaluerrv)reZstmr�r}r~rr€r/ZwStrZ tables_itemsr�Z head_startrzZ paddedLengthr)ryr¢rÚ makeStream_s@        zTTFontMaker.makeStreamN)rrrrrhržr©rrrrrœRsrœÚCMapFmt2SubHeaderz*firstCode entryCount idDelta idRangeOffsetc@seZdZdZddd„ZdS)Ú TTFNameBytesz"class used to return named stringsr”c CsBy|j|ƒ}Wn|jdƒ}YnXtj||jdƒƒ}||_|S)Nr r”)ÚdecoderÚ__new__ÚencodeÚustr)ÚclsÚbÚencr¯rerrrr­�szTTFNameBytes.__new__N)r”)rrrrr­rrrrr«Žsr«c@s4eZdZdZdZiZd dd„Zd dd„Zdd „Zd S) Ú TTFontFilezTTF file parser and generatorrr cCsÜt|ƒr¼d}|jjƒ}xÀtj||||d�|jƒ}|_|j|ƒt|ƒrT||j ks`||j j krddS|s~|j t |j |jd�ƒ|d7}||kr td|j|fƒ‚|jjƒ|jj |ƒqWntj||||d�|j|ƒdS)aLoads and parses a TrueType font file. file can be a filename or a file object. If validate is set to a false values, skips checksum validation. This can save time, especially if the font is large. See TTFontFile.extractInfo for more information. r)r]rgN)r†ror zcannot find %r subfont %r)rÚ__dict__ÚcopyrWrhrkrpÚ extractInfor rˆr¯ÚupdateÚdictr†roÚ ValueErrorÚclear)rerfÚcharInfor]rgZsfir´rprrrrhžs&    zTTFontFile.__init__cT sˆjdƒ}ˆjƒ}|dkr&td|ƒ‚ˆjƒ}|ˆjƒ}ddddddœ}t|jƒƒ}t|ƒ}�xt|ƒD�]} ˆjƒ} ˆjƒ} ˆjƒ} ˆjƒ} ˆjƒ}ˆjƒ}| |krªqjd}| dkoÄ| dkoÄ| dk�rˆj}z<ˆj||ƒ|d dkròtd ƒ‚t ˆj |||ƒd ƒ}Wd|ˆ_Xn4| dk�rJ| dk�rJ| dk�rJt ˆj |||ƒd ƒ}|rj|| dkrj||| <|d8}|dkrjPqjW|d dk �r�|d }n4|ddk �r¨|d}n|ddk �rÀ|d}nd}|�sŠt j �r‚ˆj }|�rötjjtjj|ƒƒd}|�s&tdtjƒˆjjfƒ}ˆjjd7_nZˆjj|dƒ}|�sŠ|�rNtd|ƒ}n(tdtjƒˆjjfƒ}ˆjjd7_|ˆj|<ntdƒ‚|j|jddƒƒ}x:|D]2}t|ƒdk�s¾|dk�r¢td|t|ƒfƒ‚�q¢W|ˆ_|d�pê|ˆ_|d �púdˆ_|d�p |ˆ_|d�p|ˆ_yˆjdƒWntdˆjƒ‚YnXˆjƒˆjƒ}}|dk�rttd||fƒ‚ˆjƒˆjƒfˆ_ ˆj!dƒˆj"ƒ}|dk�r®td|ƒ‚ˆj!d ƒˆjƒˆ_#}|fdd„}ˆj!d ƒˆj$ƒ}ˆj$ƒ}ˆj$ƒ}ˆj$ƒ}tt%|||||gƒƒˆ_&ˆj!dPƒˆjƒ}ˆjƒ} d!}!d"ˆj'k�rüˆjd"ƒˆjƒ}"ˆj!d ƒˆjƒ}#ˆj!d ƒˆjƒ}$|$d k�sˆ|$d#@�rœtjjˆj ƒt j(k}!ˆj!d$ƒˆj$ƒ}%ˆj$ƒ}&||%ƒˆ_)||&ƒˆ_*|"dk�ròˆj!d ƒˆj$ƒ}'||'ƒˆ_+nˆj)ˆ_+n d%}#||ƒˆ_)||ƒˆ_*ˆj)ˆ_+d&t,|#d'd ƒˆ_-ˆjd(ƒˆjƒˆjƒ}}|dQk�rhtd)||fƒ‚ˆj$ƒˆjƒd*ˆ_.ˆj$ƒˆ_/ˆj$ƒˆ_0ˆj"ƒ}(t1ˆ_2ˆj.dk�r¸ˆj2t3Bˆ_2|#d+k�rΈj2t4Bˆ_2|(�ràˆj2t5Bˆ_2ˆjd,ƒˆjƒˆjƒ}}|dk�rtd-||fƒ‚ˆj!d.ƒˆjƒ})|)dk�r>td/|)ƒ‚ˆjƒ}*|*dk�rXtd0ƒ‚ˆjd1ƒˆjƒˆjƒ}}|dk�rŽtd2||fƒ‚ˆjƒˆ_6}+|!�sĈj6d3k�r¼td4|$ƒ‚nd!ˆ_7nd5ˆ_7|�sædˆ_8dˆ_9dˆ_:dS| dk�rütd6| ƒ‚ˆjd7ƒ},ˆjƒ}-ˆjƒ}.|.dk�r4|-dk�r4|-|.}.}-d}/d}0x t|.ƒD]”}1ˆjƒ}2ˆjƒ}3ˆj"ƒ}|2dk�rvd}0|}/nb|2dk�rž|3dk�rž|0dk�ržd }0|}/n:|2dk�r¼|3dk�r¼d}0|}/n|2dk�rF|3d8k�rFd}0|}/�qFW|/dk�rðtd9ƒ‚|/|,7}/ˆj|/ƒˆjƒ}4iˆ_8}5i}6|4dRk�r>ˆj!d ƒˆj"ƒ}ˆj"ƒ}7nˆjƒ}ˆjƒ}7|4dk�rº‡fd>d?„t|d ƒDƒ}8xBtt;d@ˆj6tt'ƒƒƒD](}9|8|:}:|:|5|9<|6j<|:gƒj=|9ƒ�qŠW�n~|4dk� r|/|};t,ˆjƒdAƒ}<ˆj!d ƒ‡fdBd?„t|<ƒDƒ}=ˆj!d ƒ‡fdCd?„t|<ƒDƒ}>‡fdDd?„t|<ƒDƒ}?ˆj}@‡fdEd?„t|<ƒDƒ}AxÊt|<ƒD]¾}1x¶t|>|1|=|1dƒD]œ}9|A|1dk� r˜|9|?|1dF@}:n\|9|>|1d |A|1}|@d |1|}||;k� rÐd}:n$ˆj>|ƒ}:|:dk� rô|:|?|1dF@}:|:|5|9<|6j<|:gƒj=|9ƒ� qtW� qXW�n|4d k� rxˆjƒ}Bˆjƒ}Cx:t|B|B|CƒD](}:ˆjƒ}9|:|5|9<|6j<|:gƒj=|9ƒ� qHW�nÀ|4d|O|I|NjAB}0|:|5|0<|6j<|:gƒj=|0ƒ� q‚W|MdUk� r’|9}M� q’Wn tEdI|4ƒ‚ˆjdJƒd}Piˆ_:}Qgˆ_Fxrt|*ƒD]f}:ˆjƒˆjƒ}P}RˆjFj=|P|Rfƒ||Pƒ}P|:dk�rž|Pˆ_9|:|6k�r`x|6|:D]}S|P|Q|S<�q²W�q`WxRt|*|+ƒD]D}:ˆjƒ}RˆjFj=|P|Rfƒ|:|6k�rÖx|6|:D]}S|P|Q|S<�qW�qÖWdKˆj'k�r2tdLƒ‚ˆjdKƒgˆ_G|dk�rzxlt|+dƒD]}1ˆjGj=ˆjƒd>ƒ�qZWn@|dk�r®x4t|+dƒD]}1ˆjGj=ˆj"ƒƒ�q’Wn tdM|ƒ‚dN|5k�rÞ|5dN|5dO<|QdN|QdO<n"dO|5k�r|5dO|5dN<|QdO|QdN<dS)VaÞ Extract typographic information from the loaded font file. The following attributes will be set:: name PostScript font name flags Font flags ascent Typographic ascender in 1/1000ths of a point descent Typographic descender in 1/1000ths of a point capHeight Cap height in 1/1000ths of a point (0 if not available) bbox Glyph bounding box [l,t,r,b] in 1/1000ths of a point _bbox Glyph bounding box [l,t,r,b] in unitsPerEm unitsPerEm Glyph units per em italicAngle Italic angle in degrees ccw stemV stem weight in 1/1000ths of a point (approximate) If charInfo is true, the following will also be set:: defaultWidth default glyph width in 1/1000ths of a point charWidths dictionary of character widths for every supported UCS character code This will only work if the font has a Unicode cmap (platform 3, encoding 1, format 4 or platform 0 any encoding format 4). Setting charInfo to false avoids this requirement rˆrzUnknown name table format (%d)N)r r3r4r5r7r4r i r3z0PostScript name is UTF-16BE string of odd lengthÚ utf_16_beÚ mac_romanr7r5z _RL_%s_%s_TTFÚz _RL_%s_TTFz#Could not find PostScript font nameó ó-é~s [](){}<>/%z'psName=%r contains invalid character %sZRegularr�z head table not found ttf name=%sz"Unknown head table version %d.%04xiõ<_zInvalid head table magic %04xcSs |d|S)Ng@�@r)r¡Ú unitsPerEmrrrr£5sz(TTFontFile.extractInfo..rŸTzOS/2ié:iôé2g@P@Úpostz"Unknown post table version %d.%04xgð@iXÚhheaz"Unknown hhea table version %d.%04xéz*Unknown horizontal metric data format (%d)z!Number of horizontal metrics is 0Úmaxpz"Unknown maxp table version %d.%04xéÿz/Font does not allow subsetting/embedding (%04X)FzUnknown glyph data format (%d)r,r6z'could not find a suitable cmap encodingé r=r;r9csg|] }ˆjƒ‘qSr)r–)r!r")rerrr$Ész*TTFontFile.extractInfo..ég@csg|] }ˆjƒ‘qSr)r|)r!Ú_)rerrr$Òscsg|] }ˆjƒ‘qSr)r|)r!rÌ)rerrr$Ôscsg|] }ˆjƒ‘qSr)r˜)r!rÌ)rerrr$Õscsg|] }ˆjƒ‘qSr)r|)r!rÌ)rerrr$×siÿÿcsg|] }ˆjƒ‘qSr)r|)r!r")rerrr$ scsg|] }ˆjƒ‘qSr)r˜)r!r")rerrr$sz#Unsupported cmap encoding format %dÚhmtxÚlocazmissing location tablez"Unknown location table format (%d)é é r7)r r3r4r5)rÊr=r;r9rjrjrj)Hr“r|rr¥Úkeysr'rrrŒrvr«rŽr ZautoGenerateTTFMissingTTFNamerorArBÚsplitextÚbasenamerÚtimeÚ __class__Ú_agfncÚ_agfnmr@ÚreplacerÚasciirˆZ familyNameZ styleNameZfullNameZ uniqueFontIDZ fontRevisionr’rkrÂr˜ÚmapÚbboxrZallowTTFSubsettingÚascentÚdescentÚ capHeightr•ÚstemVÚ italicAngleZunderlinePositionZunderlineThicknessÚ FF_SYMBOLICÚflagsÚ FF_ITALICÚ FF_FORCEBOLDÚFF_FIXEDÚ numGlyphsÚ _full_fontÚ charToGlyphÚ defaultWidthÚ charWidthsÚminÚ setdefaultrDr™ÚmaxrªÚ firstCodeÚ entryCountÚ idRangeOffsetÚidDeltar¹ÚhmetricsÚglyphPos)Trer»Z name_offsetÚformatZ numRecordsZstring_data_offsetÚnamesÚKZ nameCountr"Z platformIdZ encodingIdZ languageIdZnameIdr{r/ÚNZoposZpsNamerTZbfnÚcZver_majZver_minÚmagicrÂZscaleZxMinZyMinZxMaxZyMaxÚindexToLocFormatZglyphDataFormatZsubsettingAllowedr…Z usWeightClassZfsTypeZ sTypoAscenderZsTypoDescenderZ sCapHeightZ isFixedPitchZmetricDataFormatÚnumberOfHMetricsræZ cmap_offsetZ cmapVersionZcmapTableCountZencoffsr²rÚplatformÚencodingÚfmtrèZ glyphToCharÚlangÚTZunicharZglyphÚlimitZsegCountZendCountZ startCountrñZidRangeOffset_startrðÚfirstÚcountÚstartr%ÚincÚgidZmaxSHKZSHrîrïZglyphsÚlastÚkÚjÚawrêÚlsbÚcharr)rerr¶ºs˜                                                                     "    " "  *                   zTTFontFile.extractInfoc& CsÜtƒ}dg}ddi}i}xP|D]H}||jkr8|j|}nd}||krZt|ƒ||<|j|ƒ||||<qW|jdƒd}d} �x| t|ƒk�rŒ|| }|j|} |j|d| } | d7} | sÀq€|j|| ƒ|jƒ} | dkr€|jdƒt } xœ| t @�rˆ|j ƒ} |j ƒ}||k�r(t|ƒ||<|j|ƒ| t @�r>|jdƒn |jdƒ| t @�r^|jdƒqî| t @�rt|jdƒqî| t@rî|jdƒqîWq€Wx%dHrÍrÆé"rÈr;r=r7r,z>hz>Hr\iÿÿz>%dLrÎr�rÄ)rˆrrrrs)rœrèr'rDr�rórvr˜r’ÚGF_MORE_COMPONENTSr|ÚGF_ARG_1_AND_2_ARE_WORDSÚGF_WE_HAVE_A_SCALEÚGF_WE_HAVE_AN_X_AND_Y_SCALEÚGF_WE_HAVE_A_TWO_BY_TWOržr›ÚKeyErrorrrròr•rr2r¥rÚr@rr)r©)&rer+ÚoutputZglyphMapZglyphSetZ codeToGlyphÚcodeZoriginalGlyphIdxrrróZglyphLenZnumberOfContoursrâZglyphIdxryrÅrærÍr r rûrÆrÈrïr{r,Z glyphDataZoffsetsr rxr�Z pos_in_glyphÚpaddingrÎrúr/r�rrrÚ makeSubsetjs                                  &                 zTTFontFile.makeSubsetN)r rr)r ) rrrrrÖr×rhr¶rrrrrr³™s  3r³éééc@s*eZdZdZd dd„Zdd„Zdd„Zd S) Ú TTFontFacez˜TrueType typeface. Conceptually similar to a single byte typeface, but the glyphs are identified by UCS character codes instead of glyph names.rcCs$tjj|dƒtj||||d�dS)z$Loads a TrueType font from filename.N)r]rg)r ÚTypeFacerhr³)reror]rgrrrrh-szTTFontFace.__init__cCs|jj||jƒS)z'Returns the width of character U+)rêr@ré)rerrrrÚ getCharWidth2szTTFontFace.getCharWidthc Cs¦tjƒ}|j|ƒ|_t|jƒ|jd<|jr4tjg|_|j |d|j |fƒ}|j t @}|t B}tjd|j|j|j|tj|jƒtj|ƒ|j|j|dœ ƒ}|j |d|ƒS)z€Generate a TrueType font subset and add it to the PDF document. Returns a PDFReference to the new FontDescriptor object.ZLength1zfontFile:%s(%s)z/FontDescriptor) ZTypeZAscentZ CapHeightZDescentZFlagsZFontBBoxZFontNameZ ItalicAngleZStemVZ FontFile2zfontDescriptor:)r Ú PDFStreamrÚcontentr'Ú dictionaryÚ compressionÚ PDFZCompressÚfiltersÚ ReferencerorâÚFF_NONSYMBOLICráZ PDFDictionaryrÜrÞrÝÚPDFArrayrÛZPDFNameràrß)reÚdocr*r+ZfontFileZ fontFileRefrâZfontDescriptorrrrÚaddSubsetObjects6s(     zTTFontFace.addSubsetObjectsN)rr)rrrrrhr#r.rrrrr!'s r!c@seZdZdZdd„ZdS)Ú TTEncodingzïEncoding for TrueType fonts (always UTF-8). TTEncoding does not directly participate in PDF object creation, since we need a number of different 8-bit encodings for every generated font subset. TTFont itself cares about that.cCs d|_dS)NzUTF-8)rˆ)rerrrrhYszTTEncoding.__init__N)rrrrrhrrrrr/Rsr/c@s^eZdZdZGdd„dƒZdZdZddd„Zdd d „Zdd d „Z ddd„Z dd„Z dd„Z dS)ÚTTFonta›Represents a TrueType font. Its encoding is always UTF-8. Note: you cannot use the same TTFont object for different documents at the same time. Example of usage: font = ttfonts.TTFont('PostScriptFontName', '/path/to/font.ttf') pdfmetrics.registerFont(font) canvas.setFont('PostScriptFontName', size) canvas.drawString(x, y, "Some text encoded in UTF-8") c@seZdZdZddd„ZdS)z TTFont.StateÚFNcCs i}|_d|_d|_d|_tt|ddƒddƒr®t|jjƒƒ}d|krP|jdƒx*t dƒD]}||krZ|||<|j|ƒqZWx|D] }|||<q‚Wdd„|Dƒg|_ d|_dS|dkr¼t j }|ròt t d ƒƒ}|g|_ x|D] }|||<qÚWd |_nd gd g|_ d |d <dS) NrÚfacerçrÐrËcSsg|]}|‘qSrr)r!rrrrr$|sz)TTFont.State.__init__..Té€rÏé!)Ú assignmentsÚnextCodeÚ internalNameÚfrozenrŠÚsetrèrÑÚremoverrÚsubsetsr ÚttfAsciiReadabler¥)reÚ asciiReadableZttfÚAÚCrZsubset0rrrrhns6       zTTFont.State.__init__)NN)rrrÚ namePrefixrhrrrrÚStatelsrAr rNcCsJ||_t|||d�|_tƒ|_ddlm}|ƒ|_|dkr@tj }||_ dS)zµLoads a TrueType font from filename. If validate is set to a false values, skips checksum validation. This can save time, especially if the font is large. )r]rgr)ÚWeakKeyDictionaryN) ÚfontNamer!r2r/rýÚweakrefrBÚstater r<Ú_asciiReadable)rerˆror]rgr=rBrrrrh“s zTTFont.__init__r”cCst||||ƒS)N)r)reÚtextÚsizerýrrrÚ stringWidth¢szTTFont.stringWidthc CsZ|dkr|j}y|j|}Wn8tk rTtj||ƒ}|j|<|dk rP||_YnX|S)zIconvenience function for those wishing to roll their own state propertiesN)rFrErr0rAr@)rer-r=r@rErrrÚ _assignState¥s zTTFont._assignStateúutf-8c CsÚ|j}y|j|}Wn*tk r>tj||ƒ}|j|<YnXd }g}g}t|ƒs^|jdƒ}|j} |j} t j } �xJt t |ƒD�]:} | dkr�d} | | kr¢| | } nØ|j r¼tjd|j| fƒ‚|j} | d@dk�rþ| dkrê| | d?jdƒ|jd7_|j} | dk�rX| d@�sD| �r:| jdgƒ|jd7_|j} n | jgƒ| | d?j| ƒn | | d| <|jd7_| | | <| d?|k�r¬|�r |j|t|ƒfƒ| d?}g}|j| d@ƒq~W|�rÖ|j|t|ƒfƒ|S) a Splits text into a number of chunks, each of which belongs to a single subset. Returns a list of tuples (subset, string). Use subset numbers with getSubsetInternalName. Doc is needed for distinguishing subsets when building different documents at the same time.r zutf-8rÐrÏz:Font %s is already frozen, cannot add new character U+%04XrÉr9rrj)rFrErr0rArr¬r5r;r ÚreserveTTFNotdefrÚÚordr8r ÚPDFErrorrCr6rDr)rerGr-rýr=rEZcurSetÚcurÚresultsr5r;rLrrrrrÚ splitString±s\       zTTFont.splitStringc Cs²y|j|}Wn*tk r8tj|jƒ}|j|<YnX|dksP|t|jƒkrbtd||jfƒ‚|j dkr¤|j t t|j ƒdƒ|_ d|j |j |j<|j j|ƒd|j |fS)zªReturns the name of a PDF Font object corresponding to a given subset of this dynamic font. Use this function instead of PDFDocument.getInternalFontName.rz#Subset %d does not exist in font %sNr ú/z/%s+%d)rErr0rArFr'r;rurCr7r@ÚreprZ fontMappingZ delayedFontsrD)rer+r-rErrrÚgetSubsetInternalNameæs  zTTFont.getSubsetInternalNamec Cs`y|j|}Wn*tk r8tj|jƒ}|j|<YnXd|_�xt|jƒD�]\}}|j||ƒdd…}dj t |ƒd|j j |j j fƒjdƒ}tjƒ}d|j|f|_||_||_d|_t|ƒd|_tt|j j|ƒƒ}tj|ƒ|_tjƒ} t||ƒ| _|j �r tj!g| _"|j#| d|ƒ|_$|j j%|||ƒ|_&|j#||ƒ} |j'd j(} || |<qNW|j|=dS) aZMakes one or more PDF objects to be added to the document. The caller supplies the internal name to be used (typically F1, F2, ... in sequence). This method creates a number of Font and FontDescriptor objects. Every FontDescriptor is a (no more than) 256 character subset of the original TrueType font.r Nr\ó+r zFont %s subset %drztoUnicodeCMap:Z BasicFonts))rErr0rArFr8r(r;rTr)rr2rˆrdr¬r ZPDFTrueTypeFontrCZ __Comment__ÚNameZBaseFontZ FirstCharr'ZLastCharr¥rÚr#r,ZWidthsr$r-r%r'r(r)r*Ú ToUnicoder.ZFontDescriptorZ idToObjectr¸) rer-rErr+r7Z baseFontNameZpdfFontZwidthsZ cmapStreamÚrefZfontDictrrrÚ addObjectsôs4$      zTTFont.addObjects)rrN)r”)NN)rK) rrrrrAZ _multiByteZ _dynamicFontrhrIrJrQrTrYrrrrr0\s$   5r0cCs tjƒdS)N)r?rºrrrrÚ_resetsrZ)Úregister_resetr r3r5r9rŸrÏé@r3rËiiiirr r r3r3r5r4r9r6rÏr7r\rŸiriri)JÚ __version__rÚstructrrrr—rQrrrrr Zreportlab.pdfbaser r Ú reportlabr Zreportlab.lib.rl_accelr rrrÚ collectionsrÚiorrArÔrNrrÚ maketransrr-r1r2rZGF_ARGS_ARE_XY_VALUESZGF_ROUND_XY_TO_GRIDrZ GF_RESERVEDrrrZGF_WE_HAVE_INSTRUCTIONSZGF_USE_MY_METRICSZGF_OVERLAP_COMPOUNDZGF_SCALED_COMPONENT_OFFSETZGF_UNSCALED_COMPONENT_OFFSETr?rMrVrWrœrªr«r³råZFF_SERIFráZ FF_SCRIPTr+rãZ FF_ALLCAPZ FF_SMALLCAPrär"r!r/r0rZZreportlab.rl_configr[rrrrÚst1   0:   + B