コード例 #1
0
    def run(self):
        """Show the changelog in a new view."""
        try:
            import mdpopups
            has_phantom_support = (mdpopups.version() >= (1, 10, 0))
            fmatter = mdpopups.format_frontmatter(frontmatter)
        except Exception as e:
            print(e)
            fmatter = ''
            has_phantom_support = False

        text = sublime.load_resource('Packages/BracketHighlighter/CHANGES.md')
        view = self.window.new_file()
        view.set_name('BracketHighlighter - Changelog')
        view.settings().set('gutter', False)
        view.settings().set('word_wrap', False)
        if has_phantom_support:
            mdpopups.add_phantom(
                view,
                'changelog',
                sublime.Region(0),
                fmatter + text,
                sublime.LAYOUT_INLINE,
                wrapper_class="bracket-highlighter",
                css=CSS,
                on_navigate=self.on_navigate
            )
        else:
            view.run_command('insert', {"characters": text})
        view.set_read_only(True)
        view.set_scratch(True)
コード例 #2
0
    def hover_content(self) -> str:
        contents = []  # type: List[Any]
        if isinstance(self._hover, dict):
            response_content = self._hover.get('contents')
            if response_content:
                if isinstance(response_content, list):
                    contents = response_content
                else:
                    contents = [response_content]

        formatted = []
        for item in contents:
            value = ""
            language = None
            if isinstance(item, str):
                value = item
            else:
                value = item.get("value")
                language = item.get("language")

            if language:
                formatted.append("```{}\n{}\n```\n".format(language, value))
            else:
                formatted.append(value)

        if formatted:
            frontmatter_config = mdpopups.format_frontmatter(
                {'allow_code_wrap': True})
            return mdpopups.md2html(self.view,
                                    frontmatter_config + "\n".join(formatted))

        return ""
コード例 #3
0
ファイル: support.py プロジェクト: facelessuser/QuickCal
    def run(self, page):
        """Open page."""

        try:
            import mdpopups
            import pymdownx
            has_phantom_support = (mdpopups.version() >= (1, 10, 0)) and (int(sublime.version()) >= 3124)
            fmatter = mdpopups.format_frontmatter(frontmatter) if pymdownx.version_info[:3] >= (4, 3, 0) else ''
        except Exception:
            fmatter = ''
            has_phantom_support = False

        if not has_phantom_support:
            sublime.run_command('open_file', {"file": page})
        else:
            text = sublime.load_resource(page.replace('${packages}', 'Packages'))
            view = self.window.new_file()
            view.set_name('QuickCal - Quick Start')
            view.settings().set('gutter', False)
            view.settings().set('word_wrap', False)
            if has_phantom_support:
                mdpopups.add_phantom(
                    view,
                    'quickstart',
                    sublime.Region(0),
                    fmatter + text,
                    sublime.LAYOUT_INLINE,
                    css=CSS,
                    wrapper_class="quick-cal",
                    on_navigate=self.on_navigate
                )
            else:
                view.run_command('insert', {"characters": text})
            view.set_read_only(True)
            view.set_scratch(True)
コード例 #4
0
    def run(self, page):
        """Open page."""

        try:
            import mdpopups
            has_phantom_support = (mdpopups.version() >= (1, 10, 0))
            fmatter = mdpopups.format_frontmatter(frontmatter)
        except Exception:
            fmatter = ''
            has_phantom_support = False

        if not has_phantom_support:
            sublime.run_command('open_file', {"file": page})
        else:
            text = sublime.load_resource(page.replace('${packages}', 'Packages'))
            view = self.window.new_file()
            view.set_name('BracketHighlighter - Quick Start')
            view.settings().set('gutter', False)
            view.settings().set('word_wrap', False)
            if has_phantom_support:
                mdpopups.add_phantom(
                    view,
                    'QUICKSTART',
                    sublime.Region(0),
                    fmatter + text,
                    sublime.LAYOUT_INLINE,
                    css=CSS,
                    wrapper_class="bracket-highlighter",
                    on_navigate=self.on_navigate
                )
            else:
                view.run_command('insert', {"characters": text})
            view.set_read_only(True)
            view.set_scratch(True)
コード例 #5
0
ファイル: support.py プロジェクト: facelessuser/QuickCal
    def run(self):
        """Show the changelog in a new view."""
        try:
            import mdpopups
            import pymdownx
            has_phantom_support = (mdpopups.version() >= (1, 10, 0)) and (int(sublime.version()) >= 3124)
            fmatter = mdpopups.format_frontmatter(frontmatter) if pymdownx.version_info[:3] >= (4, 3, 0) else ''
        except Exception:
            fmatter = ''
            has_phantom_support = False

        text = sublime.load_resource('Packages/QuickCal/CHANGES.md')
        view = self.window.new_file()
        view.set_name('QuickCal - Changelog')
        view.settings().set('gutter', False)
        view.settings().set('word_wrap', False)
        if has_phantom_support:
            mdpopups.add_phantom(
                view,
                'changelog',
                sublime.Region(0),
                fmatter + text,
                sublime.LAYOUT_INLINE,
                wrapper_class="quick-cal",
                css=CSS,
                on_navigate=self.on_navigate
            )
        else:
            view.run_command('insert', {"characters": text})
        view.set_read_only(True)
        view.set_scratch(True)
コード例 #6
0
    def run(self):
        """Show the changelog in a new view."""
        try:
            import mdpopups
            import pymdownx
            has_phantom_support = (mdpopups.version() >= (1, 10, 0)) and (int(
                sublime.version()) >= 3124)
            fmatter = mdpopups.format_frontmatter(
                frontmatter) if pymdownx.version_info[:3] >= (4, 3, 0) else ''
        except Exception:
            fmatter = ''
            has_phantom_support = False

        text = sublime.load_resource('Packages/ExportHtml/CHANGES.md')
        view = self.window.new_file()
        view.set_name('ExportHtml - Changelog')
        view.settings().set('gutter', False)
        view.settings().set('word_wrap', False)
        if has_phantom_support:
            mdpopups.add_phantom(view,
                                 'changelog',
                                 sublime.Region(0),
                                 fmatter + text,
                                 sublime.LAYOUT_INLINE,
                                 wrapper_class="export-html",
                                 css=CSS,
                                 on_navigate=self.on_navigate)
        else:
            view.run_command('insert', {"characters": text})
        view.set_read_only(True)
        view.set_scratch(True)
コード例 #7
0
ファイル: support.py プロジェクト: skeptycal/SubNotify
    def run(self, page):
        """Open page."""

        try:
            import mdpopups
            import pymdownx
            has_phantom_support = (mdpopups.version() >= (1, 10, 0)) and (int(sublime.version()) >= 3124)
            fmatter = mdpopups.format_frontmatter(frontmatter) if pymdownx.version_info[:3] >= (4, 3, 0) else ''
        except Exception:
            fmatter = ''
            has_phantom_support = False

        if not has_phantom_support:
            sublime.run_command('open_file', {"file": page})
        else:
            text = sublime.load_resource(page.replace('${packages}', 'Packages'))
            view = self.window.new_file()
            view.set_name('SubNotify - Quick Start')
            view.settings().set('gutter', False)
            view.settings().set('word_wrap', False)
            if has_phantom_support:
                mdpopups.add_phantom(
                    view,
                    'quickstart',
                    sublime.Region(0),
                    fmatter + text,
                    sublime.LAYOUT_INLINE,
                    css=CSS,
                    wrapper_class="sub-notify",
                    on_navigate=self.on_navigate
                )
            else:
                view.run_command('insert', {"characters": text})
            view.set_read_only(True)
            view.set_scratch(True)
コード例 #8
0
ファイル: tooling.py プロジェクト: evandrocoan/LSP
 def update_sheet(self, config: ClientConfig, active_view: Optional[sublime.View], output_sheet: sublime.HtmlSheet,
                  resolved_command: List[str], server_output: str, exit_code: int) -> None:
     self.test_runner = None
     frontmatter = mdpopups.format_frontmatter({'allow_code_wrap': True})
     contents = self.get_contents(config, active_view, resolved_command, server_output, exit_code)
     # The href needs to be encoded to avoid having markdown parser ruin it.
     copy_link = make_command_link('lsp_copy_to_clipboard_from_base64', '<kbd>Copy to clipboard</kbd>',
                                   {'contents': b64encode(contents.encode()).decode()})
     formatted = '{}{}\n{}'.format(frontmatter, copy_link, contents)
     mdpopups.update_html_sheet(output_sheet, formatted, css=css().sheets, wrapper_class=css().sheets_classname)
コード例 #9
0
 def run(self, resource_path='docs/en/README.md'):
     try:
         w = self.window
         import mdpopups
         mdpopups.new_html_sheet(
             window=w,
             name='{}/{}'.format(PKG_NAME, resource_path),
             contents=mdpopups.format_frontmatter(FRONTMATTER) +
             sublime.load_resource('Packages/{}/{}'.format(
                 PKG_NAME, resource_path)),
             md=True,
             css='{}'.format(CSS))
     except Exception as e:
         print('{}: Exception: {}'.format(PKG_NAME, e))
コード例 #10
0
    def generate_content(self, view):
        total_region = sublime.Region(0, view.size())
        fm, content = frontmatter.get_frontmatter(view.substr(total_region))
        MD_FM.update(fm)
        content = "{}\n\n{}".format(
            mdpopups.format_frontmatter(MD_FM),
            self.render_checkboxes(content),
        )
        html_content = mdpopups.md2html(view, content).replace("<br>", "<br/>")

        file_name = view.file_name()
        basepath = os.path.dirname(file_name) if file_name else None
        html_content = imageparser(
            html_content,
            basepath,
            partial(self._update_preview, view),
            resources,
        )
        return html_content
コード例 #11
0
    def on_hover(self, view, point, hover_zone):

        if view.settings().get('is_widget'):
            return

        if not view.settings().get('show_definitions'):
            return

        if hover_zone is not sublime.HOVER_TEXT:
            return

        if not view.score_selector(point, 'source.lsl'):
            return

        # TODO: fix makopo/sublime-text-tooltip-lsl#6
        # word = view.substr(view.expand_by_class(point, sublime.CLASS_WORD_START | sublime.CLASS_WORD_END, "./\\()\"'-:,.;<>~!@#$%^&*|+=[]{}`~?"))
        word = view.substr(view.word(point))

        if not word:
            return

        from .keyword_data_loader import LSL_KEYWORD_DATA
        if LSL_KEYWORD_DATA is None:
            return

        try:
            tooltipRows = []

            result = LSL_KEYWORD_DATA[word]

            if result is None:
                return

            # Python-Markdown/markdown used by facelessuser/sublime-markdown-popups requires 4 spaces indentation

            if 'type' in result or word.startswith('ll'):
                return_value = '({}) '.format(result['type']) if 'type' in result else ''
                # TODO: return_value = f'({result['type']}) ' if 'type' in result else ''
                if 'params' in result:
                    paramsCache = []
                    for param in result['params']:
                        if 'default' in param:
                            paramsCache.append('<a href="{}{}">{}</a> {} (Default: {})'.format(SL_WIKI, param['type'], param['type'], param['name'], param['default']))
                        else:
                            paramsCache.append('<a href="{}{}">{}</a> {}'.format(SL_WIKI, param['type'], param['type'], param['name']))
                    params = '(' + ', '.join(paramsCache) + ')'
                else:
                    params = ''
                has_value = ' = {}'.format(str(result['value'])) if 'value' in result else ''
                if 'value_description' in result:
                    has_value = has_value + ' = {}'.format(str(result['value_description']))
                tooltipRows.append('{}<a href="{}{}">{}</a>{}{}'.format(return_value, SL_WIKI, word, word, params, has_value))
                # TODO: tooltipRows.append(f'{return_value}<a href="{SL_WIKI}{word}">{word}</a>{params}{has_value}')
            else:
                tooltipRows.append('<a href="{}{}">{}</a>'.format(SL_WIKI, word, word))
                # TODO: tooltipRows.append(f'<a href="{SL_WIKI}{word}">{word}</a>')
            tooltipRows.append(' ')
            if 'type' in result or word.startswith('ll'):
                if 'params' in result:
                    tooltipRows.append('* Params:')
                    for param in result['params']:
                        tooltipRows.append('    * ({}) {}'.format(param['type'], param['name']))
                        if 'default' in param:
                            tooltipRows.append('        * default: {}'.format(param['default']))
                        if 'description' in param:
                            tooltipRows.append('        * description: {}'.format(param['description']))
            if 'function-id' in result:
                tooltipRows.append('* [Function id](https://wiki.secondlife.com/wiki/LSL_Function_ID): {}'.format(str(result['function-id'])))
            if 'required_permissions' in result:
                tooltipRows.append('* [Required permissions](https://wiki.secondlife.com/wiki/Category:LSL_Requires_Permissions): ' + ', '.join(str('<a href="{}{}">{}</a>'.format(SL_WIKI, permission, permission)) for permission in result['required_permissions']))
                # TODO: tooltipRows.append('* [Required permissions](https://wiki.secondlife.com/wiki/Category:LSL_Requires_Permissions): ' + ', '.join(str(f'<a href="{SL_WIKI}{permission}">{permission}</a>') for permission in result['required_permissions']))
            if 'version' in result:
                tooltipRows.append('* SL server version: {}'.format(result['version']))
            if 'status' in result:
                tooltipRows.append('* Status: {}'.format(result['status']))
            if 'delay' in result:
                # delay is float (in seconds) or string ('variable' for llSleep)
                tooltipRows.append('* [Delay](https://wiki.secondlife.com/wiki/LSL_Delay): {}'.format(str(result['delay'])))
            if 'energy' in result:
                tooltipRows.append('* Energy: {}'.format(str(result['energy'])))
            tooltipRows.append('* SL JIRA: [{}](http://jira.secondlife.com/secure/IssueNavigator!executeAdvanced.jspa?jqlQuery=%28summary+%7E+%22{}%22+OR+description+%7E+%22{}%22%29+&runQuery=true)'.format(word, word, word))
            # TODO: tooltipRows.append(f'* SL JIRA: [{word}](http://jira.secondlife.com/secure/IssueNavigator!executeAdvanced.jspa?jqlQuery=%28summary+%7E+%22{word}%22+OR+description+%7E+%22{word}%22%29+&runQuery=true)')
            if 'description' in result:
                tooltipRows.append(' ')
                tooltipRows.append('---')
                tooltipRows.append(' ')
                tooltipRows.append('{}'.format(result['description']))
            if 'related' in result:
                tooltipRows.append(' ')
                tooltipRows.append('---')
                tooltipRows.append(' ')
                tooltipRows.append('Related:')
                tooltipRows.append(' ')
                if 'constants' in result['related']:
                    tooltipRows.append('* Constants: ' + ', '.join(str('<a href="{}{}">{}</a>'.format(SL_WIKI, related, related)) for related in result['related']['constants']))
                    # TODO: tooltipRows.append('* Constants: ' + ', '.join(str(f'<a href="{SL_WIKI}{related}">{related}</a>') for related in result['related']['constants']))
                if 'events' in result['related']:
                    tooltipRows.append('* Events: ' + ', '.join(str('<a href="{}{}">{}</a>'.format(SL_WIKI, related, related)) for related in result['related']['events']))
                    # TODO: f-strings
                if 'functions' in result['related']:
                    tooltipRows.append('* Functions: ' + ', '.join(str('<a href="{}{}">{}</a>'.format(SL_WIKI, related, related)) for related in result['related']['functions']))
                    # TODO: f-strings
                if 'slwiki' in result['related']:
                    tooltipRows.append('* SL wiki: ' + ', '.join(str('<a href="{}{}">{}</a>'.format(SL_WIKI, related, related)) for related in result['related']['slwiki']))
                    # TODO: f-strings
                if 'slwiki_categories' in result['related']:
                    tooltipRows.append('* SL wiki categories: ' + ', '.join(str('<a href="{}Category:{}">{}</a>'.format(SL_WIKI, related, related)) for related in result['related']['slwiki_categories']))
                    # TODO: f-strings
                if 'wikipedia' in result['related']:
                    tooltipRows.append('* Wikipedia (en): ' + ', '.join(str('<a href="{}{}">{}</a>'.format(WIKIPEDIA, related, related)) for related in result['related']['wikipedia']['en']))
                    # TODO: f-strings
            if 'usage' in result:
                tooltipRows.append(' ')
                tooltipRows.append('---')
                for usage_example in result['usage']:
                    tooltipRows.append(' ')
                    tooltipRows.append('```lsl')
                    tooltipRows.append('{}'.format(usage_example))
                    # TODO: tooltipRows.append(f'{usage_example}')
                    tooltipRows.append('```')
            if 'snippets' in result:
                tooltipRows.append(' ')
                tooltipRows.append('---')
                for snippet in result['snippets']:
                    tooltipRows.append(' ')
                    tooltipRows.append('```lsl')
                    tooltipRows.append('{}'.format(snippet))
                    # TODO: tooltipRows.append(f'{snippet}')
                    tooltipRows.append('```')

            if 0 < len(tooltipRows):
                tooltipText = mdpopups.format_frontmatter({'allow_code_wrap': True})
                tooltipText += '\n'
                tooltipText += '\n'.join(tooltipRows)
                # mdpopups.color_box for vectors? or mdpopups.tint with placeholder image?
                mdpopups.show_popup(view,
                                    tooltipText,
                                    flags=(sublime.COOPERATE_WITH_AUTO_COMPLETE | sublime.HIDE_ON_MOUSE_MOVE_AWAY),
                                    location=point,
                                    wrapper_class='lsl',
                                    max_width=640,
                                    max_height=480,
                                    on_navigate=self.on_navigate,
                                    on_hide=self.on_hide(view))
                return
            mdpopups.hide_popup(view)
        except Exception as e:
            mdpopups.hide_popup(view)
コード例 #12
0
COLOR = {"color": True, "fit": False}
HEX = {"hex": True}
HEX_NA = {"hex": True, "alpha": False}
DEFAULT = {"fit": False}
COMMA = {"fit": False, "comma": True}
FULL_PREC = {"fit": False, "precision": -1}
COLOR_FULL_PREC = {"color": True, "fit": False, "precision": -1}
SRGB_SPACES = ("srgb", "hsl", "hwb")

FRONTMATTER = mdpopups.format_frontmatter(
    {
        "allow_code_wrap": False,
        "markdown_extensions": [
            "markdown.extensions.admonition",
            "markdown.extensions.attr_list",
            "markdown.extensions.def_list",
            "pymdownx.betterem",
            "pymdownx.magiclink",
            "pymdownx.extrarawhtml"
        ]
    }
)

LINE_HEIGHT_WORKAROUND = platform.system() == "Windows"

ADD_CSS = dedent(
    '''
    div.color-helper { margin: 0; padding: 0.5rem; }
    .color-helper .small { font-size: 0.8rem; }
    .color-helper .alpha { text-decoration: underline; }
    '''
コード例 #13
0
    def on_hover(self, view, point, hover_zone):

        if view.settings().get('is_widget'):
            return

        if not view.settings().get('show_definitions'):
            return

        if hover_zone != sublime.HOVER_TEXT:
            return

        if not view.score_selector(point, 'source.lsl'):
            return

        word = view.substr(view.word(point))

        if not word:
            return

        if TOOLTIP_DATA is None:
            return

        try:
            tooltipRows = []
            for result in TOOLTIP_DATA:
                if result.get('name', None) == word:
                    if 'type' in result or result['name'].startswith('ll'):
                        tooltipRows.append(
                            '### (%s) <a href="%s%s">%s</a>' %
                            (result.get('type', 'void'), SL_WIKI,
                             result['name'], result['name']))
                    else:
                        tooltipRows.append(
                            '### <a href="%s%s">%s</a>' %
                            (SL_WIKI, result['name'], result['name']))
                    tooltipRows.append(' ')
                    if 'value' in result:
                        tooltipRows.append('* Value: %s' %
                                           str(result['value']))
                    if 'version' in result:
                        tooltipRows.append('* SL server version: %s' %
                                           result['version'])
                    if 'status' in result:
                        tooltipRows.append(
                            '* <div class="danger">Status: %s</div>' %
                            result['status'])
                    if 'delay' in result:
                        tooltipRows.append('* Delay: %s' %
                                           str(result['delay']))
                    if 'energy' in result:
                        tooltipRows.append('* Energy: %s' %
                                           str(result['energy']))
                    if 'param' in result:
                        tooltipRows.append(' ')
                        tooltipRows.append('#### Parameters')
                        tooltipRows.append(' ')
                        if type(result['param']) is dict:
                            tooltipRows.append(
                                '* <a href="%s%s">%s</a> %s' %
                                (SL_WIKI, result['param']['type'],
                                 result['param']['type'],
                                 result['param']['name']))
                        elif type(result['param']) is list:
                            for param in result['param']:
                                tooltipRows.append(
                                    '* <a href="%s%s">%s</a> %s' %
                                    (SL_WIKI, param['type'], param['type'],
                                     param['name']))
                    if 'description' in result:
                        tooltipRows.append(' ')
                        tooltipRows.append('#### Description')
                        tooltipRows.append(' ')
                        tooltipRows.append('%s' %
                                           result['description']['en_US'])
                    if 'related' in result:
                        tooltipRows.append(' ')
                        tooltipRows.append('---')
                        tooltipRows.append(' ')
                        tooltipRows.append('> ' + ', '.join(
                            str('<a href="%s%s">%s</a>' %
                                (SL_WIKI, related, related))
                            for related in result['related']))
                        tooltipRows.append(' ')
                    if 'usage' in result:
                        tooltipRows.append(' ')
                        tooltipRows.append('---')
                        for usage_example in result['usage']:
                            tooltipRows.append(' ')
                            tooltipRows.append('```lsl')
                            tooltipRows.append('%s' % usage_example)
                            tooltipRows.append('```')
                        tooltipRows.append(' ')
                    if 'snippets' in result:
                        tooltipRows.append(' ')
                        tooltipRows.append('---')
                        for snippet in result['snippets']:
                            tooltipRows.append(' ')
                            tooltipRows.append('```lsl')
                            tooltipRows.append('%s' % snippet)
                            tooltipRows.append('```')
                        tooltipRows.append(' ')
            if 0 < len(tooltipRows):
                frontmatter = mdpopups.format_frontmatter(
                    {'allow_code_wrap': True})
                mdpopups.show_popup(view,
                                    frontmatter + '\n'.join(tooltipRows),
                                    flags=(sublime.COOPERATE_WITH_AUTO_COMPLETE
                                           | sublime.HIDE_ON_MOUSE_MOVE_AWAY),
                                    location=point,
                                    wrapper_class='lsl',
                                    max_width=640,
                                    max_height=480,
                                    on_navigate=self.on_navigate,
                                    on_hide=self.on_hide(view))
                return
            # mdpopups.color_box for vectors? or mdpopups.tint with placeholder img?
        except Exception as e:
            print(e)

        mdpopups.hide_popup(view)
コード例 #14
0
COLOR_FULL_PREC = {"color": True, "fit": False, "precision": -1}
SRGB_SPACES = ("srgb", "hsl", "hwb")
CSS_L4_SPACES = ("srgb", "hsl", "hwb", "lch", "lab", "display-p3", "rec2020",
                 "prophoto-rgb", "a98-rgb", "xyz")

lang_map = {
    # `'name': (('mapping_alias',), ('tmLanguage_or_sublime-syntax file',))`
    'color-helper': (('color-helper', ), ('ColorHelper/ColorHelperColors', ))
}

FRONTMATTER = mdpopups.format_frontmatter({
    "allow_code_wrap":
    False,
    "language_map":
    lang_map,
    "markdown_extensions": [
        "markdown.extensions.admonition", "markdown.extensions.attr_list",
        "markdown.extensions.def_list", "markdown.extensions.md_in_html",
        "pymdownx.inlinehilite", "pymdownx.betterem", "pymdownx.magiclink"
    ]
})

LINE_HEIGHT_WORKAROUND = platform.system() == "Windows"

ADD_CSS = dedent('''
    html.light {
      --ch-button-color: color(var(--mdpopups-bg) blend(black 85%));
    }
    html.dark {
      --ch-button-color: color(var(--mdpopups-bg) blend(white 85%));
    }
コード例 #15
0
ファイル: test.py プロジェクト: skeptycal/mdpopup_test
def mdpopups_phantom_format_test(fm, md):
    """Test phantom."""

    show_phantom(mdpopups.format_frontmatter(fm) + sublime.load_resource(md))
コード例 #16
0
def minihtml(view: sublime.View, content: Union[MarkedString, MarkupContent,
                                                List[MarkedString]],
             allowed_formats: int) -> str:
    """
    Formats provided input content into markup accepted by minihtml.

    Content can be in one of those formats:

     - string: treated as plain text
     - MarkedString: string or { language: string; value: string }
     - MarkedString[]
     - MarkupContent: { kind: MarkupKind, value: string }

    We can't distinguish between plain text string and a MarkedString in a string form so
    FORMAT_STRING and FORMAT_MARKED_STRING can't both be specified at the same time.

    :param view
    :param content
    :param allowed_formats: Bitwise flag specifying which formats to parse.

    :returns: Formatted string
    """
    if allowed_formats == 0:
        raise ValueError("Must specify at least one format")
    parse_string = bool(allowed_formats & FORMAT_STRING)
    parse_marked_string = bool(allowed_formats & FORMAT_MARKED_STRING)
    parse_markup_content = bool(allowed_formats & FORMAT_MARKUP_CONTENT)
    if parse_string and parse_marked_string:
        raise ValueError(
            "Not allowed to specify FORMAT_STRING and FORMAT_MARKED_STRING at the same time"
        )
    is_plain_text = True
    result = ''
    if (parse_string or parse_marked_string) and isinstance(content, str):
        # plain text string or MarkedString
        is_plain_text = parse_string
        result = content
    if parse_marked_string and isinstance(content, list):
        # MarkedString[]
        formatted = []
        for item in content:
            value = ""
            language = None
            if isinstance(item, str):
                value = item
            else:
                value = item.get("value") or ""
                language = item.get("language")

            if language:
                formatted.append("```{}\n{}\n```\n".format(language, value))
            else:
                formatted.append(value)

        is_plain_text = False
        result = "\n".join(formatted)
    if (parse_marked_string or parse_markup_content) and isinstance(
            content, dict):
        # MarkupContent or MarkedString (dict)
        language = content.get("language")
        kind = content.get("kind")
        value = content.get("value") or ""
        if parse_markup_content and kind:
            # MarkupContent
            is_plain_text = kind != "markdown"
            result = value
        if parse_marked_string and language:
            # MarkedString (dict)
            is_plain_text = False
            result = "```{}\n{}\n```\n".format(language, value)
    if is_plain_text:
        return "<p>{}</p>".format(text2html(result)) if result else ''
    else:
        frontmatter = {
            "allow_code_wrap":
            True,
            "markdown_extensions": [
                {
                    "pymdownx.escapeall": {
                        "hardbreak": True,
                        "nbsp": False
                    }
                },
                {
                    "pymdownx.magiclink": {
                        # links are displayed without the initial ftp://, http://, https://, or ftps://.
                        "hide_protocol": True,
                        # GitHub, Bitbucket, and GitLab commit, pull, and issue links are are rendered in a shorthand
                        # syntax.
                        "repo_url_shortener": True
                    }
                }
            ]
        }
        # Workaround CommonMark deficiency: two spaces followed by a newline should result in a new paragraph.
        result = re.sub('(\\S)  \n', '\\1\n\n', result)
        return mdpopups.md2html(
            view,
            mdpopups.format_frontmatter(frontmatter) + result)
コード例 #17
0
ファイル: test.py プロジェクト: facelessuser/mdpopup_test
def mdpopups_phantom_format_test(fm, md):
    """Test phantom."""

    show_phantom(mdpopups.format_frontmatter(fm) + sublime.load_resource(md))