Pārlūkot izejas kodu

Implement ExternalLinks as tokens and in the builder.

tags/v0.3
Ben Kurtovic pirms 10 gadiem
vecāks
revīzija
8fe8b1fef5
3 mainītis faili ar 25 papildinājumiem un 2 dzēšanām
  1. +1
    -0
      mwparserfromhell/nodes/__init__.py
  2. +20
    -2
      mwparserfromhell/parser/builder.py
  3. +4
    -0
      mwparserfromhell/parser/tokens.py

+ 1
- 0
mwparserfromhell/nodes/__init__.py Parādīt failu

@@ -69,6 +69,7 @@ from . import extras
from .text import Text
from .argument import Argument
from .comment import Comment
from .external_link import ExternalLink
from .heading import Heading
from .html_entity import HTMLEntity
from .tag import Tag


+ 20
- 2
mwparserfromhell/parser/builder.py Parādīt failu

@@ -24,8 +24,8 @@ from __future__ import unicode_literals

from . import tokens
from ..compat import str
from ..nodes import (Argument, Comment, Heading, HTMLEntity, Tag, Template,
Text, Wikilink)
from ..nodes import (Argument, Comment, ExternalLink, Heading, HTMLEntity, Tag,
Template, Text, Wikilink)
from ..nodes.extras import Attribute, Parameter
from ..smart_list import SmartList
from ..wikicode import Wikicode
@@ -234,6 +234,22 @@ class Builder(object):
else:
self._write(self._handle_token(token))

def _handle_external_link(self, token):
"""Handle when an external link is at the head of the tokens."""
brackets, url = token.brackets, None
self._push()
while self._tokens:
token = self._tokens.pop()
if isinstance(token, tokens.ExternalLinkSeparator):
url = self._pop()
self._push()
elif isinstance(token, tokens.ExternalLinkClose):
if url is not None:
return ExternalLink(url, self._pop(), brackets)
return ExternalLink(self._pop(), brackets=brackets)
else:
self._write(self._handle_token(token))

def _handle_token(self, token):
"""Handle a single token."""
if isinstance(token, tokens.Text):
@@ -252,6 +268,8 @@ class Builder(object):
return self._handle_comment()
elif isinstance(token, tokens.TagOpenOpen):
return self._handle_tag(token)
elif isinstance(token, tokens.ExternalLinkOpen):
return self._handle_external_link(token)

def build(self, tokenlist):
"""Build a Wikicode object from a list tokens and return it."""


+ 4
- 0
mwparserfromhell/parser/tokens.py Parādīt failu

@@ -104,4 +104,8 @@ TagCloseSelfclose = make("TagCloseSelfclose") # />
TagOpenClose = make("TagOpenClose") # </
TagCloseClose = make("TagCloseClose") # >

ExternalLinkOpen = make("ExternalLinkOpen") # [
ExternalLinkSeparator = make("ExternalLinkSeparator") #
ExternalLinkClose = make("ExternalLinkClose") # ]

del make

Notiek ielāde…
Atcelt
Saglabāt