Ejemplo n.º 1
0
    def _resolve_placeholder(self, tree, name, include_paths):
        self.__find_package_root()

        if name == '%s-index' % self.argument_prefix:
            if self.index:
                path = find_file(self.index, include_paths)
                if path is None:
                    self.error("invalid-config",
                               "Could not find index file %s" % self.index)
                return PageResolutionResult(True, path, None,
                                            self.extension_name)
            return PageResolutionResult(True, None, None, self.extension_name)

        if self.smart_index:
            for path in OrderedSet([self.__package_root]) | self.source_roots:
                possible_path = os.path.join(path, name)
                if possible_path in self._get_all_sources():
                    override_path = find_file('%s.markdown' % name,
                                              include_paths)

                    if override_path:
                        return PageResolutionResult(True, override_path, None,
                                                    None)

                    return PageResolutionResult(
                        True, None, self.__get_rel_source_path(possible_path),
                        None)

        return None
Ejemplo n.º 2
0
    def _resolve_placeholder(self, tree, name, include_paths):
        self.__find_package_root()

        override_path = os.path.join(self.__package_root, name)
        if name == '%s-index' % self.argument_prefix:
            if self.index:
                path = find_file(self.index, include_paths)
                if path is None:
                    self.error("invalid-config",
                               "Could not find index file %s" % self.index)
                return path, self.extension_name
            return True, self.extension_name
        elif self.smart_index and override_path in self._get_all_sources():
            path = find_file('%s.markdown' % name, include_paths)
            return path or True, None
        return None
Ejemplo n.º 3
0
    def _resolve_placeholder(self, tree, name, include_paths):
        ext = os.path.splitext(name)[1]
        if ext != '.json':
            return None

        conf_path = inclusions.find_file(name, include_paths)
        if not conf_path:
            error(
                'invalid-config',
                '(%s) Could not find subproject config file %s' %
                (self.project.sanitized_name, name))

        self.project.add_subproject(name, conf_path)
        return PageResolutionResult(True, None, None, None)
Ejemplo n.º 4
0
    def __list_override_pages_cb(self, tree, include_paths):
        if not self.smart_index:
            return None

        self.__find_package_root()
        for source in self._get_all_sources():
            source_rel = self.__get_rel_source_path(source)

            for ext in ['.md', '.markdown']:
                override = find_file(source_rel + ext, include_paths)
                if override:
                    self.__overriden_pages.append(
                        OverridePage(source_rel, override))
                    break

        return self.__overriden_pages
Ejemplo n.º 5
0
    def build(self, sitemap, extensions):
        ext_level = -1
        extensions = {ext.argument_prefix: ext for ext in extensions.values()}
        ext_pages = {}
        ext_index = None
        extension = None
        ext_name = 'core'

        sitemap_pages = sitemap.get_all_sources()
        self.__all_pages = {}

        for name, level in sitemap:
            page = None

            if level <= ext_level:
                self.add_unordered_subpages(extension, ext_index, ext_pages)
                extension = None
                ext_level = -1
                ext_pages = {}
                ext_index = None
                ext_name = 'core'

            if extension:
                smart_key = extension.get_possible_path(name)
            else:
                smart_key = None

            if name.endswith('-index'):
                ext_name = name[:-6]
                extension = extensions.get(ext_name)
                if extension is None:
                    position = sitemap.get_position(name)
                    error(
                        'index-extension-not-found',
                        'No extension named %s for index page' % ext_name,
                        filename=sitemap.source_file,
                        lineno=position[0],
                        column=position[1])
                    continue
                ext_level = level
                ext_pages = extension.make_pages()
                page = ext_pages['%s-index' % ext_name]
                del ext_pages['%s-index' % ext_name]
                ext_index = page
            elif name in ext_pages:
                page = ext_pages[name]
                del ext_pages[name]
            elif smart_key in ext_pages:
                page = ext_pages[smart_key]
                del ext_pages[smart_key]
            else:
                source_file = find_file(name, self.project.include_paths)
                if source_file is None:
                    position = sitemap.get_position(name)
                    error(
                        'page-not-found',
                        'No markdown file found for %s' % name,
                        filename=sitemap.source_file,
                        lineno=position[0],
                        column=position[1])

                ext = os.path.splitext(name)[1]
                if ext == '.json':
                    self.project.add_subproject(name, source_file)
                    page = Page(
                        name, True, self.project.sanitized_name, 'core')
                else:
                    page = self.parse_page(source_file, ext_name)
                    page.extension_name = extension.extension_name if extension else 'core'

            self.__all_pages[name] = page
            subpages = sitemap_pages.get(name, [])
            page.subpages = OrderedSet(subpages) | page.subpages
            if not page.meta.get('auto-sort', False):
                page.pre_sorted = True

        if ext_index:
            self.add_unordered_subpages(extension, ext_index, ext_pages)

        self.root = self.__all_pages[sitemap.index_file]
Ejemplo n.º 6
0
 def test_missing_relpath(self):
     self.assertEqual(find_file('yep.md', [self._md_dir]), None)
Ejemplo n.º 7
0
 def test_relpath(self):
     path = self._create_md_file('yep.md', 'stuff')
     self.assertEqual(find_file('yep.md', [self._md_dir]), path)
Ejemplo n.º 8
0
 def test_abspath(self):
     path = self._create_md_file('yep.md', 'stuff')
     self.assertEqual(find_file(path, []), path)
Ejemplo n.º 9
0
 def test_missing_abspath(self):
     self.assertEqual(find_file('/nope.md', []), None)
Ejemplo n.º 10
0
    def __parse_pages(self, sitemap):
        change_tracker = self.app.change_tracker
        source_files = []
        source_map = {}
        placeholders = []

        overrides = self.list_override_pages_signal(
            self, self.project.include_paths) or []

        for override in overrides:
            source_files.append(override.file)
            source_map[override.file] = override.source_file

        for i, fname in enumerate(sitemap.get_all_sources().keys()):
            resolved = self.resolve_placeholder_signal(
                self, fname, self.project.include_paths)
            if resolved is None:
                source_file = find_file(fname, self.project.include_paths)
                source_files.append(source_file)
                if source_file is None:
                    error('no-such-subpage',
                          'No markdown file found for %s' % fname,
                          filename=sitemap.source_file,
                          lineno=i,
                          column=0)
                source_map[source_file] = fname
            else:
                resolved, ext_name = resolved
                if ext_name:
                    self.__placeholders[fname] = ext_name
                if resolved is not True:
                    source_files.append(resolved)
                    source_map[resolved] = fname
                else:
                    if fname not in self.__all_pages:
                        page = Page(fname, None, '',
                                    self.project.sanitized_name)
                        page.generated = True
                        self.__all_pages[fname] = page
                        placeholders.append(fname)

        stale, unlisted = change_tracker.get_stale_files(
            source_files, 'user-pages-%s' % self.project.sanitized_name)

        old_user_symbols = set()
        new_user_symbols = set()

        for source_file in stale:
            pagename = source_map[source_file]

            prev_page = self.__all_pages.get(pagename)
            if prev_page:
                old_user_symbols |= prev_page.symbol_names

            page = self.__parse_page(source_file)
            new_user_symbols |= page.symbol_names

            newly_listed_symbols = OrderedSet(page.symbol_names)
            if prev_page:
                newly_listed_symbols -= prev_page.symbol_names

            self.stale_symbol_pages(newly_listed_symbols, page)

            if prev_page:
                page.subpages |= prev_page.subpages

            self.__all_pages[pagename] = page

        unlisted_pagenames = set()

        for source_file in unlisted:
            prev_page = None
            rel_path = None

            for ipath in self.project.include_paths:
                rel_path = os.path.relpath(source_file, ipath)
                prev_page = self.__all_pages.get(rel_path)
                if prev_page:
                    break

            if not prev_page:
                continue

            old_user_symbols |= prev_page.symbol_names
            self.__all_pages.pop(rel_path)
            unlisted_pagenames.add(rel_path)

        def setup_subpages(pagenames, get_pagename):
            """Setup subpages for pages with names in @pagenames"""
            sitemap_pages = sitemap.get_all_sources()
            for pagename in pagenames:
                page = self.__all_pages[get_pagename(pagename)]

                subpages = sitemap_pages.get(get_pagename(pagename), [])
                page.subpages = OrderedSet(subpages) | page.subpages
                for subpage_name in page.subpages:
                    if subpage_name not in unlisted_pagenames:
                        subpage = self.__all_pages[subpage_name]
                        if not subpage.meta.get('auto-sort', False):
                            subpage.pre_sorted = True
                page.subpages -= unlisted_pagenames

        setup_subpages(source_files, lambda x: source_map[x])
        setup_subpages(placeholders, lambda x: x)

        return old_user_symbols - new_user_symbols