示例#1
0
 def wiki_image(self, addr, alt, class_='wiki', lineno=0):
     addr = addr.strip()
     chunk = ''
     if hatta.parser.external_link(addr):
         return html.img(src=werkzeug.url_fix(addr),
                         class_="external",
                         alt=alt)
     if '#' in addr:
         addr, chunk = addr.split('#', 1)
     if addr == '':
         return html.a(name=chunk)
     elif addr.startswith(':'):
         if chunk:
             chunk = '#' + chunk
         alias = self._link_alias(addr[1:])
         href = werkzeug.url_fix(alias + chunk)
         return html.img(src=href, class_="external alias", alt=alt)
     elif addr in self.wiki.storage:
         mime = page_mime(addr)
         if mime.startswith('image/'):
             return html.img(src=self.get_ref_path(addr),
                             class_=class_,
                             alt=alt)
         else:
             return html.img(href=self.get_ref_path(addr), alt=alt)
     else:
         return html.a(html(alt), href=self.get_ref_path(addr))
示例#2
0
def convert_page(page_name,
                 wiki,
                 out_dir,
                 file_prefix=None,
                 files_in_one_dir=False,
                 add_link_ext=None):
    converter = WikiConverter(wiki,
                              file_prefix=file_prefix,
                              files_in_one_dir=files_in_one_dir,
                              add_link_ext=add_link_ext)

    # find & construct destination dir
    out_subpath = converter.out_subpath(page_name)
    out_path = os.path.join(out_dir, out_subpath)
    mkdir_p(os.path.dirname(out_path))

    if converter.is_raw(page_name):
        # copy files straight through
        page_data = wiki.storage.page_data(page_name)
        with open(out_path, 'wb') as out_fp:
            out_fp.write(page_data)
        coarse_type = 'file'
    else:
        # render pages & copy in rendered output
        page_html = converter.render(page_name)
        with open(out_path + '.html', 'wb') as out_fp:
            out_fp.write(page_html.encode('utf8'))
        coarse_type = 'page'

    # log progress
    mime_type = page_mime(page_name)
    print('%s (%s): %s -> %s' %
          (coarse_type, mime_type, page_name, out_subpath))
示例#3
0
    def get_page(self, request, title):
        """Creates a page object based on page's mime type"""

        if title:
            try:
                page_class, mime = self.filename_map[title]
            except KeyError:
                mime = page.page_mime(title)
                major, minor = mime.split('/', 1)
                try:
                    page_class = self.mime_map[mime]
                except KeyError:
                    try:
                        plus_pos = minor.find('+')
                        if plus_pos > 0:
                            minor_base = minor[plus_pos:]
                        else:
                            minor_base = ''
                        base_mime = '/'.join([major, minor_base])
                        page_class = self.mime_map[base_mime]
                    except KeyError:
                        try:
                            page_class = self.mime_map[major]
                        except KeyError:
                            page_class = self.mime_map['']
        else:
            page_class = page.WikiPageSpecial
            mime = ''
        return page_class(self, request, title, mime)
示例#4
0
 def _title_to_file(self, title):
     title = unicode(title).strip()
     filename = werkzeug.url_quote(title, safe='')
     # Escape special windows filenames and dot files
     _windows_device_files = ('CON', 'AUX', 'COM1', 'COM2', 'COM3', 'COM4',
                              'LPT1', 'LPT2', 'LPT3', 'PRN', 'NUL')
     if (filename.split('.')[0].upper() in _windows_device_files
             or filename.startswith('_') or filename.startswith('.')):
         filename = '_' + filename
     if page.page_mime(title) == 'text/x-wiki' and self.extension:
         filename += self.extension
     return os.path.join(self.repo_prefix, filename)
示例#5
0
文件: storage.py 项目: happytk/moin
 def _title_to_file(self, title):
     title = unicode(title).strip()
     filename = werkzeug.url_quote(title, safe='')
     # Escape special windows filenames and dot files
     _windows_device_files = ('CON', 'AUX', 'COM1', 'COM2', 'COM3',
                              'COM4', 'LPT1', 'LPT2', 'LPT3', 'PRN',
                              'NUL')
     if (filename.split('.')[0].upper() in _windows_device_files or
         filename.startswith('_') or filename.startswith('.')):
         filename = '_' + filename
     if page.page_mime(title) == 'text/x-wiki' and self.extension:
         filename += self.extension
     return os.path.join(self.repo_prefix, filename)
示例#6
0
    def download(self, request, title):
        """Serve the raw content of a page directly from disk."""

        mime = page.page_mime(title)
        if mime == 'text/x-wiki':
            mime = 'text/plain'
        try:
            wrap_file = werkzeug.wrap_file
        except AttributeError:
            wrap_file = lambda x, y: y
        f = wrap_file(request.environ, self.storage.open_page(title))
        response = self.response(request, title, f, '/download', mime, size=-1)
        response.direct_passthrough = True
        return response
示例#7
0
    def _title_to_file(self, title):
        """
        Modified escaping allowing (some) slashes and spaces.
        If the entry is a directory, use an index file.
        """

        title = unicode(title).strip()
        escaped = werkzeug.url_quote(title, safe='/ ')
        escaped = self.periods_re.sub('%2E', escaped)
        escaped = self.slashes_re.sub('%2F', escaped)
        path = os.path.join(self.repo_prefix, escaped)
        if os.path.isdir(os.path.join(self.repo_path, path)):
            path = os.path.join(path, self.index)
        if page.page_mime(title) == 'text/x-wiki' and self.extension:
            path += self.extension
        return path
示例#8
0
文件: storage.py 项目: happytk/moin
    def _title_to_file(self, title):
        """
        Modified escaping allowing (some) slashes and spaces.
        If the entry is a directory, use an index file.
        """

        title = unicode(title).strip()
        escaped = werkzeug.url_quote(title, safe='/ ')
        escaped = self.periods_re.sub('%2E', escaped)
        escaped = self.slashes_re.sub('%2F', escaped)
        path = os.path.join(self.repo_prefix, escaped)
        if self._is_directory(path):
            path = os.path.join(path, self.index)
        if page.page_mime(title) == 'text/x-wiki' and self.extension:
            path += self.extension
        return path
示例#9
0
 def is_raw(self, title):
     return page_mime(title) != 'text/x-wiki'