def compile(self, source, dest, is_two_file=True, post=None, lang=None): """Compile the source file into HTML and save as dest.""" makedirs(os.path.dirname(dest)) if mw is None: req_missing(['smc.mw'], 'build this site (compile with MediaWiki)', python=True) with io.open(dest, "w+", encoding="utf8") as out_file: with io.open(source, "r", encoding="utf8") as in_file: data = in_file.read() if not is_two_file: data = re.split('(\n\n|\r\n\r\n)', data, maxsplit=1)[-1] parser = mw.Parser(parseinfo=False, whitespace='', nameguard=False) ast = parser.parse(data, 'document', semantics=mw.Semantics(parser)) output = etree.tostring(ast, encoding='utf8').decode('utf8') output, shortcode_deps = self.site.apply_shortcodes( output, filename=source, with_dependencies=True, extra_context=dict(post=post)) out_file.write(output) if post is None: if shortcode_deps: self.logger.error( "Cannot save dependencies for post {0} (post unknown)", source) else: post._depfile[dest] += shortcode_deps
def compile_string(self, data, source_path=None, is_two_file=True, post=None, lang=None): """Compile the source file into HTML strings (with shortcode support). Returns a tuple of at least two elements: HTML string [0] and shortcode dependencies [last]. """ if mw is None: req_missing(['smc.mw'], 'build this site (compile with MediaWiki)', python=True) if not is_two_file: _, data = self.split_metadata(data, post, lang) new_data, shortcodes = sc.extract_shortcodes(data) parser = mw.Parser(parseinfo=False, whitespace='', nameguard=False) ast = parser.parse(new_data, 'document', semantics=mw.Semantics(parser)) output = etree.tostring(ast, encoding='utf8').decode('utf8') output, shortcode_deps = self.site.apply_shortcodes_uuid( output, shortcodes, filename=source_path, extra_context={'post': post}) return output, shortcode_deps
def run_parser(text, filename=None, start=None, profile_data=None, trace=False, headings=None): if start is None: start = "document" parser = mw.Parser(parseinfo=False, whitespace='', nameguard=False) ast = parser.parse(text, start, filename=filename, semantics=mw.Semantics(parser, headings=headings), trace=trace, nameguard=False, whitespace='') if sys.version < '3': text = etree.tostring(ast) else: text = etree.tostring(ast, encoding=str) return text
def compile_html(self, source, dest, is_two_file=True): makedirs(os.path.dirname(dest)) if mw is None: req_missing(['smc.mw'], 'build this site (compile with MediaWiki)', python=True) with io.open(dest, "w+", encoding="utf8") as out_file: with io.open(source, "r", encoding="utf8") as in_file: data = in_file.read() if not is_two_file: data = re.split('(\n\n|\r\n\r\n)', data, maxsplit=1)[-1] parser = mw.Parser(parseinfo=False, whitespace='', nameguard=False) ast = parser.parse(data, 'document', semantics=mw.Semantics(parser)) output = etree.tostring(ast, encoding='utf8').decode('utf8') out_file.write(output)