def generateSite(self, site, nav=None): site_call = MiduHelper.parseVar(site.group(1)) site_info = site_call['target'] if site_info not in self.site_cached: if nav is None: mdsite = MDSite.MDSite(site_info) else: mdsite = MDSite.MDSite(site_info, nav) self.site_cached[site_info] = mdsite mdsite.generate() return self.site_cached[site_info]
def generatePage(self, page): page_info = MiduHelper.parseVar(page.group(1)) bkpath = self.mdvar.path_backup() self.mdvar._path['pg_tmpl'] = page_info['target'] self.mdvar._path['pg_para'] = page_info['paras'] if self.mdvar._listinfo['in_list'] and \ 'dst' not in page_info['paras']: rel_path = os.path.relpath( self.mdvar._listinfo['list_root'], self.mdvar._path['curdir']) targ_path = rel_path + '/' + page_info['target'] page_info['paras']['dst'] = targ_path if 'suffix' in page_info['paras']: page_info['paras']['dst'] += page_info['paras']['suffix'] self.mdvar.path_changepage(page_info['paras']['dst']) dst_name = self.mdvar._path['curdir'] + '/' +\ self.mdvar._path['curpage'] + '.html' if dst_name in self.page_cached: self.mdvar.path_restore(bkpath) return dst_name MiduHelper.mkdir_p(self.mdvar._path['dst_prefix'] + self.mdvar._path['curdir']) with open(self.mdvar._path['dst_prefix'] + dst_name, 'w') as f_w: lines = self.loaded['page'].get(page_info['target']) self.page_cached[dst_name] = dst_name new_lines = self.replace(lines) f_w.write(new_lines) self.mdvar.path_restore(bkpath) return dst_name self.mdvar.path_restore(bkpath) return ''
def process_callsite(self, call_site, external=False, args=None): call_info = MiduHelper.parseVar(call_site) file_info = os.path.split(call_info['target']) fun_info = call_info['paras'] fname = file_info[1] fun_name = fun_info['name'] if not external: para_list = [self] else: para_list = [] if 'arguments' in fun_info: para_list.extend(list(fun_info['arguments'].split(','))) elif args is not None: para_list.extend(args) target_module = self.loaded['code'].get(fname) func = getattr(target_module, fun_name) return func(*para_list)
def __init__(self, section, nav=None): mdconfig_src = MDConfig.MDConfig('source/' + section) try: template = mdconfig_src._default['template'] except KeyError: print "template not found in " + section + "! Skipped..." return mdconfig_template = MDConfig.MDConfig('lib/template/' + template) mdconfig = mdconfig_template.merge(mdconfig_src) mdconfig.addSection(section) if nav is not None: mdconfig.addNav(nav) if 'generator' in mdconfig._global: generator_name = mdconfig._global['generator'] self.generator = \ MiduHelper.fun_call('lib/template/' + template + '/code', generator_name, generator_name, [mdconfig]) else: self.generator = MDGenerator.MDGenerator(mdconfig)
def generate_cover(generator): if 'pages' not in generator.mdvar._global: return pages = generator.mdvar._global['pages'].split(',') page_cached = {} entries = {} for page in pages: call = MiduHelper.parseVar(page) entry = get_page_Entry(generator, generator.mdvar._path['src_prefix'] + call['paras']['src'], call['target']) entries[page] = entry generator.mdvar._listinfo['in_list'] = True local_bk = generator.mdvar.local_backup() entry.processContext() generator.mdvar.update_local(entry.get_mdlocal()) page_cached[call['paras']['dst']] = entry.meta['title'] generator.mdvar.local_restore(local_bk) page_cached_all = copy.deepcopy(page_cached) page_cached_all['home'] = None for cur in page_cached_all: lines = [] for dst in page_cached: if cur == dst: lines.append('<li class="nav-item">' + '<a class="pure-button ' + ' pure-button-disabled">' + page_cached[dst] + '</a></li>') else: lines.append('<li class="nav-item">' + '<a class="pure-button" ' + 'href="' + dst + '.html' + '">' + page_cached[dst] + '</a></li>') if cur is 'home': generator.loaded['snippet'].templates['cover'] =\ COVER.replace('to_be_replace','\n'.join(lines)) else: generator.loaded['snippet'].templates[cur + '_cover'] =\ COVER.replace('to_be_replace','\n'.join(lines)) for page in pages: call = MiduHelper.parseVar(page) entry = entries[page] generator.mdvar._listinfo['in_list'] = True local_bk = generator.mdvar.local_backup() entry.processContext() generator.mdvar.update_local(entry.get_mdlocal()) generator.generatePage(re.match('(.*)', page)) generator.mdvar.local_restore(local_bk)
def generateList(self, lst): listcall = MiduHelper.parseVar(lst.group(1)) if 'dst' not in listcall['paras']: print "list " + lst.group(1) + "incompleted! Skipped.." return snippet = re.match('(.*)', listcall['target']) folder = listcall['paras']['dst'] lst_dir = self.mdvar._path['src_prefix'] + folder self.find_entry(lst_dir) entries = self.entry_cached[lst_dir][0] file_num_map = self.entry_cached[lst_dir][1] entries_filtered = self.filter_entries(entries, listcall) total_cnt = len(entries_filtered) list_lines = [] listinfo_bk = self.mdvar.listinfo_backup() if 'slices' in listcall['paras']: if int(self.mdvar._listinfo['cnt']) == 0: self.mdvar._listinfo['page_total_cnt'] =\ listcall['paras']['slices'] pages = [self.mdvar._path['curpage'] + '.html'] total_pages = math.ceil(total_cnt*1.0 / int(listcall['paras']['slices'])) + 1 for i in range(2, int(total_pages + 1)): pages.append(self.mdvar._path['curpage'] + '_' + str(i) + '.html') self.mdvar._listinfo['subpage_list'] = pages else: self.mdvar._listinfo['cnt'] = 0 self.mdvar._listinfo['page_total_cnt'] = total_cnt cnt = int(self.mdvar._listinfo['cnt']) for slice_num in range(int(self.mdvar._listinfo['page_total_cnt'])): cnt += 1 self.mdvar._listinfo['cnt'] = str(cnt) if cnt > total_cnt: self.mdvar._listinfo['cnt'] == '0' self.mdvar._listinfo['subpage_list'] = [] break cur_index = entries_filtered.keys()[cnt-1] entry = entries_filtered[cur_index] self.mdvar._listinfo['list_map'] = file_num_map self.mdvar._listinfo['list_root'] = folder self.mdvar._listinfo['num'] = str(cur_index) self.mdvar._listinfo['page_cnt'] = str(slice_num + 1) self.mdvar._listinfo['cnt'] = str(cnt) self.mdvar._listinfo['total_cnt'] = str(total_cnt) self.mdvar._listinfo['prev_entry'] = \ MiduHelper.od_prev_entry_meta(entries, cur_index) self.mdvar._listinfo['next_entry'] = \ MiduHelper.od_next_entry_meta(entries, cur_index) self.mdvar._listinfo['in_list'] = True local_bk = self.mdvar.local_backup() entry.processContext() self.mdvar.update_local(entry.get_mdlocal()) list_lines.append(self.generateSnippet(snippet)) self.mdvar.local_restore(local_bk) if cnt < total_cnt: idx = self.mdvar._listinfo['subpage_list'].index( self.mdvar._path['curpage'] + '.html') + 1 new_page_name = self.mdvar._listinfo['subpage_list'][idx] new_para_dict = copy.deepcopy(self.mdvar._path['pg_para']) new_para_dict.update({'dst': new_page_name.replace('.html', ''), 'suffix': ''}) new_page_para = MiduHelper.generate_parameter(new_para_dict) matchobj = re.match('(.*)', self.mdvar._path['pg_tmpl'] + new_page_para) self.generatePage(matchobj) self.mdvar.listinfo_restore(listinfo_bk) return '\n'.join(list_lines)