ó
°aÿHc        "   @   s¡  d  d l  m Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l	 m
 Z
 m Z d  d l Z e j j Z e j d d j e ƒ ƒ Z d e j f d „  ƒ  YZ d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d e d g d e d d g d e d g d e d g d e d g d e d g d e d g d e d g d e d g d e d g d e d d g d e d d g d  e d! d g d" e d! d g d# e d$ i d% d& 6d' g d# e d( g g Z d e d g d) e d d* g d e d d g d+ e d d' g d, e d- d. d/ g d- e d0 d g d- e d- d. d g d1 e d2 g d1 e d g d3 e d2 g d3 e d g d4 e d2 g d4 e d g d5 e d$ i d6 d& 6d' g d7 e d$ i d6 d& 6d8 g d9 e d$ i d6 d& 6d: g d e d g d e d$ i d; d& 6d' g d< e d= d g d> e d2 g d> e d g d e d d g d? e d! d/ g d" e d! d g d  e d! d g d@ e d0 d/ g dA e d g dB e d g dC e d g dD e d2 g dE e d2 g dF e d2 g g  Z x8 e D]0 Z e j dG e d. e dH d= g e dI ƒ qÊWdJ „  Z dK „  Z  dL „  Z! d i  dM „ Z# e$ dN k re j% j& d. e j% j' e j% d. ƒ d. ƒ x< e j( dH D]* Z) d  dO l* m* Z* e* e! dP e) ƒ ƒ qlWn  d S(Q   iÿÿÿÿ(   t   escapeN(   t   configt
   feedparsers   <((%s)[^>]*)></\2>t   |t	   stripHtmlc           B   s;   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s   remove all tags from the datac         C   sw   t  j j |  ƒ d |  _ t | t ƒ r\ y |  j | j d ƒ ƒ Wqi |  j | ƒ qi Xn |  j | ƒ |  j ƒ  d  S(   Nt    s   utf-8(	   t   sgmllibt
   SGMLParsert   __init__t   resultt
   isinstancet   strt   feedt   decodet   close(   t   selft   data(    (    sB   /home/sa3ruby/intertwingly.net/code/venus-bzr/planet/shell/tmpl.pyR      s    	c         C   s)   t  |  j t ƒ r" |  j j d ƒ S|  j S(   Ns   utf-8(   R
   R	   t   unicodet   encode(   R   (    (    sB   /home/sa3ruby/intertwingly.net/code/venus-bzr/planet/shell/tmpl.pyt   __str__   s    c         C   sº   d d  l  } | | j k r£ | j | } t | ƒ d k rX |  j t t | ƒ ƒ 7_ q¶ | j d ƒ r | j d ƒ r |  j | d d !ƒ q¶ |  j d | 7_ n |  j d | 7_ d  S(   Niÿÿÿÿi   s   &#t   ;i   s   &%s;(	   t   htmlentitydefst
   entitydefst   lenR	   t   unichrt   ordt
   startswitht   endswitht   handle_charref(   R   t   refR   (    (    sB   /home/sa3ruby/intertwingly.net/code/venus-bzr/planet/shell/tmpl.pyt   handle_entityref   s    c         C   st   yS | j  d ƒ r7 |  j t t | d d ƒ ƒ 7_ n |  j t t | ƒ ƒ 7_ Wn |  j d | 7_ n Xd  S(   Nt   xi   i   s   &#%s;(   R   R	   R   t   int(   R   R   (    (    sB   /home/sa3ruby/intertwingly.net/code/venus-bzr/planet/shell/tmpl.pyR   &   s    %c         C   s   | r |  j  | 7_  n  d  S(   N(   R	   (   R   R   (    (    sB   /home/sa3ruby/intertwingly.net/code/venus-bzr/planet/shell/tmpl.pyt   handle_data.   s     (   t   __name__t
   __module__t   __doc__R   R   R   R   R!   (    (    (    sB   /home/sa3ruby/intertwingly.net/code/venus-bzr/planet/shell/tmpl.pyR   	   s   				c         C   s    t  |  t ƒ r |  j d ƒ S|  S(   Ns   utf-8(   R
   R   R   (   t   value(    (    sB   /home/sa3ruby/intertwingly.net/code/venus-bzr/planet/shell/tmpl.pyt   String3   s     c         C   s   t  t |  ƒ ƒ S(   N(   R   R   (   R%   (    (    sB   /home/sa3ruby/intertwingly.net/code/venus-bzr/planet/shell/tmpl.pyt   Plain7   s    c         C   s   t  j t j ƒ  |  ƒ S(   N(   t   timet   strftimeR   t   date_format(   R%   (    (    sB   /home/sa3ruby/intertwingly.net/code/venus-bzr/planet/shell/tmpl.pyt
   PlanetDate:   s    c         C   s   t  j t j ƒ  |  ƒ S(   N(   R(   R)   R   t   new_date_format(   R%   (    (    sB   /home/sa3ruby/intertwingly.net/code/venus-bzr/planet/shell/tmpl.pyt   NewDate=   s    c         C   s   t  j d |  ƒ S(   Ns   %a, %d %b %Y %H:%M:%S +0000(   R(   R)   (   R%   (    (    sB   /home/sa3ruby/intertwingly.net/code/venus-bzr/planet/shell/tmpl.pyt   Rfc822@   s    c         C   s   t  j d |  ƒ S(   Ns   %Y-%m-%dT%H:%M:%S+00:00(   R(   R)   (   R%   (    (    sB   /home/sa3ruby/intertwingly.net/code/venus-bzr/planet/shell/tmpl.pyt   Rfc3399C   s    t   authort   author_namet   author_detailt   namet	   generatort   idt   icont   last_updated_822t   updated_parsedt   last_updated_isot   last_updatedt   linkt   logot   rightst   rights_detailR%   t   subtitlet   subtitle_detailt   titlet   title_detailt   title_plaint   urlt   linksR   t   relt   hreft   planet_http_locationt   author_emailt   emailt
   author_urit   content_languaget   contenti    t   languaget   summary_detailt   datet   published_parsedt   date_822t   date_isot   enclosure_hreft	   enclosuret   enclosure_lengtht   lengtht   enclosure_typet   typet	   alternatet   new_channelt   sourcet   new_datet   title_languaget   summary_languaget   updatedt   updated_822t   updated_isot	   publishedt   published_822t   published_isot   channel_i   i   c   
      C   s  i  } xp| D]h} |  } xY| d D],} t  | t ƒ rÏ | | k rÏ | d k rÂ | j d d ƒ d k rŠ t | d ƒ | d <d | d <qÂ | j d d ƒ d k rÂ t j d | d ƒ | d <qÂ n  | | } q$ t  | t ƒ rë | | } q$ t  | t ƒ rOxS | D]F } x= | j ƒ  D]( \ } } | j | d ƒ | k rPqqW| } PqWPq$ Pq$ W| r | d	 | ƒ | | d
 <q q Wxx |  j ƒ  D]j \ }	 } |	 j
 d ƒ r¸t | ƒ | |	 d <n  | j d ƒ r†|  j d ƒ r†t |  j j ƒ | d <q†q†Wd |  k r‹xˆ |  j j ƒ  D]t \ }	 } |	 j
 d ƒ rFt | ƒ | d |	 d <n  | j d ƒ r|  j j d ƒ rt |  j j j ƒ | d <qqWn  | S(   sE   Apply specified rules to the source, and return a template dictionaryi   R%   RY   R   s
   text/plains	   text/htmls   application/xhtml+xmls   <\1 />i   i    t   planet_i   R3   RB   R\   Rf   t   channel_nameN(   R
   R   t   getR    t   emptyt   subR    t   dictt   itemst   NoneR   R&   t   has_keyR'   RB   R%   R\   (
   R\   t   rulest   outputt   rulet   nodet   patht   testt   keyR%   R3   (    (    sB   /home/sa3ruby/intertwingly.net/code/venus-bzr/planet/shell/tmpl.pyt   tmpl_mapper   sL       #c         C   sP   |  j  ƒ  |  j ƒ  } | j d ƒ s2 g  | d <n  | j j | j ƒ | d =d  S(   Nt   sourcesR\   (   t   _end_sourcet   _getContextRo   Rx   t   appendR\   (   R   t   context(    (    sB   /home/sa3ruby/intertwingly.net/code/venus-bzr/planet/shell/tmpl.pyt   _end_planet_source²   s    
 c         C   sà  t  j } | j | _ t j t d | ƒ | _ t  j |  ƒ } | ` | ` i g  d 6g  d 6} | j	 t
 | j t ƒ ƒ g  } xH | j j d g  ƒ D]1 } t
 | t ƒ }  | j |  j d ƒ |  g ƒ q‘ W| j ƒ  g  | D] \ } }  |  ^ q× | d <x+ | j D]  } | d j t
 | t ƒ ƒ qý WxG | d D]; } | j d ƒ | j d ƒ k r]d | d <q,d	 | d <q,Wt j ƒ  | d
 <t j ƒ  | d <t j ƒ  | d <t j ƒ  | d <t j ƒ  | d <t j ƒ  rt j ƒ  | d <t j ƒ  j d ƒ d k rød pûd | d <n  t j ƒ  }	 t |	 ƒ | d <t |	 ƒ | d <t |	 ƒ | d <d }	 }
 xŽ | d D]‚ } | j d ƒ r’| d |	 k r…| d =q’| d }	 n  | j d ƒ rV| d |
 k rË| j d ƒ rË| d =qØ| d }
 qVqVW| S(   s3    get template information from a feedparser output t   Channelst   ItemsRx   R3   R5   R;   t   truet   guid_isPermaLinkt   falseR4   t
   owner_namet   owner_emailR   t   rssi    t   atomt   feedtypeRP   RS   RR   R]   R[   N(   R   t   _FeedParserMixint   _start_sourcet   _start_planet_sourcet   newt   instancemethodR}   Rn   t   parset   updateRw   R   t   BaseRi   R{   t   sortt   entriesR   R   t   generator_uriR3   R;   Rƒ   R„   t   findR(   t   gmtimeR+   R/   R.   Ro   (   R\   t   mixinR   Rq   Rx   R   R3   t   entryt   itemRP   t   channel(    (    sB   /home/sa3ruby/intertwingly.net/code/venus-bzr/planet/shell/tmpl.pyt   template_info¹   sV    	 
#.

 
c         C   sí   t  j ƒ  } | j |  ƒ } t  j d d ƒ } x0 t | ƒ j ƒ  D] \ } } | j | | ƒ q@ W| rÜ t j j	 t j j
 | ƒ ƒ d }	 | j d t j t j ƒ  |	 ƒ ƒ t | d ƒ }
 |
 j | j | ƒ ƒ |
 j ƒ  n | j | ƒ Sd S(   s    process an HTMLTMPL file t   html_escapei    RD   t   wN(   t   htmltmplt   TemplateManagert   preparet   TemplateProcessorR™   Rm   t   sett   osRt   t   splitextt   basenamet   urlparset   urljoinR   R;   t   opent   writet   processR   (   t   scriptt   doct   output_filet   optionst   managert   templatet   tpRv   R%   t   reluriRq   (    (    sB   /home/sa3ruby/intertwingly.net/code/venus-bzr/planet/shell/tmpl.pyt   runù   s    ""t   __main__(   t   pprints-   /home/rubys/bzr/venus/tests/data/filter/tmpl/(+   t   xml.sax.saxutilsR    R   R(   R¡   t   sysR‹   R¤   t   ret   planetR   R   Rœ   t   _BaseHTMLProcessort   elements_no_end_tagt   voidst   compilet   joinRj   R   R   R&   R'   R+   R-   R.   R/   R   R   Rr   R{   Rw   R}   R™   Rn   R±   R"   Rt   t   insertt   splitt   argvRu   R³   (    (    (    sB   /home/sa3ruby/intertwingly.net/code/venus-bzr/planet/shell/tmpl.pyt   <module>   sŽ   T*						.	1		@*