diff options
-rw-r--r-- | wiki2html.py | 73 | ||||
-rw-r--r-- | wiki2text.py | 3 | ||||
-rw-r--r-- | wikimarkup.py | 371 |
3 files changed, 258 insertions, 189 deletions
diff --git a/wiki2html.py b/wiki2html.py index 907e3b1..7fa97b7 100644 --- a/wiki2html.py +++ b/wiki2html.py @@ -28,3 +28,35 @@ class HtmlWikiMarkup (WikiMarkup): """ + + # FIXME: Awful kludge + image_kw = [ 'Image', + 'Grafika', + 'Bild', + 'Εικόνα', + 'Dosiero', + 'Slika', + 'Resim' + ] + + ST_INIT = 0 + ST_PARA = 1 + ST_OPEN = 2 + + state = [] + + def opara(self): + if self.state[-1] == self.ST_PARA: + self.state[-1] = self.ST_OPEN + return "<p>" + else: + return "" + def cpara(self): + state = self.state.pop(); + self.state.append(self.ST_INIT) + if state == self.ST_OPEN: + return "</p>" + else: + return "" + + def target(self, t): @@ -33,3 +65,3 @@ class HtmlWikiMarkup (WikiMarkup): if tgt != '': - if qual in ('Image', 'Grafika'): + if qual in self.image_kw: t = self.image_base + urllib.quote(tgt) + '/250px-' + urllib.quote(tgt) @@ -98,7 +130,26 @@ class HtmlWikiMarkup (WikiMarkup): - def str_seq(self, tok, env): + def str_para(self, tok, env): + s = self.cpara() + self.state.append(self.ST_PARA) + return s + + def fmtok(self, tok, env): + if type(tok) != TupleType: + return "" + if tok[0] in [ self.ENV, self.HDR ]: + s = self.cpara() + elif tok[0] == self.BAR: + s = self.str_para(tok, env) + elif tok[0] in [ self.NIL, self.SEQ ]: s = "" - for t in tok[1:]: - s += self.fmtok(t, env) - return s + else: + s = self.opara() + s1 = WikiMarkup.fmtok(self, tok, env) + if s1: + s += s1 + return s + + def __str__(self): + self.state = [ self.ST_PARA ] + return WikiMarkup.__str__(self) + self.cpara() @@ -111,3 +162,3 @@ class HtmlWiktionaryMarkup (HtmlWikiMarkup): format templates. But "tries" does not mean "does". The heuristics - used here is clearly not enogh to cope with it. + used here is clearly not enough to cope with it. @@ -136,8 +187,10 @@ class HtmlWiktionaryMarkup (HtmlWikiMarkup): def str_seq(self, tok, env): - s = "" + str = "" self.seq_pos=0 for t in tok[1:]: - s += self.fmtok(t, env) - self.seq_pos += 1 - return s + s = self.fmtok(t, env) + if s: + str += s + self.seq_pos += 1 + return str diff --git a/wiki2text.py b/wiki2text.py index e943f32..3669bd7 100644 --- a/wiki2text.py +++ b/wiki2text.py @@ -138,2 +138,5 @@ class TextWikiMarkup (WikiMarkup): + def str_para(self, tok, env): + return "\n" + def __str__(self): diff --git a/wikimarkup.py b/wikimarkup.py index d9ae7cc..e2a1cab 100644 --- a/wikimarkup.py +++ b/wikimarkup.py @@ -37,6 +37,7 @@ A base class for handling Wiki markups. It handles: - 1. basic block markup (headers, numbered and unnumbered lists, + 1. paragraphs; + 2. basic block markup (headers, numbered and unnumbered lists, indentations); - 2. basic inline markup (bold, italic); - 3. basic reference markup (links, templates, external links). + 3. basic inline markup (bold, italic); + 4. basic reference markup (links, templates, external links). It does NOT handle: @@ -92,2 +93,4 @@ It handles: SEQ = 11 + # Paragraph + PARA = 12 @@ -132,2 +135,6 @@ It handles: + if line == '\n': + yield(self.PARA,) + continue + m = eltbeg.match(line) @@ -249,4 +256,2 @@ It handles: return toktype, tok[1], self.expandtok(tok[2]) - elif toktype == self.BAR: - return tok elif toktype == self.ENV: @@ -266,2 +271,4 @@ It handles: subtree[1] if len(subtree) == 2 else None + else: + return tok @@ -316,2 +323,4 @@ It handles: self.prtok(tok[1], indent+1) + elif toktype == self.PARA: + print "PARA" @@ -379,20 +388,20 @@ class WikiMarkup (BaseWikiMarkup): langtab = { - "aa": "Afar", # Afar - "ab": "Аҧсуа", # Abkhazian - "ae": None, # Avestan - "af": "Afrikaans", # Afrikaans - "ak": "Akana", # Akan # or ak_CI + "aa": "Afar", # Afar + "ab": "Аҧсуа", # Abkhazian + "ae": None, # Avestan + "af": "Afrikaans", # Afrikaans + "ak": "Akana", # Akan "als": "Alemannisch", - "am": "አማርኛ", # Amharic - "an": "Aragonés", # Aragonese + "am": "አማርኛ", # Amharic + "an": "Aragonés", # Aragonese "ang": "Englisc", - "ar": "العربية" , # Arabic + "ar": "العربية" , # Arabic "arc": "ܐܪܡܝܐ", - "as": "অসমীয়া", # Assamese + "as": "অসমীয়া", # Assamese "ast": "Asturian", - "av": "Авар", # Avaric # Spoken mainly in Dagestan - "ay": "Aymar", # Aymara - "az": "Azərbaycan" , # Azerbaijani + "av": "Авар", # Avaric + "ay": "Aymar", # Aymara + "az": "Azərbaycan" , # Azerbaijani - "ba": "Башҡорт", # Bashkir + "ba": "Башҡорт", # Bashkir "bar": "Boarisch", @@ -400,13 +409,13 @@ class WikiMarkup (BaseWikiMarkup): "bcl": "Bikol", - "be": "Беларуская", # Byelorussian; Belarusian + "be": "Беларуская", # Byelorussian; Belarusian "be-x-old": "Беларуская (тарашкевіца)", - "bg": "Български", # Bulgarian - "bh": "भोजपुरी", # Bihari - "bi": "Bislama", # Bislama - "bm": "Bamanankan", # Bambara - "bn": "বাংলা" , # Bengali; Bangla - "bo": "བོད་སྐད", # Tibetan + "bg": "Български", # Bulgarian + "bh": "भोजपुरी", # Bihari + "bi": "Bislama", # Bislama + "bm": "Bamanankan", # Bambara + "bn": "বাংলা" , # Bengali; Bangla + "bo": "བོད་སྐད", # Tibetan "bpy": "ইমার ঠার/বিষ্ণুপ্রিয়া মণিপুরী" , - "br": "Brezhoneg" , # Breton - "bs": "Bosanski" , # Bosnian + "br": "Brezhoneg" , # Breton + "bs": "Bosanski" , # Bosnian "bug": "Basa Ugi", @@ -414,3 +423,3 @@ class WikiMarkup (BaseWikiMarkup): - "ca": "Català" , # Catalan + "ca": "Català" , # Catalan "cbk-zam": "Chavacano de Zamboanga", @@ -418,67 +427,67 @@ class WikiMarkup (BaseWikiMarkup): "cho": "Choctaw", - "ce": "Нохчийн", # Chechen + "ce": "Нохчийн", # Chechen "ceb": "Sinugboanong Binisaya" , # Cebuano - "ch": "Chamor", # Chamorro + "ch": "Chamor", # Chamorro "chr": "ᏣᎳᎩ", "chy": "Tsetsêhestâhese", - "co": "Cors", # Corsican - "cr": "Nehiyaw", # Cree + "co": "Cors", # Corsican + "cr": "Nehiyaw", # Cree "crh": "Qırımtatarca", - "cs": "Česky" , # Czech + "cs": "Česky" , # Czech "csb": "Kaszëbsczi", - "c": "Словѣньскъ", # Church Slavic - "cv": "Чăваш", # Chuvash - "cy": "Cymraeg" , # Welsh + "c": "Словѣньскъ", # Church Slavic + "cv": "Чăваш", # Chuvash + "cy": "Cymraeg" , # Welsh - "da": "Dansk" , # Danish - "de": "Deutsch" , # German - "diq": "Zazaki", # Dimli (Southern Zazaki) + "da": "Dansk" , # Danish + "de": "Deutsch" , # German + "diq": "Zazaki", # Dimli (Southern Zazaki) "dsb": "Dolnoserbski", - "dv": "ދިވެހިބަސް", # Divehi - "dz": "ཇོང་ཁ", # Dzongkha; Bhutani + "dv": "ދިވެހިބަސް", # Divehi + "dz": "ཇོང་ཁ", # Dzongkha; Bhutani - "ee": "Eʋegbe", # Ewe - "el": "Ελληνικά" , # Greek + "ee": "Eʋegbe", # Ewe + "el": "Ελληνικά" , # Greek "eml": "Emiliàn e rumagnòl", - "en": "English" , # English + "en": "English" , # English "eo": "Esperanto" , - "es": "Español" , # Spanish - "et": "Eesti" , # Estonian - "e": "Euskara" , # Basque + "es": "Español" , # Spanish + "et": "Eesti" , # Estonian + "e": "Euskara" , # Basque "ext": "Estremeñ", - "fa": "فارسی" , # Persian - "ff": "Fulfulde", # Fulah # Also NG, MR, and many others - "fi": "Suomi" , # Finnish + "fa": "فارسی" , # Persian + "ff": "Fulfulde", # Fulah + "fi": "Suomi" , # Finnish "fiu-vro": "Võro", - "fj": "Na Vosa Vakaviti", # Fijian; Fiji - "fo": "Føroyskt" , # Faroese - "fr": "Français" , # French + "fj": "Na Vosa Vakaviti",# Fijian; Fiji + "fo": "Føroyskt" , # Faroese + "fr": "Français" , # French "frp": "Arpitan", "fur": "Furlan", - "fy": "Frysk", # Frisian + "fy": "Frysk", # Frisian - "ga": "Gaeilge", # Irish + "ga": "Gaeilge", # Irish "gan": "贛語 (Gànyŭ)", - "gd": "Gàidhlig", # Scots; Gaelic - "gl": "Gallego" , # Gallegan; Galician + "gd": "Gàidhlig", # Scots; Gaelic + "gl": "Gallego" , # Gallegan; Galician "glk": "گیلکی", "got": "𐌲𐌹𐌺 ", - "gn": "Avañe'ẽ", # Guarani - "g": "ગુજરાતી", # Gujarati - "gv": "Gaelg", # Manx + "gn": "Avañe'ẽ", # Guarani + "g": "ગુજરાતી", # Gujarati + "gv": "Gaelg", # Manx - "ha": "هَوُسَ", # Hausa + "ha": "هَوُسَ", # Hausa "hak": "Hak-kâ-fa / 客家話", "haw": "Hawai`i", - "he": "עברית" , # Hebrew (formerly iw) - "hi": "हिन्दी" , # Hindi + "he": "עברית" , # Hebrew (formerly iw) + "hi": "हिन्दी" , # Hindi "hif": "Fiji Hindi", - "ho": "Hiri Mot", # Hiri Motu - "hr": "Hrvatski" , # Croatian + "ho": "Hiri Mot", # Hiri Motu + "hr": "Hrvatski" , # Croatian "hsb": "Hornjoserbsce", "ht": "Krèyol ayisyen" , # Haitian; Haitian Creole - "hu": "Magyar" , # Hungarian - "hy": "Հայերեն", # Armenian - "hz": "Otsiherero", # Herero + "hu": "Magyar" , # Hungarian + "hy": "Հայերեն", # Armenian + "hz": "Otsiherero", # Herero @@ -486,36 +495,36 @@ class WikiMarkup (BaseWikiMarkup): "ie": "Interlingue", - "id": "Bahasa Indonesia", # Indonesian (formerly in) - "ig": "Igbo", # Igbo - "ii": "ꆇꉙ ", # Sichuan Yi - "ik": "Iñupiak", # Inupiak + "id": "Bahasa Indonesia",# Indonesian (formerly in) + "ig": "Igbo", # Igbo + "ii": "ꆇꉙ ", # Sichuan Yi + "ik": "Iñupiak", # Inupiak "ilo": "Ilokano", "io": "Ido" , - "is": "Íslenska" , # Icelandic - "it": "Italiano" , # Italian - "i": "ᐃᓄᒃᑎᑐᑦ", # Inuktitut + "is": "Íslenska" , # Icelandic + "it": "Italiano" , # Italian + "i": "ᐃᓄᒃᑎᑐᑦ", # Inuktitut - "ja": "日本語", # Japanese + "ja": "日本語", # Japanese "jbo": "Lojban", - "jv": "Basa Jawa", # Javanese + "jv": "Basa Jawa", # Javanese - "ka": "ქართული" , # Georgian + "ka": "ქართული" , # Georgian "kaa": "Qaraqalpaqsha", "kab": "Taqbaylit", - "kg": "KiKongo", # Kongo # also CD and AO - "ki": "Gĩkũyũ", # Kikuyu - "kj": "Kuanyama", # Kuanyama - "kk": "Қазақша", # Kazakh - "kl": "Kalaallisut", # Kalaallisut; Greenlandic - "km": "ភាសាខ្មែរ", # Khmer; Cambodian - "kn": "ಕನ್ನಡ", # Kannada - "ko": "한국어" , # Korean - "kr": "Kanuri", # Kanuri + "kg": "KiKongo", # Kongo + "ki": "Gĩkũyũ", # Kikuyu + "kj": "Kuanyama", # Kuanyama + "kk": "Қазақша", # Kazakh + "kl": "Kalaallisut", # Kalaallisut; Greenlandic + "km": "ភាសាខ្មែរ", # Khmer; Cambodian + "kn": "ಕನ್ನಡ", # Kannada + "ko": "한국어" , # Korean + "kr": "Kanuri", # Kanuri "ks": "कश्मीरी / كشميري", # Kashmiri "ksh": "Ripoarisch", - "ku": "Kurdî / كوردی", # Kurdish - "kv": "Коми", # Komi + "ku": "Kurdî / كوردی", # Kurdish + "kv": "Коми", # Komi "kw": "Kernewek/Karnuack", # Cornish - "ky": "Кыргызча", # Kirghiz + "ky": "Кыргызча", # Kirghiz - "la": "Latina" , # Latin + "la": "Latina" , # Latin "lad": "Dzhudezmo", @@ -523,4 +532,4 @@ class WikiMarkup (BaseWikiMarkup): "lbe": "Лакку", - "lg": "Luganda", # Ganda - "li": "Limburgs", # Limburgish; Limburger; Limburgan + "lg": "Luganda", # Ganda + "li": "Limburgs", # Limburgish; Limburger; Limburgan "lij": "Lígur", @@ -528,6 +537,6 @@ class WikiMarkup (BaseWikiMarkup): "lmo": "Lumbaart", - "lo": "ລາວ", # Lao; Laotian - "lt": "Lietuvių" , # Lithuanian - "l": None, # Luba-Katanga - "lv": "Latvieš" , # Latvian; Lettish + "lo": "ລາວ", # Lao; Laotian + "lt": "Lietuvių" , # Lithuanian + "lua": "Luba", # Luba + "lv": "Latvieš" , # Latvian; Lettish @@ -535,14 +544,14 @@ class WikiMarkup (BaseWikiMarkup): "mdf": "Мокшень (Mokshanj Kälj)", - "mg": "Malagasy", # Malagasy - "mh": "Ebon", # Marshall - "mi": "Māori", # Maori - "mk": "Македонски" , # Macedonian - "ml": None, # Malayalam - "mn": "Монгол", # Mongolian - "mo": "Молдовеняскэ", # Moldavian - "mr": "मराठी" , # Marathi - "ms": "Bahasa Melay" , # Malay - "mt": "Malti", # Maltese + "mg": "Malagasy", # Malagasy + "mh": "Ebon", # Marshall + "mi": "Māori", # Maori + "mk": "Македонски" , # Macedonian + "ml": None, # Malayalam + "mn": "Монгол", # Mongolian + "mo": "Молдовеняскэ", # Moldavian + "mr": "मराठी" , # Marathi + "ms": "Bahasa Melay" , # Malay + "mt": "Malti", # Maltese "mus": "Muskogee", - "my": "မ္ရန္မာစာ", # Burmese + "my": "မ္ရန္မာစာ", # Burmese "myv": "Эрзянь (Erzjanj Kelj)", @@ -550,28 +559,28 @@ class WikiMarkup (BaseWikiMarkup): - "na": "dorerin Naoero", # Nauru + "na": "dorerin Naoero", # Nauru "nah": "Nāhuatl", "nap": "Nnapulitano", - "nb": "Norsk (Bokmål)", # Norwegian Bokm@aa{}l - "nd": None,# Ndebele, North + "nb": "Norsk (Bokmål)", # Norwegian Bokm@aa{}l + "nd": None, # Ndebele, North "nds": "Plattdüütsch", "nds-nl": "Nedersaksisch", - "ne": "नेपाली", # Nepali + "ne": "नेपाली", # Nepali "new": "नेपाल भाषा" , # Nepal Bhasa - "ng": "Oshiwambo", # Ndonga - "nl": "Nederlands" , # Dutch - "nn": "Nynorsk", # Norwegian Nynorsk + "ng": "Oshiwambo", # Ndonga + "nl": "Nederlands" , # Dutch + "nn": "Nynorsk", # Norwegian Nynorsk "no": "Norsk (Bokmål)" , # Norwegian "nov": "Novial", - "nr": None, # Ndebele, South + "nr": None, # Ndebele, South "nrm": "Nouormand/Normaund", - "nv": "Diné bizaad", # Navajo - "ny": "Chi-Chewa", # Chichewa; Nyanja + "nv": "Diné bizaad", # Navajo + "ny": "Chi-Chewa", # Chichewa; Nyanja - "oc": "Occitan", # Occitan; Proven@,{c}al - "oj": None, # Ojibwa - "om": "Oromoo", # (Afan) Oromo - "or": "ଓଡ଼ିଆ", # Oriya - "os": "Иронау", # Ossetian; Ossetic + "oc": "Occitan", # Occitan; Proven@,{c}al + "oj": None, # Ojibwa + "om": "Oromoo", # (Afan) Oromo + "or": "ଓଡ଼ିଆ", # Oriya + "os": "Иронау", # Ossetian; Ossetic - "pa": "ਪੰਜਾਬੀ" , # Panjabi; Punjabi + "pa": "ਪੰਜਾਬੀ" , # Panjabi; Punjabi "pag": "Pangasinan", @@ -580,19 +589,19 @@ class WikiMarkup (BaseWikiMarkup): "pdc": "Deitsch", - "pi": "पाऴि", # Pali + "pi": "पाऴि", # Pali "pih": "Norfuk", - "pl": "Polski" , # Polish + "pl": "Polski" , # Polish "pms": "Piemontèis" , - "ps": "پښتو", # Pashto, Pushto - "pt": "Português" , # Portuguese + "ps": "پښتو", # Pashto, Pushto + "pt": "Português" , # Portuguese - "q": "Runa Simi" , # Quechua + "q": "Runa Simi" , # Quechua - "rm": "Rumantsch", # Rhaeto-Romance + "rm": "Rumantsch", # Rhaeto-Romance "rmy": "romani - रोमानी", - "rn": "Kirundi", # Rundi; Kirundi - "ro": "Română" , # Romanian + "rn": "Kirundi", # Rundi; Kirundi + "ro": "Română" , # Romanian "roa-rup": "Armãneashce", "roa-tara": "Tarandíne", - "ru": "Русский" , # Russian - "rw": "Ikinyarwanda", # Kinyarwanda + "ru": "Русский" , # Russian + "rw": "Ikinyarwanda", # Kinyarwanda @@ -600,3 +609,3 @@ class WikiMarkup (BaseWikiMarkup): "sah": "Саха тыла (Saxa Tyla)", - "sc": "Sard", # Sardinian + "sc": "Sardu", # Sardinian "scn": "Sicilian", @@ -604,4 +613,4 @@ class WikiMarkup (BaseWikiMarkup): "sd": "سنڌي، سندھی ، सिन्ध", # Sindhi - "se": "Sámegiella", # Northern Sami - "sg": "Sängö", # Sango; Sangro + "se": "Sámegiella", # Northern Sami + "sg": "Sängö", # Sango; Sangro "sh": "Srpskohrvatski / Српскохрватски" , @@ -609,46 +618,46 @@ class WikiMarkup (BaseWikiMarkup): "simple": "Simple English" , - "sk": "Slovenčina" , # Slovak - "sl": "Slovenščina" , # Slovenian - "sm": "Gagana Samoa", # Samoan - "sn": "chiShona", # Shona - "so": "Soomaaliga", # Somali - "sr": "Српски / Srpski" , # Serbian + "sk": "Slovenčina" , # Slovak + "sl": "Slovenščina" , # Slovenian + "sm": "Gagana Samoa", # Samoan + "sn": "chiShona", # Shona + "so": "Soomaaliga", # Somali + "sr": "Српски / Srpski", # Serbian "srn": "Sranantongo", - "ss": "SiSwati", # Swati; Siswati - "st": "Sesotho", # Sesotho; Sotho, Southern + "ss": "SiSwati", # Swati; Siswati + "st": "Sesotho", # Sesotho; Sotho, Southern "stk": "Seeltersk", - "s": "Basa Sunda", # Sundanese - "sq": "Shqip" , # Albanian + "s": "Basa Sunda", # Sundanese + "sq": "Shqip" , # Albanian "szl": "Ślůnski", - "sv": "Svenska" , # Swedish - "sw": "Kiswahili", # Swahili # Also KE + "sv": "Svenska" , # Swedish + "sw": "Kiswahili", # Swahili - "ta": "தமிழ்" , # Tamil - "te": "తెలుగు" , # Telugu + "ta": "தமிழ்" , # Tamil + "te": "తెలుగు" , # Telugu "tet": "Tetun", - "tg": "Тоҷикӣ", # Tajik - "th": "ไทย" , # Thai - "ti": "ትግርኛ", # Tigrinya + "tg": "Тоҷикӣ", # Tajik + "th": "ไทย" , # Thai + "ti": "ትግርኛ", # Tigrinya "tk": "تركمن / Туркмен", # Turkmen - "tl": "Tagalog" , # Tagalog - "tn": "Setswana", # Tswana; Setswana - "to": "faka Tonga", # Tonga (?) # Also ZW ; MW + "tl": "Tagalog" , # Tagalog + "tn": "Setswana", # Tswana; Setswana + "to": "faka Tonga", # Tonga (?) # Also ZW ; MW "tokipona": "Tokipona", "tpi": "Tok Pisin", - "tr": "Türkçe" , # Turkish - "ts": "Xitsonga", # Tsonga # ZA SZ XW + "tr": "Türkçe" , # Turkish + "ts": "Xitsonga", # Tsonga "tt": "Tatarça / Татарча", # Tatar "tum": "chiTumbuka", - "tw": "Twi", # Twi - "ty": "Reo Mā`ohi", # Tahitian + "tw": "Twi", # Twi + "ty": "Reo Mā`ohi", # Tahitian "udm": "Удмурт кыл", - "ug": "Oyghurque", # Uighur - "uk": "Українська" , # Ukrainian - "ur": "اردو", # Urdu - "uz": "O‘zbek", # Uzbek + "ug": "Oyghurque", # Uighur + "uk": "Українська" , # Ukrainian + "ur": "اردو", # Urdu + "uz": "O‘zbek", # Uzbek - "ve": "Tshivenda", # Venda + "ve": "Tshivenda", # Venda "vec": "Vèneto", - "vi": "Tiếng Việt" , # Vietnamese + "vi": "Tiếng Việt" , # Vietnamese "vls": "West-Vlams", @@ -656,5 +665,5 @@ class WikiMarkup (BaseWikiMarkup): - "wa": "Walon", # Walloon + "wa": "Walon", # Walloon "war": "Winaray", - "wo": "Wolof", # Wolof + "wo": "Wolof", # Wolof "w": "吴语", @@ -662,10 +671,10 @@ class WikiMarkup (BaseWikiMarkup): "xal": "Хальмг", - "xh": "isiXhosa", # Xhosa + "xh": "isiXhosa", # Xhosa - "yi": "ייִדיש", # Yiddish (formerly ji) - "yo": "Yorùbá", # Yoruba + "yi": "ייִדיש", # Yiddish + "yo": "Yorùbá", # Yoruba - "za": "Cuengh", # Zhuang + "za": "Cuengh", # Zhuang "zea": "Zeêuws", - "zh": "中文" , # Chinese + "zh": "中文" , # Chinese "zh-classical": "古文 / 文言文", @@ -673,3 +682,3 @@ class WikiMarkup (BaseWikiMarkup): "zh-yue": "粵語", - "zu": "isiZulu" # Zulu + "zu": "isiZulu" # Zulu } @@ -677,3 +686,3 @@ class WikiMarkup (BaseWikiMarkup): def str_nil(self, tok, env): - return "" + return None @@ -683,6 +692,8 @@ class WikiMarkup (BaseWikiMarkup): def str_seq(self, tok, env): - s = "" + str = "" for t in tok[1:]: - s += self.fmtok(t, env) - return s + s = self.fmtok(t, env) + if s: + str += s + return str @@ -716,2 +727,4 @@ class WikiMarkup (BaseWikiMarkup): return self.str_seq(tok, env) + elif toktype == self.PARA: + return self.str_para(tok, env) |