-í
>²ª<c       s  d  Z  d k Z d k Z y d k l Z Wn  e j
 o d k l Z n Xd Z e i d ƒ Z e i d ƒ Z	 e i d ƒ Z
 e i d ƒ Z d f  d	 „  ƒ  YZ d
 „  Z d „  Z d „  Z yA d k Z d e i f d „  ƒ  YZ d „  Z d „  Z d „  Z Wn e j
 o n Xd S(   sØ  This file contains a simple parser for the XML output of GLADE.

There are two parsers in this file.  One uses xmllib, so will only be
used if xmllib is in your python module library (it is included with
python >= 1.5).  The second one is less complete, but will parse most
GLADE XML files.

The second one is not a true XML parser, since it requires tags to be
of the form:

  <tag>
    <tag2>data</tag2>
  </tag>

That is tags with embeded tags in them must have the opening tag on a single
line, and the closing tag on another line by itself.  Tags with no embedded
tags should have openning tag, data and closing tag all on one line.  Also
tag attributes are not supported.  Yes I know this is a bit lame, but it is
the minimum required for reading GLADE output.

This module is not really glade specific, except that it can read GLADE
output (it can probably also read some other types of XML documents)

You should call one of read(fname), read_stream(fp) or read_string(str).
The output is a tree of TagTree.  Tags of a node can be accessed either as
attributes (eg node.tag) or as list items (eg node['tag']).  If there was
more than one of that tag name at this level, they will be returned as a
tuple by the previous two methods.
N(   s   StringIOs   pyglade.xmlparse.errors   <\?.*>s   <\([^>]+\)>\(.*\)</\([^>]+\)>s   <\([^/>][^>]*\)>s   </\([^>]+\)>s   TagTreec      st   d „  Z  d „  Z e Z d „  Z d „  Z d „  Z d „  Z d „  Z d d	 „ Z d d
 „ Z	 d d „ Z
 d „  Z RS(   Nc    s   | |  _  | |  _ h  |  _ d  S(   N(   s   parents   selfs   tags   _TagTree__tags(   s   selfs   parents   tag(    (    s4   /usr/lib/python2.2/site-packages/pyglade/xmlparse.pys   __init__3 s    		c    s   |  i | Sd  S(   N(   s   selfs   _TagTree__tagss   key(   s   selfs   key(    (    s4   /usr/lib/python2.2/site-packages/pyglade/xmlparse.pys   __getitem__7 s    c    s   | |  i | <d  S(   N(   s   values   selfs   _TagTree__tagss   key(   s   selfs   keys   value(    (    s4   /usr/lib/python2.2/site-packages/pyglade/xmlparse.pys   __setitem__: s    c    s   t  |  i ƒ Sd  S(   N(   s   lens   selfs   _TagTree__tags(   s   self(    (    s4   /usr/lib/python2.2/site-packages/pyglade/xmlparse.pys   __len__< s    c    s   |  i i | ƒ Sd  S(   N(   s   selfs   _TagTree__tagss   has_keys   key(   s   selfs   key(    (    s4   /usr/lib/python2.2/site-packages/pyglade/xmlparse.pys   has_key> s    c    s   |  i i ƒ  Sd  S(   N(   s   selfs   _TagTree__tagss   keys(   s   self(    (    s4   /usr/lib/python2.2/site-packages/pyglade/xmlparse.pys   keys@ s    c    s*   |  i i | ƒ o |  i | Sn | Sd  S(   N(   s   selfs   _TagTree__tagss   has_keys   keys   default(   s   selfs   keys   default(    (    s4   /usr/lib/python2.2/site-packages/pyglade/xmlparse.pys   getB s    i    c    s9   |  i i | ƒ o t i |  i | ƒ d j Sn | Sd  S(   Ns   true(   s   selfs   _TagTree__tagss   has_keys   keys   strings   lowers   default(   s   selfs   keys   default(    (    s4   /usr/lib/python2.2/site-packages/pyglade/xmlparse.pys   get_boolG s    c    s3   |  i i | ƒ o t i |  i | ƒ Sn | Sd  S(   N(   s   selfs   _TagTree__tagss   has_keys   keys   strings   atois   default(   s   selfs   keys   default(    (    s4   /usr/lib/python2.2/site-packages/pyglade/xmlparse.pys   get_intL s    f0.0c    s3   |  i i | ƒ o t i |  i | ƒ Sn | Sd  S(   N(   s   selfs   _TagTree__tagss   has_keys   keys   strings   atofs   default(   s   selfs   keys   default(    (    s4   /usr/lib/python2.2/site-packages/pyglade/xmlparse.pys	   get_floatQ s    c    s   |  ` xƒ |  i i ƒ  D]r } |  i | } t | ƒ t f  ƒ j o | f } n x, | D]$ } t | d ƒ o | i	 ƒ  n qV W|  i | =q Wd  S(   Ns   destroy(
   s   selfs   parents   _TagTree__tagss   keyss   keys   valss   types   vals   hasattrs   destroy(   s   selfs   keys   vals   vals(    (    s4   /usr/lib/python2.2/site-packages/pyglade/xmlparse.pys   destroyV s        (   s   __init__s   __getitem__s   __getattr__s   __setitem__s   __len__s   has_keys   keyss   gets   get_bools   get_ints	   get_floats   destroy(    (    (    s4   /usr/lib/python2.2/site-packages/pyglade/xmlparse.pys   TagTree2 s    							c 	   sî  t  d t d d ƒ } | g } |  i ƒ  } x™| o‘t i | ƒ d j p
 | d j o n[t	 i | ƒ d j oá t
 i t	 i d ƒ ƒ } t	 i d ƒ } t
 i t	 i d ƒ ƒ } | | j o t d	 | | f ‚ n | d
 i | ƒ oX | d
 | } t | ƒ t f  ƒ j o | | f | d
 | <n | | f | d
 | <n | | d
 | <ndt i | ƒ d j o¼ t
 i t i d ƒ ƒ } t  d | d
 d | ƒ } | d
 i | ƒ oX | d
 | } t | ƒ t f  ƒ j o | | f | d
 | <n | | f | d
 | <n | | d
 | <| i | ƒ n’ t i | ƒ d j on t
 i t i d ƒ ƒ } | o t d | ‚ n | | d
 i j o t d | d
 i | f ‚ n | d
 =n t d | ‚ |  i ƒ  } q- Wt | ƒ d j o t d ‚ n | Sd  S(   Ns   parents   tags   XML-Basei    s   
i   i   i   s   unmatching tags: %s and %siÿÿÿÿs   no tags to match s$   unmatching container tags: %s and %ss   unparseable line: s   some unclosed tags are present(   s   TagTrees   Nones   bases   cstacks   fps   readlines   lines   comment_lines   searchs   data_tags   strings   lowers   groups   keys   datas   ends   errors   has_keys   oldvals   types   open_tags   trees   appends	   close_tags   tags   len(	   s   fps   ends   cstacks   trees   oldvals   bases   keys   lines   data(    (    s4   /usr/lib/python2.2/site-packages/pyglade/xmlparse.pys   read_stream` sR    	 #c    s   t  t |  d ƒ ƒ Sd  S(   Ns   r(   s   read_streams   opens   fname(   s   fname(    (    s4   /usr/lib/python2.2/site-packages/pyglade/xmlparse.pys   read’ s    c    s   t  t |  ƒ ƒ Sd  S(   N(   s   read_streams   StringIOs   string(   s   string(    (    s4   /usr/lib/python2.2/site-packages/pyglade/xmlparse.pys   read_string• s    s   myParserc      s&   d „  Z  d „  Z d „  Z d „  Z RS(   Nc    sM   t  i i |  ƒ t d t d d ƒ |  _ |  i g |  _ t |  _ d |  _	 d  S(   Ns   parents   tags   XML-Bases    (
   s   xmllibs	   XMLParsers   __init__s   selfs   TagTrees   Nones   bases   cstacks   curNames   curData(   s   self(    (    s4   /usr/lib/python2.2/site-packages/pyglade/xmlparse.pys   __init__œ s
    	c    sñ   t  i | ƒ } |  i oË |  i } t d |  i d d | ƒ } |  i d i	 | ƒ oa |  i d | } t | ƒ t f  ƒ j o | | f |  i d | <n | | f |  i d | <n | |  i d | <|  i i | ƒ d |  _ n | |  _ d  S(   Ns   parentiÿÿÿÿs   tags    (   s   strings   lowers   tags   selfs   curNames   curs   TagTrees   cstacks   trees   has_keys   oldvals   types   appends   curData(   s   selfs   tags   attrss   oldvals   curs   tree(    (    s4   /usr/lib/python2.2/site-packages/pyglade/xmlparse.pys   unknown_starttag¢ s    
	c    sb  t  i | ƒ } t  i |  i ƒ |  _ |  i oÀ |  i | j o t d |  i | f ‚ n |  i d i	 | ƒ og |  i d | } t | ƒ t f  ƒ j o | |  i f |  i d | <n | |  i f |  i d | <n |  i |  i d | <n_ |  i o t d | ‚ n |  i d i | j o! t d |  i d i | f ‚ n |  i d =t |  _ d |  _ d  S(   Ns   unmatching tags: %s and %siÿÿÿÿs   no tags to match s    (   s   strings   lowers   tags   strips   selfs   curDatas   curNames   errors   cstacks   has_keys   oldvals   types   None(   s   selfs   tags   oldval(    (    s4   /usr/lib/python2.2/site-packages/pyglade/xmlparse.pys   unknown_endtag· s$    
!
	c    s   |  i | |  _ d  S(   N(   s   selfs   curDatas   data(   s   selfs   data(    (    s4   /usr/lib/python2.2/site-packages/pyglade/xmlparse.pys   handle_dataÓ s    (   s   __init__s   unknown_starttags   unknown_endtags   handle_data(    (    (    s4   /usr/lib/python2.2/site-packages/pyglade/xmlparse.pys   myParser› s    			c    sD   t  ƒ  } | i |  ƒ t | i ƒ d j o t d ‚ n | i Sd  S(   Ni   s   some unclosed tags are present(   s   myParsers   parsers   feeds   strings   lens   cstacks   errors   base(   s   strings   parser(    (    s4   /usr/lib/python2.2/site-packages/pyglade/xmlparse.pys   read_stringÖ s
    	c    sq   t  ƒ  } |  i d ƒ } x( | o  | i | ƒ |  i d ƒ } q Wt | i ƒ d j o t d ‚ n | i	 Sd  S(   Ni    i   s   some unclosed tags are present(
   s   myParsers   parsers   fps   reads   datas   feeds   lens   cstacks   errors   base(   s   fps   parsers   data(    (    s4   /usr/lib/python2.2/site-packages/pyglade/xmlparse.pys   read_streamÝ s    	 (   s   __doc__s   strings   regexs	   cStringIOs   StringIOs   ImportErrors   errors   compiles   comment_lines   data_tags   open_tags	   close_tags   TagTrees   read_streams   reads   read_strings   xmllibs	   XMLParsers   myParser(   s   regexs   strings   StringIOs   myParsers   read_strings   comment_lines   read_streams	   close_tags   reads   errors   data_tags   xmllibs   open_tags   TagTree(    (    s4   /usr/lib/python2.2/site-packages/pyglade/xmlparse.pys   ? s.   		.	2			;		
