示例#1
0
class OptionalGroup(modgrammar.Grammar):
    grammar_whitespace_mode = 'explicit'
    grammar = (modgrammar.L('['), modgrammar.OPTIONAL(modgrammar.WHITESPACE),
               modgrammar.REF("RuleExpansion", module=sys.modules[__name__]),
               modgrammar.OPTIONAL(modgrammar.WHITESPACE), modgrammar.L(']'))

    def grammar_elem_init(self, session_data):
        self.model = model.OptionalGroup(self[2].model)
示例#2
0
class Italic(modgrammar.Grammar):
    """Defines the grammar for italic text."""
    grammar = (modgrammar.L("*"),
               modgrammar.WORD("^*" + modgrammar.util.EOL_CHARS,
                               fullmatch=True), modgrammar.L("*"))

    def grammar_elem_init(self, sessiondata):
        """Saves the text for later use."""
        self.text = self[1].string
        self.tag = "i"
示例#3
0
class InlineCode(modgrammar.Grammar):
    """Defines the grammar for inline code segments."""
    grammar = (modgrammar.L("`"),
               modgrammar.WORD("^`" + modgrammar.util.EOL_CHARS,
                               fullmatch=True), modgrammar.L("`"))

    def grammar_elem_init(self, sessiondata):
        """Saves the text for later use."""
        self.text = html.escape(self[1].string)
        self.tag = "code"
示例#4
0
class Heading(modgrammar.Grammar):
    """Defines the grammar for a heading."""
    grammar = (modgrammar.BOL,
               modgrammar.REPEAT(modgrammar.L("#"), min=1, max=6),
               modgrammar.L(" "), modgrammar.REST_OF_LINE, modgrammar.EOL)

    def grammar_elem_init(self, sessiondata):
        """Saves the headline for later use."""
        self.text = self[3].string
        hashtags = self[1].string
        self.tag = "h" + str(len(hashtags))
示例#5
0
class UnorderedListItem(modgrammar.Grammar):
    """Defines the grammar for an unordered list item."""
    grammar = (modgrammar.BOL,
               modgrammar.OR(modgrammar.L("* "), modgrammar.L("- "),
                             modgrammar.L("+ ")),
               modgrammar.REPEAT(modgrammar.OR(Bold, Italic, InlineCode, Link,
                                               AutomaticLink, SimpleText),
                                 collapse=True))

    def grammar_elem_init(self, sessiondata):
        """Saves the text for later use."""
        self.tag = "li"
示例#6
0
class AutomaticLink(modgrammar.Grammar):
    """Defines the grammar for an automatic link."""
    grammar = (modgrammar.L("<"),
               modgrammar.WORD(startchars="^[>\s`*",
                               escapes=True,
                               fullmatch=True), modgrammar.L(">"))

    def grammar_elem_init(self, sessiondata):
        """Saves the text for later use."""
        self.text = self[1].string
        self.attributes = {"href": self[1].string}
        self.tag = "a"
示例#7
0
class RuleReference(modgrammar.Grammar):
    grammar_whitespace_mode = 'explicit'
    grammar = (modgrammar.L('<'),
               modgrammar.OPTIONAL(Package, modgrammar.L('.')),
               JavaIdentifier,
               modgrammar.L('>'))

    def grammar_elem_init(self, session_data):
        if self[1] is not None:
            value = self[1].string + self[2].string
        else:
            value = self[2].string

        self.model = model.RuleReference(value)
示例#8
0
class QuoteLine(modgrammar.Grammar):
    """Defines the grammar for a single line quote."""
    grammar = (modgrammar.BOL, modgrammar.L(">"),
               modgrammar.REPEAT(modgrammar.OR(Bold, Italic, InlineCode, Link,
                                               AutomaticLink, SimpleText),
                                 collapse=True), modgrammar.EOL)

    grammar_collapse = False
示例#9
0
class Link(modgrammar.Grammar):
    """Defines the grammar for a link."""
    grammar = (modgrammar.L("["),
               modgrammar.WORD(startchars="^]`*" + modgrammar.util.EOL_CHARS,
                               fullmatch=True), modgrammar.L("]("),
               modgrammar.WORD(startchars="^\s)", escapes=True,
                               fullmatch=True),
               modgrammar.OPTIONAL(modgrammar.L(' "'), LinkTitle,
                                   modgrammar.L('"')), modgrammar.L(")"))

    def grammar_elem_init(self, sessiondata):
        """Saves the text for later use."""
        self.text = self[1].string
        self.attributes = {"href": self[3].string}
        link_title = self.find(LinkTitle)
        if link_title is not None:
            self.attributes["title"] = link_title.text
        self.tag = "a"
示例#10
0
class CodeBlock(modgrammar.Grammar):
    """Defines the grammar for a code block."""
    grammar = (modgrammar.REPEAT(modgrammar.BOL,
                                 modgrammar.L("    ") | modgrammar.L("\t"),
                                 modgrammar.REST_OF_LINE,
                                 modgrammar.EOL,
                                 collapse=True))

    def grammar_elem_init(self, sessiondata):
        """Saves the text for later use."""
        self.tag = "code"
        text = ""
        for elem in self.find_all(modgrammar.REST_OF_LINE):
            if text != "":
                text += "\n"
            text += html.escape(elem.string)
        self.text = text
        self.options = {"indentation": False}
示例#11
0
class Edition(mg.Grammar):
    '''Parse an edition comment.'''
    grammar = (mg.OPTIONAL(WhiteSpace),
               mg.OR(Digit, TwoDigit),
               mg.OR(mg.L('nd'), mg.L('rd'), mg.L('st'), mg.L('th')),
               mg.OPTIONAL(mg.OR(mg.L('facsimile'), mg.L('revised'))), mg.L('edition'),
               mg.L(';'))

    def grammar_elem_init(self, sessiondata):
        '''initialize the element.'''
        self.edition_num = self[1].string
示例#12
0
class UnaryOperator(modgrammar.Grammar):
    grammar_whitespace_mode = 'explicit'
    grammar = (modgrammar.OPTIONAL(modgrammar.WHITESPACE),
               modgrammar.L('*') |
               modgrammar.L('+') |
               modgrammar.LIST_OF(Tag, sep=" ", min=1))

    def grammar_elem_init(self, session_data):
        self.is_kleene_star = False
        self.is_plus = False
        self.tags = []

        if self[1].string == '*':
            self.is_kleene_star = True
        elif self[1].string == '+':
            self.is_plus = True
        else:
            for i in range(0, len(self[1].elements), 2):
                self.tags.append(self[1][i].model)
示例#13
0
class Tag(modgrammar.Grammar):
    grammar_whitespace_mode = 'explicit'
    grammar = (modgrammar.L('{'), modgrammar.ZERO_OR_MORE(modgrammar.ANY_EXCEPT('^}')), modgrammar.L('}'))

    def grammar_elem_init(self, session_data):
        self.model = model.Tag(name=self[1].string)
示例#14
0
class Compilers(mg.Grammar):
    '''Parse a compilers comment.'''
    grammar = (mg.OPTIONAL(WhiteSpace),
               mg.L('compiled by'), NameList,
               mg.L(';'))
示例#15
0
class Other(mg.Grammar):
    '''Parse an 'other' commment.'''
    grammar = (mg.OPTIONAL(WhiteSpace),
               mg.L('other'), Words,
               mg.L(';'))
示例#16
0
class AJBNum(mg.Grammar):
    '''Parse an AJB number.'''
    grammar = (mg.L('AJB'), Volume, '.', Section, '.', Item)
示例#17
0
class Name(mg.Grammar):
    '''Parse a name from a comment.'''
    # accept hypenated first initial and hyphenated last name
    grammar = (mg.OPTIONAL(Initial, mg.OPTIONAL(mg.L('-'), Initial)),
               mg.OPTIONAL(mg.REPEAT(Initial, mg.OPTIONAL(mg.L('-'), Initial))),
               Words)
示例#18
0
class Language(mg.Grammar):
    '''Parse a language comment'''
    grammar = (mg.OPTIONAL(WhiteSpace),
               mg.L('in'), LanguageList,
               mg.OPTIONAL(mg.L('with'), Words, mg.L('references')),
               mg.L(';'))
示例#19
0
class Reprint(mg.Grammar):
    '''Parse a reprint comment.'''
    grammar = (mg.OPTIONAL(WhiteSpace),
               mg.L('reprint of'), mg.OR(AJBNum, Year),
               mg.L(';'))
示例#20
0
class Reference(mg.Grammar):
    '''Parse a reference comment.'''
    grammar = (mg.OPTIONAL(WhiteSpace),
               mg.L('reference'), AJBNum,
               mg.L(';'))
示例#21
0
class FromLanguage(mg.Grammar):
    '''Parse a from language comment.'''
    grammar = (mg.L('from'), Word)
示例#22
0
class ToLanguage(mg.Grammar):
    '''Parse a to language comment.'''
    grammar = (mg.L('into'), Word)
示例#23
0
class Publisher(mg.Grammar):
    '''Parse a publisher comment of the form City: Name'''
    grammar = (Words, mg.L(':'), Words)
示例#24
0
class AlternativeWeight(modgrammar.Grammar):
    grammar_whitespace_mode = 'explicit'
    grammar = (modgrammar.L("/"), modgrammar.WORD("0-9.", "0-9.ef"), modgrammar.LITERAL("/"), modgrammar.WHITESPACE)

    def grammar_elem_init(self, session_data):
        self.value = self[1].string
示例#25
0
class Publishers(mg.Grammar):
    '''Parse a publisher comment.'''
    grammar = (mg.OPTIONAL(WhiteSpace),
               mg.L('also published'), PublisherList,
               mg.L(';'))
示例#26
0
class Translation(mg.Grammar):
    '''Parse a translation comment.'''
    grammar = (mg.OPTIONAL(WhiteSpace),
               mg.L('translated'), mg.OPTIONAL(FromLanguage),
               mg.OPTIONAL(ToLanguage), mg.OPTIONAL(mg.L('by'), NameList),
               mg.L(';'))
示例#27
0
class Contributors(mg.Grammar):
    '''Parse a contributors comment.'''
    grammar = (mg.OPTIONAL(WhiteSpace),
               mg.L('contributors'), NameList,
               mg.L(';'))
示例#28
0
class MetaCharacter(modgrammar.Grammar):
    grammar_whitespace_mode = 'explicit'
    grammar = (modgrammar.OR(modgrammar.L(';'), modgrammar.L('='), modgrammar.L('|'), modgrammar.L('*'),
                             modgrammar.L('+'), modgrammar.L('<'), modgrammar.L('>'), modgrammar.L('('),
                             modgrammar.L(')'), modgrammar.L('['), modgrammar.L(']'), modgrammar.L('{'),
                             modgrammar.L('}'), modgrammar.L('/*'), modgrammar.L('*/'), modgrammar.L('//'),
                             modgrammar.L(" "), modgrammar.L('"')))
示例#29
0
class Editors(mg.Grammar):
    '''Parse an editors comment.'''
    grammar = (mg.OPTIONAL(WhiteSpace),
               mg.L('edited by'), NameList,
               mg.L(';'))