Warning: session_start(): Session cannot be started after headers have already been sent in /home/tvrreohg/public_html/manga.php on line 13
3 Nebû2ã@sðdZdZddlZddlmZddlmZddlmZm Z ddl m Z m Z m Z ddlmZdd lmZdd lmZd d d ddœZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZdd„ZGdd„deƒZdd„ZedkrìeƒdS)z3.3.0aLRoutines to print code page (character set) drawings. Predates unicode. To be sure we can accurately represent characters in various encodings and fonts, we need some routines to display all those characters. These are defined herein. The idea is to include flowable, drawable and graphic objects for single and multi-byte fonts. éN)ÚCanvas)ÚFlowable)Ú pdfmetricsÚcidfonts)ÚGroupÚStringÚRect)ÚWidget)Úcolors)Úint2ByteZwinansiÚmacromanZ macexpertZpdfdoc)ÚWinAnsiEncodingZMacRomanEncodingZ MacExpertZPDFDocc@s2eZdZdZdd„Zdd„Zdd„Zd d d „Zd S) Ú CodeChartBasezrBasic bits of drawing furniture used by single and multi-byte versions: ability to put letters into boxes.cCs¾|jd|j}|t|ƒkr(t|ƒ|_nt|ƒd|_|jd|j|_|jd|j|_g|_x(t|jdƒD]}|jj ||jƒqpWg|_ x(t|jdƒD]}|j j ||jƒq WdS)z&Work out x and y positions for drawinggð?ééN) Ú codePointsÚ charsPerRowÚintÚrowsÚboxSizeÚwidthÚheightÚylistÚrangeÚappendÚxlist)ÚselfrÚrowÚcol©rú9/tmp/tmp4i9tl1d3/lib64/python/reportlab/lib/codecharts.pyÚ calcLayout#s  zCodeChartBase.calcLayoutcCs|jrd|Sd|SdS)Nz%02Xz%d)Úhex)rÚbytrrr Ú formatByte8szCodeChartBase.formatBytecCsŽ|j|jt|ƒ}xt|ƒD]}|jdƒqWd}d}|jj|j|jdƒ�x8|D�].}|dkr´|jj dƒ|jj d||j|j|d|j|j|jddd�|jj dƒn´y.|jj |d|j|j|d |j|ƒWn„|jj dƒ|jj d||j|j|d|j|j|jddd�|jj |d|j|j|d |jd ƒ|jj dƒYnX|d}||jkrV|d}d}qVWdS) z]Fills boxes in order. None means skip a box. Empty boxes at end get filled with grayNrgè?gÍÌÌÌÌÌì?r)ÚstrokeÚfillggø?gì?ú?) rrÚlenrrÚcanvÚsetFontÚfontNamerÚ setFillGrayÚrectÚdrawCentredString)rÚcharListZ extraNeededÚirrÚchrrr Ú drawChars>s< $   $  zCodeChartBase.drawCharsÚcCsN|jjdƒ|jjd|jd|j|jddd�|jjdd|j|jdddd�|jjdƒ|jjdd|jƒd}xZt|jƒD]L}|j r”|j |}n|j ||j ƒ}|jj d |j|j|d |j|ƒq~Wx>t|j ƒD]0}|jj |d |j|jd |j|j |ƒƒqÚW|�rJ|jjd d |jƒ|jj d |j|jd |j|ƒdS)z4Writes little labels in the top row and first columngš™™™™™é?rrr)r&r%gzHelvetica-ObliquegØ?gà?gè?gø?gÐ?zHelvetica-BoldObliqueNéþÿÿÿr4) r)r,r-rrrr*rrÚ rowLabelsr$rr.)rÚtopLeftr#rÚlabelrrrr Ú drawLabelsds, "    zCodeChartBase.drawLabelsN)r3)Ú__name__Ú __module__Ú __qualname__Ú__doc__r!r$r2r8rrrr rs &rc@seZdZd dd„Zdd „Zd S) ÚSingleByteEncodingChartÚ Helveticar éércCsbd|_||_||_|jd|j|_||_||_||_d|_tj tj |j|j|jƒƒ|j ƒdS)Néú-) rÚfaceNameÚ encodingNamer+rrr"r5rÚ registerFontZFontr!)rrCrDrrr"rrr Ú__init__…s  z SingleByteEncodingChart.__init__csˆ|jƒdgdtttttddƒƒƒƒ}|j}tj||ƒ}tj |ƒd‰‡fdd„‰‡fdd„|Dƒ}|j |ƒ|j j |j |jƒdS)Né rArcs |dkr dSˆ|dd�dSdS)NÚreplace)Úerrorsrr)Útxt)Údecoderrr Ú decodeFunc¢sz0SingleByteEncodingChart.draw..decodeFunccsg|] }ˆ|ƒ‘qSrr)Ú.0r1)rLrr ú ¨sz0SingleByteEncodingChart.draw..)r8ÚlistÚmapr rrDÚ adobe2codecÚgetÚcodecsÚlookupr2r)Úgridrr)rr/ZencNamer)rLrKr Údraw—s"   zSingleByteEncodingChart.drawN)r>r r?r@r)r9r:r;rFrVrrrr r=„s r=c@s(eZdZdZdd„Zdd„Zdd„ZdS) ÚKutenRowCodeChartafFormats one 'row' of the 94x94 space used in many Asian encodings.aliases These deliberately resemble the code charts in Ken Lunde's "Understanding CJKV Information Processing", to enable manual checking. Due to the large numbers of characters, we don't try to make one graphic with 10,000 characters, but rather output a sequence of these.c Cs–||_d|_d|_d|_d|_ddddd g|_d |_||_||_yt j |j|jƒ}t j |ƒWnd |_d |_YnX|jd |j|_ |jƒdS)Né^éééZ00Z20Z40Z60Z80rr>r rB)rrrrrr5r"rCrDrÚCIDFontrrEr+r!)rrrCrDÚfontrrr rF¹s" zKutenRowCodeChart.__init__cCs`g}|jjdƒdkrLxFtddƒD]&}t|dƒt|dƒ}|j|ƒq Wn|jdgdƒ|S)z1Works out the character values for this kuten rowZEUCré_é NrXéÿÿÿÿ)rDÚfindrr r)rrÚcellsrr1rrr ÚmakeRowÏszKutenRowCodeChart.makeRowcCsD|jd|jd�dg|j|jƒ}|j|ƒ|jj|j|jƒdS)NzR%d)r6)r8rrcr2r)rUrr)rr/rrr rVßs zKutenRowCodeChart.drawN)r9r:r;r<rFrcrVrrrr rW°srWc@s(eZdZdZdd„Zdd„Zdd„ZdS) Ú Big5CodeChartz¿Formats one 'row' of the 94x160 space used in Big 5 These deliberately resemble the code charts in Ken Lunde's "Understanding CJKV Information Processing", to enable manual checking.c Cs ||_d|_d|_d|_d|_d|_||_||_dddd d d d d ddg |_yt j |j|jƒ}t j |ƒWnd|_d|_YnX|jd|j|_ |jƒdS)Nr_rYr?é rÚ4Ú5Ú6Ú7ÚAÚBÚCÚDÚEÚFr>r rB)rrrrrr"rCrDr5rr\rrEr+r!)rrrCrDr]rrr rFðs" zBig5CodeChart.__init__c Cspg}|jjdƒdkr\xVdD]<}x6td ƒD]*}|d |}t|ƒt|ƒ}|j|ƒq(WqWn|jdgdƒ|S)zLWorks out the character values for this Big5 row. Rows start at 0xA1ZB5rér[ééreé é é r@ér?Nr_r`) rpr[rqrrrersrtrur@rv)rDrarr r)rrrbÚyÚxrr1rrr rcs  zBig5CodeChart.makeRowcCs>|jd|jd�|j|jƒ}|j|ƒ|jj|j|jƒdS)Nz%02X)r6)r8rrcr2r)rUrr)rr/rrr rVs  zBig5CodeChart.drawN)r9r:r;r<rFrcrVrrrr rdësrdcCsœ|jƒytj|ƒ}Wn(tk r>tj|ƒ}tj|ƒYnX|jdƒ|j||tj ||dƒdddd�|jdƒ|j |ddƒ|j |||ƒ|j ƒdS)z¡Helper for stringwidth tests on Asian fonts. Registers font if needed. Then draws the string, and a box around it derived from the stringWidth functiongš™™™™™é?r?rr)r%r&N) Z saveStaterZgetFontÚKeyErrorrZUnicodeCIDFontrEr,r-Z stringWidthr*Ú drawStringZ restoreState)ÚmsgZcanvasrxrwr+r]rrr ÚhBoxTexts    r|c@s eZdZdZdd„Zdd„ZdS)Ú CodeWidgetz Block showing all the characterscCsd|_d|_d|_d|_dS)Nrr_)rxrwrr)rrrr rF3szCodeWidget.__init__c Cs®|jd}|jd}tƒ}|jt|j|j|j|jdtjd�ƒxjt dƒD]^}xXt dƒD]L}|d|}|dkrVt |j|||j|j||t |ƒƒ}|j|ƒqVWqHW|S)Ng0@)Z fillColorZ strokeColorr?rG) rrrÚaddrrxrwr Zblackrrr )rZdxZdyÚgrxrwZ charValueÚsrrr rV9s   zCodeWidget.drawN)r9r:r;r<rFrVrrrr r}1sr}cCs|tdƒ}|jddƒ|jdddƒtƒ}|j|ddƒtdd �}|j|dd ƒtd d d �}|j|ddƒ|jƒtdƒdS)Nzcodecharts.pdfzHelvetica-BoldééHiîzTesting code page chartsiôrG)ri,ér)rr"édzsaved codecharts.pdf)rr*rzr=ZdrawOnÚsaveÚprint)ÚcZcc1Zcc2Zcc3rrr ÚtestMs   rˆÚ__main__)Ú __version__r<rSZreportlab.pdfgen.canvasrZreportlab.platypusrZreportlab.pdfbaserrZreportlab.graphics.shapesrrrZreportlab.graphics.widgetbaser Z reportlab.libr Zreportlab.lib.utilsr rQrr=rWrdr|r}rˆr9rrrr Ús,     f,;2