Пример #1
0
    def escapestyle(self, m):
        Lexer.tokenize(self, m.group('l_data2'))

        token = Token(type='text', value=m.group('inner'))
        self.ts.append(token)

        Lexer.tokenize(self, m.group('r_data2'))
Пример #2
0
    def images(self, m):
        Lexer.tokenize(self, m.group('l_data3'))

        v = {'alt': m.group('alt1'),
             'link': m.group('i_link1'),
             'all_tag': m.group('all_tag1')}
        token = Token(type='image', value=v)
        self.ts.append(token)

        Lexer.tokenize(self, m.group('r_data3'))
Пример #3
0
    def links(self, m):
        Lexer.tokenize(self, m.group('l_data2'))

        v = {'text': m.group('l_text'),
             'link': m.group('l_link'),
             'all_tag': m.group('all_tag3')}
        token = Token(type='link', value=v)
        self.ts.append(token)

        Lexer.tokenize(self, m.group('r_data2'))
Пример #4
0
    def link_images(self, m):
        Lexer.tokenize(self, m.group('l_data4'))

        v = {'alt': m.group('alt2'),
             'img_link': m.group('i_link2'),
             'page_link': m.group('page_link'),
             'all_tag': m.group('all_tag2')}
        token = Token(type='imagelink', value=v)
        self.ts.append(token)

        Lexer.tokenize(self, m.group('r_data4'))
Пример #5
0
 def __init__(self):
     img_reg = r'(?P<all_tag%s>  !(?P<i_link%s>[^\s]+)\s*\((?P<alt%s>.*)\)!  )'
     tokens = [
         ('text_style', r'(?P<l_data1>.*?)  %(?P<format>\(.*?\)|{.*?})\  (?P<text>%*.*?%*) %  (?P<r_data1>.*?)'),
         ('links', r'(?P<l_data2>.*?)  (?P<all_tag3>  "(?P<l_text>[^"]+?)":\((?P<l_link>.+?)\)  )  (?P<r_data2>.*?)'),
         ('link_images', r'(?P<l_data4>.*?)  %s:\((?P<page_link>.+?)\)  (?P<r_data4>.*?)' % img_reg % (2, 2, 2)),
         ('images', r'(?P<l_data3>.*?)  %s  (?P<r_data3>.*?)' % img_reg % (1, 1, 1)),
         ('line_break', r'\n'),
         ('data', r'.+')
     ]
     Lexer.__init__(self, tokens)
Пример #6
0
    def __init__(self):
        tokens = [
            ('header', r'h([1-6])(\.|!)\ ?'),
            ('list_item', r'\*\s* (.+)'),
            ('line_break', r'\n'),

            ('escapestyle', r'(?P<l_data2>.*?)  (?P<inner> \[escapestyle\] ([^$]*?) \[/escapestyle\] )  (?P<r_data2>.*?)'),
            ('escape', r'\[escape\] ([^$]*?) \[/escape\]'),
            ('code', r'\[code\] ((.|\s)*?) \[/code\]'),

            ('plugin', r'(?P<l_data1>.*?)  (?P<all_tag> \[(?P<p_name2> ((\[.+?\]) | [^\]])+?  )\])  (?P<r_data1>.*?)'),

            ('text', r'.+')
        ]
        Lexer.__init__(self, tokens)
        self.is_plugin = re.compile('\w+([,=]|$)')
Пример #7
0
    def plugin(self, m):
        #We support escape by [!
        name = m.group('p_name2')
        all_tag = m.group('all_tag')
        if name.find('!') == 0:
            token = Token(type='text', value=all_tag.replace('[!', '[', 1))
        elif name.find('/') == 0:
            token = Token(type='plugin_end', value='[%s]' % name)
        elif self.is_plugin.match(name):
            v = {
                'inner_tag': name,
                'all_tag': all_tag
            }
            token = Token(type='plugin_start', value=v)
        else:
            #It's not a plugin!
            token = None

        Lexer.tokenize(self, m.group('l_data1'))
        if token:
            self.ts.append(token)
        else:
            self.ts.append(Token(type='text', value='['))
            Lexer.tokenize(self, name)
            self.ts.append(Token(type='text', value=']'))
        Lexer.tokenize(self, m.group('r_data1'))
Пример #8
0
    def text_style(self, m):
        Lexer.tokenize(self, m.group('l_data1'))

        format = m.group('format')
        text = m.group('text')

        html_style = re.match('\(([bius])\s*\)', format)
        span_class = re.match('\((\w+)\)', format)
        span_style = re.match('{(\w+.+)}', format)

        token = None
        tag_or_cls = None
        if html_style:
            tag_or_cls = html_style.group(1)
            token = Token(type='html_tag_start', value=tag_or_cls)
        elif span_class:
            tag_or_cls = span_class.group(1)
            token = Token(type='span_class_start', value=tag_or_cls)
        elif span_style:
            span_inner = span_style.group(1)
            try:
                spl = span_inner.split(",")
                style = []
                for item in spl:
                    k, v = item.split(":")
                    v = v.strip()
                    style.append("%s: %s" % (k, v))
                style = ';'.join(style)
                token = Token(type='span_style_start', value=style)
            except:
                token = Token(type='text', value=span_style.group(0))
        else:
            token = Token(type='text', value=format)
        self.ts.append(token)

        #Recursively handle the inner text
        #since we need to support %(b) %(i) Hej%%
        Lexer.tokenize(self, text)

        if html_style:
            token = Token(type='html_tag_end', value=tag_or_cls)
        else:
            token = Token(type='span_end')
        self.ts.append(token)

        Lexer.tokenize(self, m.group('r_data1'))
Пример #9
0
 def escape(self, m):
     print 'her!!'
     self.ts.append(Token(type='escape_start'))
     Lexer.tokenize(self, m.group(1))
     self.ts.append(Token(type='escape_end'))
Пример #10
0
 def list_item(self, m):
     self.ts.append(Token(type='list_item_start'))
     Lexer.tokenize(self, m.group(1))
     self.ts.append(Token(type='list_item_end'))
Пример #11
0
 def tokenize(self, text):
     self.ts = []
     Lexer.tokenize(self, text)
     return self.ts