Example #1
0
    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]
Example #2
0
    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 ''
Example #3
0
    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)
Example #4
0
    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)
Example #5
0
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)
Example #6
0
    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)