diff --git a/texla.py b/texla.py index d88daf6..446fc78 100644 --- a/texla.py +++ b/texla.py @@ -1,61 +1,64 @@ import logging import sys import json import log import yaml from texla.Parser import Parser from texla.Renderers.MediaWikiRenderer import MediaWikiRenderer import texla.PageTree.Exporter as exporter def execute_texla_mediawiki(config): logging.info('######## STARTING PARSING ########') p = Parser(config) a = open(config['input_path'], 'r').read() tree = p.parse(a) f = open(config['output_path'] + '.tree', 'w') json_tree = tree.to_json(0) n_blocks = tree.n_blocks() logging.info('PARSED %i Blocks', n_blocks) f.write(json_tree) logging.info('######## STARTING RENDERING ########') #rendering rend = MediaWikiRenderer(config) rend.start_rendering(tree) o = open(config['output_path'] + '.json', 'w') o.write(json.dumps(rend.tree.get_tree_json(), indent=3)) p = open(config['output_path'] + '.debug', 'w') p.write(json.dumps(rend.used_tags, indent=2)) #print page tree before POST-PROCESSING logging.info('PageTree:\n'+rend.tree.get_tree_debug()) #collpasing logging.info('######## STARTING POST-PROCESSING ########') tree = rend.tree tree.collapse_tree(config['collapse_content_level'], config['collapse_pages_level']) #printing tree after POST-PROCESSING logging.info('PageTree:\n'+rend.tree.get_tree_debug()) oc = open(config['output_path'] + '-coll.json', 'w') oc.write(json.dumps(rend.tree.get_tree_json(), indent=3)) logging.info('######## STARTING EXPORTING ########') if config['create_index']: tree.create_indexes() - exporter.exportPages(tree.pages, config['output_path'] + '.mw', config['export_format']) if config['export_single_pages']: exporter.export_singlePages(tree.pages, config['output_path'] + '_pages', config['export_format']) + if config['export_pages_tree']: + exporter.export_pages_tree(tree.pages.values(), + config['output_path'] + "_pages") + logging.info('Finished') if __name__ == '__main__': #reading JSON configs config = yaml.load(open('configs.yaml','r')) #loading localized keywords config['keywords'] = yaml.load(open('i18n.yaml','r'))[config['lang']] #executing process for alla renderers if config['renderer'] == 'mediawiki': execute_texla_mediawiki(config) diff --git a/texla/PageTree/Exporter.py b/texla/PageTree/Exporter.py index d69e603..f84e559 100644 --- a/texla/PageTree/Exporter.py +++ b/texla/PageTree/Exporter.py @@ -1,53 +1,67 @@ from .Page import * import os +import logging def exportPages(pages, path, format): #choosing format f = open(path, 'w') if format == 'text': f.write(exportText(pages)) f.close() def export_singlePages(pages, base_path, format): '''Entry point to export pages in separated files.''' if not os.path.exists(base_path): os.makedirs(base_path) if format == 'text': exportText_single_pages(pages, base_path) def exportText(pages): '''Functions that exports all the pages in our file with format usable with pagefromfile.py script''' output = [] for page in pages.values(): if not page.collapsed: if page.text != "": output.append('##########') output.append('\'\'\'' + page.url + '\'\'\'') output.append(page.text) output.append('@@@@@@@@@@') return '\n'.join(output) def exportText_single_pages(pages, base_path=''): '''Function that exports the text of pages in separated files''' pf = open(base_path + '/pages.txt', 'w') for page in pages.values(): pf.write('# [[' + page.url + ']]\n') if not page.collapsed: #we don't export void pages if page.text != "": text = [] text.append('##########') text.append('\'\'\'' + page.url + '\'\'\'') text.append(page.text) text.append('@@@@@@@@@@') path = base_path + '/' + page.title + ".txt" path = path.encode('utf-8') f = open(path, 'w') f.write('\n'.join(text)) f.close() pf.close() + +def export_pages_tree(pages, base_path=''): + ''' + This function exports the pages in a tree of directory + corresponding to the tree of pages. + ''' + for p in pages: + if not p.collapsed: + current_path = base_path + "/" + p.url[:p.url.rfind("/")] + logging.info(current_path) + os.makedirs(current_path, exist_ok=True) + with open(base_path + "/" + p.url + ".mw",'w') as f: + f.write(p.text)