def __call__(self, content, arguments=None): iter_content = _Iter(content) self.preprocessor = self.Mediawiki_preprocessor() body = self.parse_block(iter_content, arguments) root = moin_page.page(children=(body, )) return root
def block_table_repl(self, iter_content, stack, table, table_args=''): stack.clear() # TODO: table attributes elem = moin_page.table() stack.push(elem) if table_args: table_args = _TableArguments()(table_args) for key, value in table_args.keyword.iteritems(): attrib = elem.attrib if key in ('class', 'style', 'number-columns-spanned', 'number-rows-spanned'): attrib[moin_page(key)] = value element = moin_page.table_body() stack.push(element) lines = _Iter(self.block_table_lines(iter_content)) element = moin_page.table_row() stack.push(element) preprocessor_status = [] for line in lines: m = self.tablerow_re.match(line) if not m: return if m.group('newrow'): stack.pop_name('table-row') element = moin_page.table_row() stack.push(element) cells = m.group('cells') if cells: cells = cells.split('||') for cell in cells: if stack.top_check('table-cell'): stack.pop() cell = re.split(r'\s*\|\s*', cell) element = moin_page.table_cell() if len(cell) > 1: cell_args = _TableArguments()(cell[0]) for key, value in cell_args.keyword.iteritems(): attrib = element.attrib if key in ('class', 'style', 'number-columns-spanned', 'number-rows-spanned'): attrib[moin_page(key)] = value cell = cell[1] else: cell = cell[0] stack.push(element) self.preprocessor.push() self.parse_inline(cell, stack, self.inline_re) preprocessor_status = self.preprocessor.pop() elif m.group('text'): self.preprocessor.push(preprocessor_status) self.parse_inline('\n%s' % m.group('text'), stack, self.inline_re) preprocessor_status = self.preprocessor.pop() stack.pop_name('table')
def __call__(self, data, contenttype=None, arguments=None): text = decode_data(data, contenttype) content = normalize_split_text(text) iter_content = _Iter(content) self.preprocessor = self.Mediawiki_preprocessor() body = self.parse_block(iter_content, arguments) root = moin_page.page(children=(body,)) return root
def block_table_repl(self, iter_content, stack, table, table_args=""): stack.clear() # TODO: table attributes elem = moin_page.table() stack.push(elem) if table_args: table_args = _TableArguments()(table_args) for key, value in table_args.keyword.iteritems(): attrib = elem.attrib if key in ("class", "style", "number-columns-spanned", "number-rows-spanned"): attrib[moin_page(key)] = value element = moin_page.table_body() stack.push(element) lines = _Iter(self.block_table_lines(iter_content)) element = moin_page.table_row() stack.push(element) preprocessor_status = [] for line in lines: m = self.tablerow_re.match(line) if not m: return if m.group("newrow"): stack.pop_name("table-row") element = moin_page.table_row() stack.push(element) cells = m.group("cells") if cells: cells = cells.split("||") for cell in cells: if stack.top_check("table-cell"): stack.pop() cell = re.split(r"\s*\|\s*", cell) element = moin_page.table_cell() if len(cell) > 1: cell_args = _TableArguments()(cell[0]) for key, value in cell_args.keyword.iteritems(): attrib = element.attrib if key in ("class", "style", "number-columns-spanned", "number-rows-spanned"): attrib[moin_page(key)] = value cell = cell[1] else: cell = cell[0] stack.push(element) self.preprocessor.push() self.parse_inline(cell, stack, self.inline_re) preprocessor_status = self.preprocessor.pop() elif m.group("text"): self.preprocessor.push(preprocessor_status) self.parse_inline("\n{0}".format(m.group("text")), stack, self.inline_re) preprocessor_status = self.preprocessor.pop() stack.pop_name("table")
def indent_repl(self, iter_content, stack, line, indent, text, list_begin=None, list_definition=None, list_definition_text=None, list_numbers=None, list_bullet=None, list_none=None): level = len(indent) list_type = 'unordered', 'none' if list_begin: if list_definition: list_type = 'definition', None elif list_numbers: list_type = 'ordered', None elif list_bullet: list_type = 'unordered', None elif list_none: list_type = None, None element_use = None while len(stack) > 1: cur = stack.top() if cur.tag.name == 'list-item-body': if level > cur.level: element_use = cur break if cur.tag.name == 'list': if level >= cur.level and list_type == cur.list_type: element_use = cur break stack.pop() if not element_use: element_use = stack.top() if list_begin: if element_use.tag.name != 'list': attrib = {} if not list_definition: attrib[moin_page.item_label_generate] = list_type[0] if list_type[1]: attrib[moin_page.list_style_type] = list_type[1] element = moin_page.list(attrib=attrib) element.level, element.list_type = level, list_type stack.push(element) stack.push(moin_page.list_item()) if list_definition: element_label = moin_page.list_item_label() stack.top_append(element_label) new_stack = _Stack(element_label) # TODO: definition list doesn't work, # if definition of the term on the next line splited_text = text.split(':') list_definition_text = splited_text.pop(0) text = ':'.join(splited_text) self.parse_inline(list_definition_text, new_stack, self.inline_re) element_body = moin_page.list_item_body() element_body.level, element_body.type = level, type stack.push(element_body) new_stack = _Stack(element_body) else: new_stack = stack level = 0 is_list = list_begin iter = _Iter(self.indent_iter(iter_content, text, level, is_list)) for line in iter: match = self.block_re.match(line) it = iter # XXX: Hack to allow nowiki to ignore the list identation if match.lastgroup == 'table' or match.lastgroup == 'nowiki': it = iter_content self._apply(match, 'block', it, new_stack)
def indent_repl( self, iter_content, stack, line, indent, text, list_begin=None, list_definition=None, list_definition_text=None, list_numbers=None, list_bullet=None, list_none=None, ): level = len(indent) list_type = "unordered", "none" if list_begin: if list_definition: list_type = "definition", None elif list_numbers: list_type = "ordered", None elif list_bullet: list_type = "unordered", None elif list_none: list_type = None, None element_use = None while len(stack) > 1: cur = stack.top() if cur.tag.name == "list-item-body": if level > cur.level: element_use = cur break if cur.tag.name == "list": if level >= cur.level and list_type == cur.list_type: element_use = cur break stack.pop() if not element_use: element_use = stack.top() if list_begin: if element_use.tag.name != "list": attrib = {} if not list_definition: attrib[moin_page.item_label_generate] = list_type[0] if list_type[1]: attrib[moin_page.list_style_type] = list_type[1] element = moin_page.list(attrib=attrib) element.level, element.list_type = level, list_type stack.push(element) stack.push(moin_page.list_item()) if list_definition: element_label = moin_page.list_item_label() stack.top_append(element_label) new_stack = _Stack(element_label) # TODO: definition list doesn't work, # if definition of the term on the next line splited_text = text.split(":") list_definition_text = splited_text.pop(0) text = ":".join(splited_text) self.parse_inline(list_definition_text, new_stack, self.inline_re) element_body = moin_page.list_item_body() element_body.level, element_body.type = level, type stack.push(element_body) new_stack = _Stack(element_body) else: new_stack = stack level = 0 is_list = list_begin iter = _Iter(self.indent_iter(iter_content, text, level, is_list)) for line in iter: match = self.block_re.match(line) it = iter # XXX: Hack to allow nowiki to ignore the list identation if match.lastgroup == "table" or match.lastgroup == "nowiki": it = iter_content self._apply(match, "block", it, new_stack)