;
0sDc           @   si  d  Z  d Z d k Z d k Z d k l Z l Z l Z d k l	 Z	 d k
 l Z d k l Z l Z l Z l Z l Z d k l Z d k Z e i i   e	 i Z e	 i Z h  Z h  Z h  Z d   Z y d	 k l Z Wn e j
 o e Z n Xd
 e  f d     YZ! d e  f d     YZ" d   Z# d f  d     YZ$ e% d  Z& d   Z' d f  d     YZ( g  Z) d f  d     YZ* e+ d  Z, e+ d  Z- e+ d  Z. e+ d  Z/ d   Z0 d   Z1 d e$ f d     YZ2 d   Z3 d    Z4 d!   Z5 d"   Z6 d#   Z7 d$   Z8 d%   Z9 y d& k l: Z; Wn e j
 o e9 Z; n Xe; d'  e+ d(  f \ Z< Z= e) i> e; d)  e; d'  g  d*   Z? d+   Z@ d,   ZA d-   ZB d. d/  ZC y d0 k lD ZE Wn e j
 o eC ZE n Xy2 d1 k lF ZF d kG ZG eG iH eF e% e*  e* _E Wn e j
 o n Xd2   ZI d3   ZJ d4   ZK d5   ZL eM d6 j o eL   eK   n d S(7   s9    $Id: pdfmetrics.py 2873 2006-05-17 10:59:59Z rgbecker $ s  
This provides a database of font metric information and
efines Font, Encoding and TypeFace classes aimed at end users.

There are counterparts to some of these in pdfbase/pdfdoc.py, but
the latter focus on constructing the right PDF objects.  These
classes are declarative and focus on letting the user construct
and query font objects.

The module maintains a registry of font objects at run time.

It is independent of the canvas or any particular context.  It keeps
a registry of Font, TypeFace and Encoding objects.  Ideally these
would be pre-loaded, but due to a nasty circularity problem we
trap attempts to access them and do it on first access.
N(   s
   StringTypes   ListTypes	   TupleType(   s	   _fontdata(   s   warnOnce(   s	   rl_isfiles   rl_globs   rl_isdirs   open_and_reads   open_and_readlines(   s   defaultEncodingc         C   s  g  } | d | d f \ } } | i } d | j o
 d } n x |  o y! | i | |  i |  f  PWqC t j
 o } | i
 d d !\ } } | o$ | i | |  |  i |  f  n | o! | i t |  | | !|   n | i t t | | f  |  | }  qC XqC W| Sd S(   sB   return a list of (font,string) pairs representing the unicode texti    i   s   UCS-2s   UTF16i   i   N(   s   Rs   fontss   fonts   encNames   encs   utexts   appends   encodes   UnicodeEncodeErrors   es   argss   i0s   ils   extends   _py_unicode2T1s   _notdefFonts   _notdefChar(   s   utexts   fontss   encs   es   i0s   Rs   fonts   il(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   _py_unicode2T1&   s(     	
 $!(   s
   unicode2T1s	   FontErrorc           B   s   t  Z RS(   N(   s   __name__s
   __module__(    (    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys	   FontErrorC   s   s   FontNotFoundErrorc           B   s   t  Z RS(   N(   s   __name__s
   __module__(    (    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   FontNotFoundErrorE   s   c         C   s  t  |  d  } t |  d j oI | o t i | d d  } n t |  d j o t d |   qk n h  } g  } t	 t i
 |  } d } xY| D]Q}	 |	 d d !d j o
 d } q |	 d d !d	 j o
 d } q | ot i |	 d
  } t	 t i
 |  } | d d !\ } } } t i |  \ } } | d j p t d |	  t i |  } t i |  \ } } | d j p t d |	  t i |  } t i |  \ } } | d j p t d |	  | }
 | i | | |
 f  q q Wd } x | D] }	 |	 d d !d j o
 d } n |	 d d !d j o
 d } q| o |	 d d !d j o n y t i |	 d d  \ } } Wn t d |  |	 f  n Xy t i |  } Wn n X| | | <qqW| | f Sd S(   s  Quick and dirty - gives back a top-level dictionary
    with top-level items, and a 'widths' key containing
    a dictionary of glyph names and widths.  Just enough
    needed for embedding.  A better parser would accept
    options for what data you wwanted, and preserve the
    order.s   ri   i    s   s   AFM file %s hasn't enough datai   s   StartCharMetricsi   s   EndCharMetricss   ;i   s   Cs   bad line in font file %ss   WXs   Ns   StartFontMetricsi   s   Comments    s-   Header information error in afm %s: line='%s'N(   s   open_and_readliness   afmFileNames   liness   lens   strings   splits
   ValueErrors   topLevels
   glyphLevels   maps   strips	   inMetricss   lines   chunkss   cidChunks
   widthChunks	   nameChunks   ls   rs   AssertionErrors   atois   cids   widths   names   appends   inHeaders   lefts   right(   s   afmFileNames   cidChunks
   glyphLevels   rights   chunkss	   nameChunks   widths	   inMetricss
   widthChunks   lines   names   cids   inHeaders   liness   ls   topLevels   rs   left(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   parseAFMFileH   sf       

 

 s   TypeFacec           B   s/   t  Z d   Z d   Z d   Z d d  Z RS(   Nc         C   s   | |  _  g  |  _ h  |  _ d |  _ d |  _ t |  _ d |  _ d |  _	 | d j o d |  _
 n$ | d j o d |  _
 n
 t |  _
 | t j o d |  _ |  i |  n
 d |  _ d  S(   Ni    s   ZapfDingbatss   ZapfDingbatsEncodings   Symbols   SymbolEncodingi   (   s   names   selfs
   glyphNamess   glyphWidthss   ascents   descents   Nones
   familyNames   bolds   italics   requiredEncodings   standardFontss   builtIns   _loadBuiltInData(   s   selfs   name(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   __init__   s"    										c         C   sK   t  |  } t i | |  _ |  i i   |  _ t i | \ |  _	 |  _
 d S(   s   Called for the built in 14 fonts.  Gets their glyph data.
        We presume they never change so this can be a shared reference.N(   s   strs   names	   _fontdatas   widthsByFontGlyphs   selfs   glyphWidthss   keyss
   glyphNamess   ascent_descents   ascents   descent(   s   selfs   name(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   _loadBuiltInData   s
     c         C   s   g  Sd S(   s=   Info function, return list of the font files this depends on.N(    (   s   self(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   getFontFiles   s     s   .pfbc         C   sk  t  i |  t  i |  f } t |  d  oK t i i	 |  i
  d } x/ | D]# } t | |  o | | SqN qN Wn y t i |  i  } Wn t |  i  } | o t  i |  d j oL xi | D]= } t i i	 |  d | } t |  o
 | } q t } q Wq7t  i |  d j o
 | } q7q;t } n X| t j o t d | |  i f  n | Sd  S(   Ns   pfbFileNamei    s   .pfbs   .afms   Can't find %s for face '%s'(   s   strings   lowers   exts   uppers   possible_extss   hasattrs   selfs   oss   paths   splitexts   pfbFileNames
   r_basenames   es	   rl_isfiles	   _fontdatas
   findT1Files   names   rs   bruteForceSearchForAFMs   afms   pfbs   Nones   warnOnce(   s   selfs   exts   afms   pfbs   es   possible_extss   rs
   r_basename(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys
   findT1File   s2      

(   s   __name__s
   __module__s   __init__s   _loadBuiltInDatas   getFontFiless
   findT1File(    (    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   TypeFace   s   			c         C   s   | t j o d k l } n t |   o |  Sn t i i |   } xM | D]E } t |  o qL n t i i | |  } t |  o | SqL qL W|  Sd  S(   N(   s   T1SearchPath(   s
   searchPaths   Nones   reportlab.rl_configs   T1SearchPaths	   rl_isfiles   fns   oss   paths   basenames   bfns   dirnames   rl_isdirs   joins   tfn(   s   fns
   searchPaths   bfns   tfns   dirname(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   bruteForceSearchForFile   s         c         C   s   d k  l } xv | D]n } t |  o q n t | t i d  } x9 | D]1 } t	 |  \ } } | d |  j o | SqM qM Wq Wt Sd S(   sc   Looks in all AFM files on path for face with given name.

    Returns AFM file name or None.  Ouch!(   s   T1SearchPaths   *.[aA][fF][mM]s   FontNameN(   s   reportlab.rl_configs   T1SearchPaths   dirnames   rl_isdirs   rl_globs   oss   seps	   possibless   possibles   parseAFMFiles   topDicts	   glyphDicts   faceNames   None(   s   faceNames   possibles   topDicts	   glyphDicts	   possibless   dirnames   T1SearchPath(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   bruteForceSearchForAFM   s        s   Encodingc           B   sY   t  Z d  Z e d  Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d   Z RS(	   s1   Object to help you create and refer to encodings.c         C   s  | |  _  d |  _ | t j o4 | t j p
 t d  | |  _ t i	 | |  _
 n | t j o t |  _ t i	 t |  _
 n t |  t j o) t |  } | i  |  _ | i
 |  _
 n^ t |  t t f j o t |  _ | |  _
 n. t | t  o | i  |  _ | i
 |  _
 n d  S(   Ni    s2   Can't have a base encoding for a standard encoding(   s   names   selfs   frozens   standardEncodingss   bases   Nones   AssertionErrors   baseEncodingNames	   _fontdatas	   encodingss   vectors   defaultEncodings   types
   StringTypes   getEncodings   baseEncs   ListTypes	   TupleTypes
   isinstances   Encoding(   s   selfs   names   bases   baseEnc(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   __init__   s&    					c         C   s   |  i | Sd S(   s.   Return glyph name for that code point, or NoneN(   s   selfs   vectors   index(   s   selfs   index(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   __getitem__  s     c         C   s^   |  i d j p
 t d  |  i | | j o, t |  i  } | | | <t |  |  _ n d  S(   Ni    s   Cannot modify a frozen encoding(	   s   selfs   frozens   AssertionErrors   vectors   indexs   values   lists   Ls   tuple(   s   selfs   indexs   values   L(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   __setitem__  s
    
c         C   s   t  |  i  |  _ d |  _ d  S(   Ni   (   s   tuples   selfs   vectors   frozen(   s   self(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   freeze  s    c         C   s'   |  i | i j o |  i | i j Sd  S(   N(   s   selfs   names   others   vector(   s   selfs   other(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   isEqual  s    c         C   sL   |  i d j p
 t d  | } x% | D] } | |  i | <| d } q' Wd S(   sA   Set a group of character names starting at the code point 'base'.i    s   Cannot modify a frozen encodingi   N(   s   selfs   frozens   AssertionErrors   bases   idxs   newNamess   names   vector(   s   selfs   bases   newNamess   idxs   name(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   modifyRange  s      c         C   s   g  } t } x t t |  i   D]x } |  i | } | | i | j o" | o | i
 |  g  } q q" | o | i
 |  q" | o | | g } q" q" W| o | i
 |  n | Sd S(   s3  Return a compact list of the code points differing between two encodings

        This is in the Adobe format: list of
           [[b1, name1, name2, name3],
           [b2, name4]]
        where b1...bn is the starting code point, and the glyph names following
        are assigned consecutive code points.N(   s   rangess   Nones   curRanges   xranges   lens   selfs   vectors   is   glyphs   otherEncs   append(   s   selfs   otherEncs   is   curRanges   rangess   glyph(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   getDifferences"  s"      c   	      C   s  d k  l } h  } t |  i  } |  i |  } | g  j o | i	 |  i  Sn g  } xV | D]N } | i | d  x4 | d D]( } | t j	 o | i d |  q q Wq_ W| i |  | d <| i	 |  i  | d <| i	 d  | d <| i |  } | Sd	 S(
   s&   Returns a PDF Object representing self(   s   pdfdoci    i   s   /s   Differencess   BaseEncodings   Encodings   TypeN(   s   reportlab.pdfbases   pdfdocs   Ds   getEncodings   selfs   baseEncodingNames   baseEncs   getDifferencess   differencess   PDFNames	   diffArrays   ranges   appends	   glyphNames   Nones   PDFArrays   PDFDictionarys   PD(	   s   selfs   PDs   Ds	   glyphNames   differencess   baseEncs   ranges   pdfdocs	   diffArray(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   makePDFObject<  s(       (   s   __name__s
   __module__s   __doc__s   Nones   __init__s   __getitem__s   __setitem__s   freezes   isEquals   modifyRanges   getDifferencess   makePDFObject(    (    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   Encoding   s    						s   Fontc           B   sM   t  Z d  Z d   Z d   Z d   Z d d  Z e Z d   Z d   Z	 RS(   sD  Represents a font (i.e combination of face and encoding).

    Defines suitable machinery for single byte fonts.  This is
    a concrete class which can handle the basic built-in fonts;
    not clear yet if embedded ones need a new font class or
    just a new typeface class (which would do the job through
    composition)c         C   s~   | |  _ t |  } |  _ t |  |  _ | |  _ | i	 o | i
 t j o
 t } n g  } | |  _ |  i   d |  _ d  S(   Ni    (   s   names   selfs   fontNames   getTypeFaces   faceNames   faces   getEncodings   encNames   encodings   builtIns   requiredEncodings   Nones   standardT1SubstitutionFontss   _s   substitutionFontss   _calcWidthss
   _multiByte(   s   selfs   names   faceNames   encNames   faces   _(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   __init__e  s    		
	
c         C   s   d |  i i |  i i f Sd  S(   Ns   <%s %s>(   s   selfs	   __class__s   __name__s   faces   name(   s   self(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   __repr__v  s    c         C   s   d g d } |  i i } |  i i } x t d  D]~ } | | } | t j	 oa y | | } | | | <Wq t j
 o6 d k } | i i o d |  i i | f GHq q Xq2 q2 W| |  _ d S(   s)   Vector of widths for stringWidth functioni    i   Ns3   typeface "%s" does not have a glyph "%s", bad font!(   s   ws   selfs   faces   glyphWidthss   gws   encodings   vectors   vecs   ranges   is	   glyphNames   Nones   widths   KeyErrors   reportlab.rl_configs	   reportlabs	   rl_configs   warnOnMissingFontGlyphss   names   widths(   s   selfs   gws	   glyphNames   is   widths   vecs   ws	   reportlab(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   _calcWidthsy  s"      

	s   utf8c      
   C   s   t  | t  o | i |  } n t g  i } t | |  g |  i
  D]4 \ } } | t t | i i t t |     qH ~  d | Sd S(   s   This is the "purist" approach to width.  The practical approach
        is to use the stringWidth function, which may be swapped in for one
        written in C.f0.001N(   s
   isinstances   texts   unicodes   decodes   encodings   sums   appends   _[1]s
   unicode2T1s   selfs   substitutionFontss   fs   ts   maps   widthss   __getitem__s   ords   size(   s   selfs   texts   sizes   encodings   fs   _[1]s   t(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   _py_stringWidth  s      c         C   sz   d } xi t d  D][ } | d t |  i |  } | d j o | d } n | d d j o | d } q q W| Sd	 S(
   s<   returns a pretty block in PDF Array format to aid inspections   [i   s    i   s    ]i   i   s   
N(   s   texts   ranges   is   strs   selfs   widths(   s   selfs   is   text(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   _formatWidths  s      c         C   s  d k  l } d t t | i  d  } | i   } | | _	 |  i i | _ d |  i | _ |  i i   | _ |  i i t j o@ d | _ d | _ | i |  i  | _ |  i i |  | _ n | i | |  } | i d i } | | | <d | | i |  i <d	 S(
   s   Makes and returns 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) (   s   pdfdocs   Fi   s   Font %si    i   s
   BasicFontss   /N(    s   reportlab.pdfbases   pdfdocs   reprs   lens   docs   fontMappings   internalNames   PDFType1Fonts   pdfFonts   Names   selfs   faces   names   BaseFonts   fontNames   __Comment__s   encodings   makePDFObjects   Encodings   standardFontss	   FirstChars   LastChars   PDFArrays   widthss   Widthss
   addObjectss   FontDescriptors	   References   refs
   idToObjects   dicts   fontDict(   s   selfs   docs   internalNames   pdfFonts   fontDicts   pdfdocs   ref(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys
   addObjects  s"     			
(
   s   __name__s
   __module__s   __doc__s   __init__s   __repr__s   _calcWidthss   _py_stringWidths   stringWidths   _formatWidthss
   addObjects(    (    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   Font]  s    				i   i   i   i   c         C   sT   t  | |  d  d >t  | |  d  d >Bt  | |  d  Bd >t  | |   BSd S(   s=   compute a pfb style length from the first 4 bytes of string di   i   i   i   N(   s   ords   ds   p(   s   ps   d(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys
   _pfbSegLen  s     c         C   s   | |  t j p | |  d | j oG t d | t t  t |  |  t | |   t | |  d  f  n | t j o d  Sn |  d }  t |  |  } |  d }  |  | t
 |  j o# t d | |  | t
 |  f  n |  |  | f Sd  S(   Ni   sG   Bad pfb file'%s' expected chr(%d)chr(%d) at char %d, got chr(%d)chr(%d)i   i   s1   Bad pfb file'%s' needed %d+%d bytes have only %d!(   s   ds   ps
   PFB_MARKERs   ms
   ValueErrors   fns   ords   PFB_EOFs
   _pfbSegLens   ls   len(   s   ps   ds   ms   fns   l(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys	   _pfbCheck  s    &G 

#s   EmbeddedType1Facec           B   s;   t  Z d  Z d   Z d   Z d   Z d   Z d   Z RS(   sc   A Type 1 font other than one of the basic 14.

    Its glyph data will be embedded in the PDF file.c         C   sa   t  i |  t  t i i |  |  _ t i i |  |  _ t |  _	 |  i
 |  |  i |  d  S(   N(   s   TypeFaces   __init__s   selfs   Nones   oss   paths   abspaths   afmFileNames   pfbFileNames   requiredEncodings   _loadGlyphss   _loadMetrics(   s   selfs   afmFileNames   pfbFileName(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   __init__  s    	c         C   s   |  i |  i g Sd  S(   N(   s   selfs   afmFileNames   pfbFileName(   s   self(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   getFontFiles  s    c   	      C   s   t  |  } t |  p t d |  t | d  } t d | t |  \ } } t | | t
 |  \ } } t | | t |  \ } } t | | t |  | | | !| | | !| | | !|  _ t |  i  |  _ | | |  _ | | |  _ | | |  _ d S(   si   Loads in binary glyph data, and finds the four length
        measurements needed for the font descriptors   file %s not founds   bi    N(   s   bruteForceSearchForFiles   pfbFileNames	   rl_isfiles   AssertionErrors   open_and_reads   ds	   _pfbChecks	   PFB_ASCIIs   s1s   l1s
   PFB_BINARYs   s2s   l2s   s3s   l3s   PFB_EOFs   selfs   _binaryDatas   lens   _lengths   _length1s   _length2s   _length3(	   s   selfs   pfbFileNames   ds   s2s   l1s   s3s   l2s   l3s   s1(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   _loadGlyphs  s     &c         C   s  t  |  } t |  \ }	 }
 |	 d |  _ |	 d |  _ |	 i d d  |  _	 |	 i d d  |  _
 |	 i d d  |  _ |	 i d d  |  _ |	 i d	 d  |  _ |	 i d
 d  |  _ |	 i d d d d d g  } t i |  } g  |  _ x' | D] } |  i i t i |   q Wh  } x! |
 D] \ } } } | | | <q#W| |  _ | i   |  _ |  i i   |	 i d t  d j o t g d } x? |
 D]7 \ } } } | d j o
 | d j o | | | <qqW|  i d } | |  _! t" | |  } t$ |  n d S(   s    Loads in and parses font metricss   FontNames
   FamilyNames   Ascenderi  s	   Descenderi    s	   CapHeights   ItalicAngles   stemVs   XHeights   FontBBoxs   EncodingSchemes   FontSpecifici   i   s   EncodingN(%   s   bruteForceSearchForFiles   afmFileNames   parseAFMFiles   topLevels	   glyphDatas   selfs   names
   familyNames   gets   ascents   descents	   capHeights   italicAngles   stemVs   xHeights   strBboxs   strings   splits   tokenss   bboxs   toks   appends   atois   glyphWidthss   cids   widths   keyss
   glyphNamess   sorts   Nones   namess   codes   encNames   requiredEncodings   Encodings   encs   registerEncoding(   s   selfs   afmFileNames   glyphWidthss   codes   encNames   toks   cids   strBboxs   tokenss   topLevels	   glyphDatas   namess   widths   encs   name(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   _loadMetrics  sD     	  	 	c         C   s+  d k  l } | i   } |  i | _ |  i | i d <|  i	 | i d <|  i
 | i d <| i | d |  i  } | i h  d d <d |  i <d	 |  i <d
 |  i <d d <d | i |  i  <d | i |  i  <d |  i <d |  i <d |  i <d | < } | i | d |  i  } | Sd S(   sF   Add whatever needed to PDF file, and return a FontDescriptor reference(   s   pdfdocs   Length1s   Length2s   Length3s	   fontFile:s   Types   /FontDescriptors   Ascents	   CapHeights   Descents   Flagsi"   s   FontBBoxs   FontNames   ItalicAngles   StemVs   XHeights   FontFiles   fontDescriptor:N(   s   reportlab.pdfbases   pdfdocs	   PDFStreams   fontFiles   selfs   _binaryDatas   contents   _length1s
   dictionarys   _length2s   _length3s   docs	   References   pfbFileNames   fontFileRefs   PDFDictionarys   ascents	   capHeights   descents   PDFArrays   bboxs   PDFNames   names   italicAngles   stemVs   xHeights   fontDescriptors   fontDescriptorRef(   s   selfs   docs   fontFiles   pdfdocs   fontDescriptorRefs   fontDescriptors   fontFileRef(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys
   addObjects  s     (   s   __name__s
   __module__s   __doc__s   __init__s   getFontFiless   _loadGlyphss   _loadMetricss
   addObjects(    (    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   EmbeddedType1Face  s    				(c         C   s   t  |  t  p t d |   |  t |  i <d k l } t i	 |  i  } |  i t j oh | i | d d |  i  | i | d d |  i  | i | d d |  i  | i | d d |  i  n d  S(   Ns   Not a TypeFace: %s(   s   fontsi    i   (   s
   isinstances   faces   TypeFaces   AssertionErrors
   _typefacess   names   reportlab.libs   fontss   strings   lowers   ttnames   standardFontss
   addMapping(   s   faces   fontss   ttname(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   registerTypeFace=  s    c         C   s   t  |  t  p t d |   t i |  i  o< |  i t |  i  o |  i   q t	 d |  i
   n |  t |  i <|  i   d  S(   Ns   Not an Encoding: %ss>   Encoding "%s" already registered with a different name vector!(   s
   isinstances   encs   Encodings   AssertionErrors
   _encodingss   has_keys   names   isEquals   freezes	   FontErrors   Name(   s   enc(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   registerEncodingJ  s    c         C   s   |  i } |  t | <|  i o d k l } t i |  i  } | i	 | d d |  i  | i	 | d d |  i  | i	 | d d |  i  | i	 | d d |  i  n d S(   sG   Registers a font, including setting up info for accelerated stringWidth(   s   fontsi    i   N(
   s   fonts   fontNames   _fontss
   _multiBytes   reportlab.libs   fontss   strings   lowers   ttnames
   addMapping(   s   fonts   fontNames   fontss   ttname(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   registerFontW  s     	

c         C   s  y t  |  SWn t j
 o |  t j o= t |   } t i |  \ | _ | _	 | _
 t |  | Sqt |   } | o x@ d d f D]2 } t i i |  d | } t |  o Pq q Wt |  p t d |  t | |  } t |  | Sq  n Xd S(   s-   Lazily construct known typefaces if not founds   .pfbs   .PFBi    s   file %s not found!N(   s
   _typefacess   faceNames   KeyErrors   standardFontss   TypeFaces   faces	   _fontdatas   standardFontAttributess
   familyNames   bolds   italics   registerTypeFaces   bruteForceSearchForAFMs   afms   es   oss   paths   splitexts   pfbs	   rl_isfiles   AssertionErrors   EmbeddedType1Face(   s   faceNames   afms   pfbs   es   face(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   getTypeFaceh  s*     
  	
c         C   sT   y t  |  SWnA t j
 o5 |  t j o t |   } t |  | SqP   n Xd S(   s-   Lazily construct known encodings if not foundN(   s
   _encodingss   encNames   KeyErrors   standardEncodingss   Encodings   encs   registerEncoding(   s   encNames   enc(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   getEncoding  s     
c         C   sS   t  |   } | i o t |  |  | i  } n t |  |  t  } t |  | Sd S(   s.   search for and register a font given it's nameN(   s   getTypeFaces   fontNames   faces   requiredEncodings   Fonts   fonts   defaultEncodings   registerFont(   s   fontNames   faces   font(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   findFontAndRegister  s     

c         C   s0   y t  |  SWn t j
 o t |   Sn Xd S(   s   Lazily constructs known fonts if not found.

    Names of form 'face-encoding' will be built if
    face and encoding are known.  Also if the name is
    just one of the standard 14, it will make up a font
    in the default encoding.N(   s   _fontss   fontNames   KeyErrors   findFontAndRegister(   s   fontName(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   _py_getFont  s
     (   s   getFontUs   ZapfDingbatsin   s   Symbolc         C   sD   t  |   } y | i | i f SWn | i i | i i f Sn Xd  S(   N(   s   getFonts   fontNames   fonts   ascents   descents   face(   s   fontNames   font(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   getAscentDescent  s
    c         C   s   t  |   d Sd  S(   Ni    (   s   getAscentDescents   fontName(   s   fontName(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys	   getAscent  s    c         C   s   t  |   d Sd  S(   Ni   (   s   getAscentDescents   fontName(   s   fontName(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys
   getDescent  s    c          C   s   t  i   }  |  i   |  Sd S(   s   Returns what's in thereN(   s   _fontss   keyss   regs   sort(   s   reg(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   getRegisteredFontNames  s     
s   utf8c         C   s    t  |  i |  | d | Sd S(   sZ   Define this anyway so it can be tested, but whether it is used or not depends on _rl_accels   encodingN(   s   getFonts   fontNames   stringWidths   texts   fontSizes   encoding(   s   texts   fontNames   fontSizes   encoding(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   _py_stringWidth  s     (   s   stringWidthU(   s   _instanceStringWidthUc          C   s   d GHt  i   } | i   x | D] } d G| GHq" WHd GHt i   } | i   x | D] } d G| GHqX WHd GHt i   } | i   x9 | D]1 }  t |  } d | i | i i | i i f GHq Wd  S(   Ns   Registered Encodings:s      s   Registered Typefaces:s   Registered Fonts:s       %s (%s/%s)(   s
   _encodingss   keyss   sorts   encNames
   _typefacess   facess   faceNames   _fontss   ks   keys   fonts   fontNames   faces   names   encoding(   s   keys   encNames   keyss   ks   faceNames   facess   font(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   dumpFontData  s*    
 
 
 
c   
      C   s   d  k  } x t d d !D] } | i    } t |  i } x9 |  D]1 } d } x" | D] } | | t |  } qR Wq? W| i    } d | | GH| i    } x& |  D] } t |  i | d  }	 q W| i    } d | | GHHq Wd  S(   Ni    i   s   slow stringWidth took %0.4fi
   s'   class lookup and stringWidth took %0.4f(   s   times   standardFontss   fontNames   t0s   getFonts   widthss   ws   textss   texts   l2s   chs   ords   t1s   stringWidths   l3(
   s   textss   fontNames   chs   texts   t0s   t1s   l2s   ws   times   l3(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   test3widths  s(    	    c          C   sz   t  d  i   }  d t |   GHd GHt |  g  Ht i |   } d t |  d t |   t |  f GHt |  d  S(   Ns-   ../../rlextra/rml2pdf/doc/rml_user_guide.preps   rawdata length %ds   test one huge string...s7   test %d shorter strings (average length %0.2f chars)...f1.0(   s   opens   reads   rawdatas   lens   test3widthss   strings   splits   words(   s   rawdatas   words(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   testStringWidthAlgorithms  s    )c          C   sN   t  d  } t |  | i d d !GHt  d  }  |  i GHt |   t   d  S(   Ns	   Helveticai    i   s   Wombat(   s   TypeFaces   helvs   registerTypeFaces
   glyphNamess   wombats   dumpFontData(   s   wombats   helv(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   test  s    

s   __main__(N   s   __version__s   __doc__s   strings   oss   typess
   StringTypes   ListTypes	   TupleTypes   reportlab.pdfbases	   _fontdatas   reportlab.lib.loggers   warnOnces   reportlab.lib.utilss	   rl_isfiles   rl_globs   rl_isdirs   open_and_reads   open_and_readliness   reportlab.rl_configs   defaultEncodings	   rl_codecss	   RL_Codecss   registers   standardFontss   standardEncodingss
   _typefacess
   _encodingss   _fontss   _py_unicode2T1s	   _rl_accels
   unicode2T1s   ImportErrors	   Exceptions	   FontErrors   FontNotFoundErrors   parseAFMFiles   TypeFaces   Nones   bruteForceSearchForFiles   bruteForceSearchForAFMs   Encodings   standardT1SubstitutionFontss   Fonts   chrs
   PFB_MARKERs	   PFB_ASCIIs
   PFB_BINARYs   PFB_EOFs
   _pfbSegLens	   _pfbChecks   EmbeddedType1Faces   registerTypeFaces   registerEncodings   registerFonts   getTypeFaces   getEncodings   findFontAndRegisters   _py_getFonts   getFontUs   getFonts   _notdefFonts   _notdefChars   extends   getAscentDescents	   getAscents
   getDescents   getRegisteredFontNamess   _py_stringWidths   stringWidthUs   stringWidths   _instanceStringWidthUs   news   instancemethods   dumpFontDatas   test3widthss   testStringWidthAlgorithmss   tests   __name__(=   s	   PFB_ASCIIs   bruteForceSearchForAFMs   _py_getFonts   test3widthss   open_and_readliness   _notdefChars   ListTypes   dumpFontDatas   FontNotFoundErrors   getEncodings   _py_stringWidths
   _pfbSegLens   getAscentDescents
   StringTypes   _instanceStringWidthUs   parseAFMFiles   findFontAndRegisters   open_and_reads   rl_isdirs   TypeFaces   registerEncodings	   getAscents   registerTypeFaces   defaultEncodings   tests   news   __version__s
   getDescents   __doc__s	   _pfbChecks	   rl_codecss   getFonts   strings   testStringWidthAlgorithmss   standardT1SubstitutionFontss   getTypeFaces   _fontss   getRegisteredFontNamess   _py_unicode2T1s   stringWidths   bruteForceSearchForFiles   rl_globs   EmbeddedType1Faces	   TupleTypes   registerFonts
   _encodingss   Encodings	   _fontdatas	   rl_isfiles   _notdefFonts   standardFontss
   PFB_MARKERs   standardEncodingss   PFB_EOFs
   _typefacess
   PFB_BINARYs   Fonts   oss	   FontErrors
   unicode2T1s   warnOnce(    (    sF   /home/packages/reportlab/reportlab_2_0/reportlab/pdfbase/pdfmetrics.pys   ?   s   %					EC
	ob		j																