# -*- coding: iso-8859-1 -*-
"""
    MoinMoin - Textile Parser

"""

import textile
import re
from MoinMoin import wikiutil

RE_WIKI_WIKI_WORD = "([A-Z][a-z]+){2,}(:([A-Z][a-z]+){2,}){0,1}"

r_colon = re.compile(':')
r_wikiwiki = re.compile(RE_WIKI_WIKI_WORD)

class WikiTextiler(textile.Textiler):

    def __init__(self, text, request):
        self.request = request
        textile.Textiler.__init__(self,text)

    def links(self, text):
        text = super(WikiTextiler, self).links(text)

        def lookupWikiWikiWord(match):
            wikitag, wikiurl, wikitail, wikitag_bad = wikiutil.resolve_wiki(self.request, match.group(0))
            href = wikiutil.join_wiki(wikiurl, wikitail)
            if wikitag_bad:
                return '<a href="%s/%s">%s</a>' % (wikiurl, match.group(0), match.group(0))
                #return 'tag=%s, url=%s, tail=%s, bad=%s' % (wikitag, wikiurl, wikitail, wikitag_bad)

            return '<a href="%s">%s</a>' % (href, match.group(0))

        return r_wikiwiki.sub(lookupWikiWikiWord, text)

        def process(self):
            return super(WikiTextiler, self).process()

def textil(text, request):
    return WikiTextiler(text,request).process()

class Parser:
    """
        Send Textile marked-up page converted to HTML
    """

    def __init__(self, raw, request, **kw):
        self.raw = raw
        self.request = request
        self.form = request.form
        self._ = request.getText

    def format(self, formatter):
        """ Send the text. """
        #self.request.write(textil(self.raw.expandtabs(),self.request))
        self.request.write(textil(self.raw,self.request))
