Changeset e0be4e0ba9e74bbae56efe2db89d24b014e91faf


Ignore:
Timestamp:
14.05.2013 23:09:34 (8 years ago)
Author:
Stanislaw Klekot <dozzie@…>
Branches:
b66903eafbcb1d49112014abc82c8bf683413db0
Children:
9afa277a790ecf956a0d9ad57f8dd932e8b65b80
Parents:
701f1656031c4ba1e7f939462c9bdaf35dd1116a
git-author:
Stanislaw Klekot <dozzie@…> (14.05.2013 23:09:34)
git-committer:
Stanislaw Klekot <dozzie@…> (14.05.2013 23:09:34)
Message:

First stab at cleaning up parse tree.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • dashwiki/markup/parser.py

    r76673b re0be4e  
    2929      return t 
    3030 
     31  @staticmethod 
     32  def cleanup(tree): 
     33    name  = tree.keys()[0] 
     34    value = tree.values()[0] 
     35 
     36    # whitespaces 
     37    if name in ['space', 'SPACE', 'NL']: 
     38      return ' ' 
     39 
     40    # stuff to ignore 
     41    if name == 'COMMENT': 
     42      return '' 
     43 
     44    # delimiters (LINE_BREAK, EMPTY_LINE) should never occur here 
     45 
     46    # formatting (BOLD, HEADER_E, HEADER_S, ITALIC, LINK_E, LINK_S, STRIKE, 
     47    # TT_E, TT_S) should never occur here 
     48 
     49    # quoted character 
     50    if name == 'Q_CHAR': 
     51      return value[1] 
     52 
     53    # macro value (keep the node) 
     54    if name == 'MACRO_VALUE': 
     55      return tree 
     56 
     57    # simple tokens 
     58    if name in ['COMMA', 'MACRO_CALL', 'NUMBER', 'PAREN_L', 'PAREN_R', 
     59                'PUNCT', 'STRING', 'WORD']: 
     60      return value 
     61 
     62    # skip delimiters 
     63    if name == 'document': 
     64      return { 
     65        'document': [ 
     66          Parser.cleanup(para) 
     67            for para in value 
     68            if 'EMPTY_LINE' not in para 
     69        ] 
     70      } 
     71 
     72    # TODO: 
     73    #   - *_paragraph (leading/trailing spaces, heading markers, LINE_BREAK) 
     74    #   - *_text (formatting) 
     75    #   - concatenating consequent strings 
     76    #   - link 
     77    #   - macro_call, macro_arg 
     78 
     79    # descend 
     80    if type(value) == dict: 
     81      tree[name] = Parser.cleanup(value) 
     82    elif type(value) == list: 
     83      tree[name] = [Parser.cleanup(v) for v in value] 
     84    return tree 
     85 
    3186  def parse(self, token_list): 
    3287    tree = None 
     
    53108    # TODO: post-processing 
    54109    tree = Parser.tuple2hash(tree) 
    55     return tree 
     110    return Parser.cleanup(tree) 
    56111 
    57112#----------------------------------------------------------------------------- 
Note: See TracChangeset for help on using the changeset viewer.