コード例 #1
0
def pygmentize(key, value, format, meta):
    if key == 'CodeBlock':
        [[ident, classes, keyvals], code] = value

        lexer = None
        for klass in classes:
            if klass == "commonlisp":
                klass = "lisp"
            try:
                lexer = get_lexer_by_name(klass)
                break
            except:
                pass

        if lexer is None:
            try:
                lexer = guess_lexer(code)
            except:
                lexer = TextLexer()

        if format == "html5":
            format = "html"

        if format == "html":
            formatter = get_formatter_by_name(format) \
                            .__class__(cssclass="highlight " + klass)
        else:
            formatter = get_formatter_by_name(format)

        return RawBlock(format, highlight(code, lexer, formatter))
コード例 #2
0
ファイル: app.py プロジェクト: liuyug/meditor
    def onMenuCodeStyleChanged(self, label, checked):
        if not label:
            return
        self.settings.setValue('pygments', label)
        pygments_rst_path = os.path.join(
            __home_data_path__, 'themes', 'reStructuredText',
            'pygments.css')

        pygments_md_path = os.path.join(
            __home_data_path__, 'themes', 'Markdown',
            'pygments.css')
        comment = """
/*
 * +---------------+
 * | pygment style |
 * +---------------+
 */\n"""
        with open(pygments_rst_path, 'wb') as f:
            f.write(toBytes(comment))
            if label != 'null':
                formatter = get_formatter_by_name('html', style=label)
                f.write(toBytes(formatter.get_style_defs('pre.code')))
        with open(pygments_md_path, 'wb') as f:
            f.write(toBytes(comment))
            if label != 'null':
                formatter = get_formatter_by_name('html', style=label)
                f.write(toBytes(formatter.get_style_defs('.codehilite')))
        self.previewCurrentText()
        self.showMessage(
            self.tr('pygments change: %s' % label))
コード例 #3
0
ファイル: server.py プロジェクト: hkmshb/pasttle
def serve_language_css(style):
    try:
        fmt = formatters.get_formatter_by_name('html', style=style)
    except:
        util.log.warn('Style "%s" cannot be found, falling back to default' %
                      (style, ))
        fmt = formatters.get_formatter_by_name('html')
    bottle.response.content_type = 'text/css'
    return fmt.get_style_defs(['.pygmentized'])
コード例 #4
0
ファイル: __init__.py プロジェクト: filltr/PyMdown
def get_pygment_style(style, css_class='codehilite'):
    """Get the specified pygments sytle CSS."""

    try:
        # Try and request pygments to generate it
        text = get_formatter_by_name('html', style=style).get_style_defs('.' + css_class)
    except Exception:
        # Try and request pygments to generate default
        text = get_formatter_by_name('html', style="default").get_style_defs('.' + css_class)
    return '<style>\n%s\n</style>\n' % text if text is not None else ""
コード例 #5
0
ファイル: server.py プロジェクト: AWinterman/pasttle
def serve_language_css(style):
    try:
        fmt = formatters.get_formatter_by_name('html', style=style)
    except:
        util.log.warn(
            'Style "%s" cannot be found, falling back to default' % (style,)
        )
        fmt = formatters.get_formatter_by_name('html')
    bottle.response.content_type = 'text/css'
    return fmt.get_style_defs(['.pygmentized'])
コード例 #6
0
ファイル: __init__.py プロジェクト: wimel/PyMdown
def get_pygment_style(style, css_class='codehilite'):
    """Get the specified pygments sytle CSS."""

    try:
        # Try and request pygments to generate it
        text = get_formatter_by_name(
            'html', style=style).get_style_defs('.' + css_class)
    except Exception:
        # Try and request pygments to generate default
        text = get_formatter_by_name(
            'html', style="default").get_style_defs('.' + css_class)
    return '<style>\n%s\n</style>\n' % text if text is not None else ""
コード例 #7
0
ファイル: test_style.py プロジェクト: ihor-nahuliak/pybemolle
 def setUpClass(cls):
     root_path = os.path.dirname(os.path.dirname(__file__))
     lexer_filename = os.path.join(root_path, 'pybemolle', 'lexers.py')
     cls.lexer = load_lexer_from_file(lexer_filename, 'BemolleLexer')
     cls.formatter = get_formatter_by_name('html',
                                           style='bemolle',
                                           noclasses=True)
コード例 #8
0
def output_json(json):
    click.secho(
        highlight(
            _format_response(json),
            lexers.get_lexer_by_name("json"),
            formatters.get_formatter_by_name("terminal"),
        ))
コード例 #9
0
ファイル: blocks.py プロジェクト: azanoviv02/sturm
    def render(self, value, context):
        src = value['code'].strip('\n')
        lang = value['language']

        lexer = get_lexer_by_name(lang)
        formatter = get_formatter_by_name(
            'html',
            linenos=None,
            cssclass='codehilite',
            style='default',
            noclasses=False,
        )
        return mark_safe(highlight(src, lexer, formatter))


# class MarkDownBlock(blocks.TextBlock):
#     """ MarkDown Block """
#
#     class Meta:
#         icon = 'code'
#
#     def render_basic(self, value):
#         md = markdown(
#             value,
#             [
#                 'markdown.extensions.fenced_code',
#                 'codehilite',
#             ],
#         )
#         return mark_safe(md)
コード例 #10
0
def hljsx(code):
    lexer = get_lexer_by_name('jsx')
    formatter = get_formatter_by_name('html')
    hl = highlight(code, lexer, formatter)
    if isinstance(hl, str):
        return hl
    return hl.encode('utf-8')
コード例 #11
0
def make_highlight(language, fontsize, style, inp, line_width) -> None:
    """
    Highlight code for keynote.app from clipboard and save result to clipboard.

    STYLE Style for code

    FONTSIZE Font size to use

    LANGUAGE Programming language of source code

    INP What is the source of code

    LINE-WIDTH python only. Format code to fit width
    """
    lexer = get_lexer_by_name(language)
    click.echo(f"Using lexer {lexer}")
    code = (pyperclip.paste() if inp == "clipboard" else click.edit(
        text=pyperclip.paste(), extension=lexer.filenames[0][1:]))
    if language == "python":
        code = black.format_str(code, mode=black.Mode(line_length=line_width))
    click.echo(
        f"Got code from clipboard that starts with {click.style(code[:20], fg='blue')}..."
    )
    res = highlight(
        code,
        lexer,
        get_formatter_by_name("rtf",
                              style=get_style_by_name(style),
                              fontsize=fontsize),
    )
    click.echo("Highlighted")
    pyperclip.copy(res)
    click.echo("Done!")
コード例 #12
0
    def _visit_source(self, node):
        lexer = get_lexer_by_name(node["language"])
        formatter = get_formatter_by_name("html")
        src = "\n".join([i["value"] for i in node["code"]])

        highlighted_src = highlight(src, lexer, formatter)

        highlighted_src_lines = highlighted_src.split("\n")

        callouts = {}
        for linenum, callout in node["callouts"].items():
            callout_name, callout_text = callout
            highlighted_src_lines[linenum] = "{line} {callout}".format(
                line=highlighted_src_lines[linenum],
                callout=self._render("callout", name=callout_name),
            )
            callouts[callout_name] = callout_text

        highlighted_src = "\n".join(highlighted_src_lines)
        callouts_list = [(self._render("callout", name=name), text)
                         for name, text in callouts.items()]

        return {
            "code": highlighted_src,
            "language": node["language"],
            "callouts": callouts_list,
            "title": self.visit(node["title"]),
        }
コード例 #13
0
def pygmentize(key, value, format, meta):
    if key == 'CodeBlock':
        #LOG("key : {}\n value : {}\n format : {}\n meta : {}\n\n\n".format(key, value, format, meta))
        [[ident, classes, keyvals], code] = value
        lexer = None
        for klass in classes:
            try:
                lexer = get_lexer_by_name(klass)
                break
            except:
                pass
            if lexer is None:
                try:
                    lexer = guess_lexer(code)
                except:
                    lexer = TextLexer()
        options = {}
        if ('numberLines' in value[0][1]):
            options['linenos'] = 'table'
        return [
            RawBlock(
                format,
                highlight(code, lexer,
                          get_formatter_by_name(format, **options)))
        ]
コード例 #14
0
    def render(self, value):
        src = value["code"].strip("\n")
        lang = value["language"]

        lexer = get_lexer_by_name(lang)
        formatter = get_formatter_by_name("html", linenos=None, cssclass="codehilite", style="default", noclasses=False)
        return mark_safe(highlight(src, lexer, formatter))
コード例 #15
0
ファイル: jsontool.py プロジェクト: msztolcman/jsontool
def get_printer(mode='auto'):
    """
    Generate printer function.

    :param mode: string: always, never or auto
    :return:
    """

    def printer(data):
        print(data)

    if mode in ('auto', 'always'):
        try:
            from pygments import highlight
            from pygments.lexers import get_lexer_by_name
            from pygments.formatters import get_formatter_by_name

            if mode == 'always' or sys.stdout.isatty():
                lexer = get_lexer_by_name('json')
                formatter = get_formatter_by_name('terminal256')

                def printer(data):
                    print(highlight(data, lexer, formatter), end='', file=sys.stdout)
        except ImportError as e:
            if mode == 'always':
                import warnings
                warnings.warn('No pygments module available, cannot colorize output')

    return printer
コード例 #16
0
def process_request(json_data):
    log.debug('Processing: path: %s\n%s:%s' % (json_data['fullPath'], json_data['action'], json_data['language']))

    try:
      code = json_data['code']

      fmter = get_formatter_by_name(json_data['outformat'], linenos = json_data['linenos'], lineanchors = json_data['lineanchors'])
      fmter.encoding = json_data['encoding'] 

      lexer = get_lexer_by_name(json_data['language'])

      return highlight(code, lexer, fmter)
    except ValueError as err:
      log.error(err)
      return ''' 
        <h1><a href="http://pygments.org">Pygments</a> failed to highlight this file</h1>
        <div>You should consider filing a bug report or provide a bug fix to help the community ;)</div>
        <div>
          The Error was:
            <pre>%s</pre>
        </div>
        <div>
          The code that was parsed is:
            <pre>%s</pre>
        </div>
        ''' % (err, code)
コード例 #17
0
    def get_context(self, value, parent_context=None):
        context = super().get_context(value, parent_context=parent_context)
        src = value.get('code') or ''
        src = src.strip('\n')
        lang = value.get('language') or ''
        line_numbers = value['line_numbers']

        if lang:
            lexer = get_lexer_by_name(lang)
        else:
            lexer = guess_lexer(src)
        formatter = get_formatter_by_name(
            'html',
            linenos=line_numbers,
            cssclass='codehilite',
            style='default',
            noclasses=False,
        )
        context.update({
            'filename': value.get('filename'),
            'display_filename': value.get('display_filename'),
            'language': value.get('lang'),
            'code': mark_safe(highlight(src, lexer, formatter))
        })
        return context
コード例 #18
0
def hljsx(code):
    lexer = get_lexer_by_name('jsx')
    formatter = get_formatter_by_name('html')
    hl = highlight(code, lexer, formatter)
    if isinstance(hl, str):
        return hl
    return hl.encode('utf-8')
コード例 #19
0
ファイル: util.py プロジェクト: m42e/pb
def highlight(content, lexer_name, formatter):
    try:
        lexer = get_lexer_by_name(lexer_name)
    except ClassNotFound:
        if lexer_name != '':
            return "No such lexer.", 400

    if formatter and formatter != 'html':
        formatter = get_formatter_by_name(formatter)
    else:
        formatter = HtmlFormatter(linenos='table',
                                  anchorlinenos=True,
                                  lineanchors='L',
                                  linespans='L')

    if lexer_name == '':
        tokens = ((Token.Text, '{}\n'.format(c.decode('utf-8')))
                  for c in content.splitlines())
        content = _format(tokens, formatter)
    else:
        content = _highlight(content, lexer, formatter)

    if not isinstance(formatter, HtmlFormatter):
        return content

    template = render_template("generic.html",
                               cc='container-fluid',
                               content=content,
                               **style_args())

    return template
コード例 #20
0
 def format(self, code, language):
    if language == "":
       lexer = guess_lexer(code)
    else:
       lexer = get_lexer_by_name(language)
    formatter = get_formatter_by_name(self.formatname)
    return highlight(code, lexer, formatter)
コード例 #21
0
ファイル: main.py プロジェクト: lebinh/pycco
def highlight(sections, language, preserve_paths=True, outdir=None):
    """
    Highlights a single chunk of code using the **Pygments** module, and runs
    the text of its corresponding comment through **Markdown**.

    We process the entire file in a single call to Pygments by inserting little
    marker comments between each section and then splitting the result string
    wherever our markers occur.
    """

    if not outdir:
        raise TypeError("Missing the required 'outdir' keyword argument.")

    output = pygments.highlight(
        language["divider_text"].join(section["code_text"].rstrip()
                                      for section in sections),
        language["lexer"], formatters.get_formatter_by_name("html"))

    output = output.replace(highlight_start, "").replace(highlight_end, "")
    fragments = re.split(language["divider_html"], output)
    for i, section in enumerate(sections):
        section["code_html"] = highlight_start + \
            shift(fragments, "") + highlight_end
        try:
            docs_text = unicode(section["docs_text"])
        except UnicodeError:
            docs_text = unicode(section["docs_text"].decode('utf-8'))
        except NameError:
            docs_text = section['docs_text']
        section["docs_html"] = markdown(
            preprocess(docs_text, preserve_paths=preserve_paths,
                       outdir=outdir))
        section["num"] = i

    return sections
コード例 #22
0
 def ConvertCodeToHtml(self, code):
     from pygments import highlight
     from pygments.lexers import get_lexer_by_name
     from pygments.formatters import get_formatter_by_name
     lexer = get_lexer_by_name('python')
     formatter = get_formatter_by_name('html', noclasses=True)
     return highlight(code, lexer, formatter)
コード例 #23
0
ファイル: django_sql_color.py プロジェクト: alikins/alogging
    def __init__(self, fmt=None, datefmt=None, style='%', options=None,
                 pygments_lexer='postgres-console',
                 pygments_formatter="terminal256",
                 pygments_style="default"):
        '''
        Args:
            fmt: (str): The logging.Formatter format string
            datefmt (str): The logging.Formatter date format string
            style (str): The logging.Formatter format string type
            options (dict): Dict of options to pass to sqlparse.format()
            pygments_lexer (str): The name of the pygments lexer to use.
                Examples include: 'postgres-console', 'postgres', 'rql', 'sql',
                'sqlite3', 'mysql', 'plpgsql', 'tsql'
            pygments_formatter (str): The name of the pygments formatter to use.
                Examples include: 'terminal256', 'terminal', 'terminal16m', 'text'
            pygments_style (str): The name of the pygments formatter style to use.
        '''

        super(DjangoDbSqlColorFormatter, self).__init__(fmt=fmt,
                                                        datefmt=datefmt,
                                                        style=style)

        self.options = options or {'reindent': True,
                                   'keyword_case': 'upper'}

        # postgres-console, postgres, rql, sql, sqlite3, mysql, plpgsql, tsql
        self._lexer = get_lexer_by_name(pygments_lexer)

        pygments_style = get_style_by_name(pygments_style)

        # terminal256, terminal, terminal16m, text
        self._formatter = get_formatter_by_name(pygments_formatter, style=pygments_style)
コード例 #24
0
def highlight(sections, language, preserve_paths=True, outdir=None):
    """
    Highlights a single chunk of code using the **Pygments** module, and runs
    the text of its corresponding comment through **Markdown**.

    We process the entire file in a single call to Pygments by inserting little
    marker comments between each section and then splitting the result string
    wherever our markers occur.
    """

    if not outdir:
        raise TypeError("Missing the required 'outdir' keyword argument.")

    output = pygments.highlight(language["divider_text"].join(section["code_text"].rstrip() for section in sections),
                                language["lexer"],
                                formatters.get_formatter_by_name("html"))

    output = output.replace(highlight_start, "").replace(highlight_end, "")
    fragments = re.split(language["divider_html"], output)
    for i, section in enumerate(sections):
        section["code_html"] = highlight_start + \
            shift(fragments, "") + highlight_end
        try:
            docs_text = unicode(section["docs_text"])
        except UnicodeError:
            docs_text = unicode(section["docs_text"].decode('utf-8'))
        except NameError:
            docs_text = section['docs_text']
        section["docs_html"] = markdown(preprocess(docs_text,
                                                   preserve_paths=preserve_paths,
                                                   outdir=outdir))
        section["num"] = i

    return sections
コード例 #25
0
ファイル: cli.py プロジェクト: nonnib/drift-config
def pretty(ob, lexer=None):
    """
    Return a pretty console text representation of 'ob'.
    If 'ob' is something else than plain text, specify it in 'lexer'.

    If 'ob' is not string, Json lexer is assumed.

    Command line switches can be used to control highlighting and style.
    """
    if lexer is None:
        if isinstance(ob, basestring):
            lexer = 'text'
        else:
            lexer = 'json'

    if lexer == 'json':
        ob = json.dumps(ob, indent=4, sort_keys=True)

    if got_pygments:
        lexerob = get_lexer_by_name(lexer)
        formatter = get_formatter_by_name(PRETTY_FORMATTER, style=PRETTY_STYLE)
        #from pygments.filters import *
        #lexerob.add_filter(VisibleWhitespaceFilter())
        ret = highlight(ob, lexerob, formatter)
    else:
        ret = ob

    return ret.rstrip()
コード例 #26
0
    def hilite(self):
        if not self.filename:
            return CodeHilite.hilite(self)

        self.src = self.src.strip('\n')

        if self.lang is None:
            self._parseHeader()
        if pygments and self.use_pygments:
            try:
                lexer = get_lexer_by_name(self.lang)
            except ValueError:
                try:
                    if self.guess_lang:
                        lexer = guess_lexer(self.src)
                    else:
                        lexer = get_lexer_by_name('text')
                except ValueError:
                    lexer = get_lexer_by_name('text')
            formatter = get_formatter_by_name(
                'html',
                linenos=self.linenums,
                cssclass=self.css_class,
                style=self.style,
                noclasses=self.noclasses,
                hl_lines=self.hl_lines,
                wrapcode=True,
                filename=self.filename,
            )
            return highlight(self.src, lexer, formatter)

        return CodeHilite.hilite(self)
コード例 #27
0
def command(title, version, output):
    config = [{
        "theme": "",
        "prefix": ".highlight",
        "style": "default"
    }, {
        "theme": "materials-dark",
        "prefix": ".materials-dark .highlight",
        "style": "stata-dark"
    }, {
        "theme": "materials-light",
        "prefix": ".materials-light .highlight",
        "style": "stata-light"
    }]

    with open(output, "w") as printcss:
        print(f"/* {title} version {version}", file=printcss)
        print(" *", file=printcss)
        print(" * This is pygments.css. This file is generated with Pygments.",
              file=printcss)
        print(" *", file=printcss)
        print(" * See https://xsltng.docbook.org/", file=printcss)
        print(" *", file=printcss)
        print(" */", file=printcss)
        for theme in config:
            parsed_opts = {"style": theme["style"]}
            formatter = get_formatter_by_name("html", **parsed_opts)
            print(formatter.get_style_defs(theme["prefix"]), file=printcss)
コード例 #28
0
ファイル: copy_assets.py プロジェクト: osama-afifi/nikola
 def create_code_css():
     from pygments.formatters import get_formatter_by_name
     formatter = get_formatter_by_name('html', style=kw["code_color_scheme"])
     utils.makedirs(os.path.dirname(code_css_path))
     with codecs.open(code_css_path, 'wb+', 'utf8') as outf:
         outf.write(formatter.get_style_defs(kw["code.css_selectors"]))
         outf.write(kw["code.css_close"])
コード例 #29
0
ファイル: copy_assets.py プロジェクト: al3xandru/nikola
 def create_code_css():
     from pygments.formatters import get_formatter_by_name
     formatter = get_formatter_by_name('html', style=kw["code_color_scheme"])
     utils.makedirs(os.path.dirname(code_css_path))
     with codecs.open(code_css_path, 'wb+', 'utf8') as outf:
         outf.write(formatter.get_style_defs('pre.code'))
         outf.write("table.codetable { width: 100%;} td.linenos {text-align: right; width: 4em;}")
コード例 #30
0
 def ConvertCodeToHtml(self, code):
     from pygments import highlight
     from pygments.lexers import get_lexer_by_name
     from pygments.formatters import get_formatter_by_name
     lexer = get_lexer_by_name('python')
     formatter = get_formatter_by_name('html', noclasses=True)
     return highlight(code, lexer, formatter)
コード例 #31
0
def get_formatter_by_name(alias, **options):
    """Gets a formatter instance from its name or alias.
    This mimics the behavior of ``pygments.formatters.get_formatter_by_name()``.
    """
    if CACHE is None:
        load_or_build()
    names = CACHE["formatters"]["names"]
    if alias in names:
        modname, clsname = names[alias]
        mod = importlib.import_module(modname)
        cls = getattr(mod, clsname)
        formatter = cls(**options)
    else:
        # couldn't find formatter in cache, fallback to the hard way
        import inspect

        from pygments.formatters import get_formatter_by_name

        formatter = get_formatter_by_name(alias, **options)
        # add this filename to the cache for future use
        cls = type(formatter)
        mod = inspect.getmodule(cls)
        names[alias] = (mod.__name__, cls.__name__)
        write_cache(cache_filename())
    return formatter
コード例 #32
0
ファイル: jsontool.py プロジェクト: msztolcman/jsontool
def get_printer(mode='auto'):
    """
    Generate printer function.

    :param mode: string: always, never or auto
    :return:
    """
    def printer(data):
        print(data)

    if mode in ('auto', 'always'):
        try:
            from pygments import highlight
            from pygments.lexers import get_lexer_by_name
            from pygments.formatters import get_formatter_by_name

            if mode == 'always' or sys.stdout.isatty():
                lexer = get_lexer_by_name('json')
                formatter = get_formatter_by_name('terminal256')

                def printer(data):
                    print(highlight(data, lexer, formatter),
                          end='',
                          file=sys.stdout)
        except ImportError as e:
            if mode == 'always':
                import warnings
                warnings.warn(
                    'No pygments module available, cannot colorize output')

    return printer
コード例 #33
0
ファイル: history.py プロジェクト: ludovicchabant/Wikked
def diff_revs(wiki, user, rev, raw=False):
    diff = wiki.scm.diff(path=None, rev1=rev, rev2=None)
    if not raw:
        lexer = get_lexer_by_name('diff')
        formatter = get_formatter_by_name('html')
        diff = highlight(diff, lexer, formatter)
    return {'diff': diff, 'disp_rev': rev}
コード例 #34
0
 def format(self, code, language):
     if language == "":
         lexer = guess_lexer(code)
     else:
         lexer = get_lexer_by_name(language)
     formatter = get_formatter_by_name(self.formatname)
     return highlight(code, lexer, formatter)
コード例 #35
0
    def exec(self):
        """処理を実行します。"""
        # --------------------------------------------------------------------------------
        # pygments の基本的な使い方
        #   - http://pygments.org/
        #
        # pygments を利用する場合、必要なオブジェクトは以下の3つ
        #   - コード: ハイライト表示対象のコード
        #   - 解析器(lexer): コードを解析するためのオブジェクト
        #   - フォーマッタ: 最終的な出力を担当するオブジェクト
        #
        # lexer と formatter は、各実装クラスを直接つかってもいいが
        # 以下のヘルパー関数を使用しても取得できる
        #   - pygments.lexers.get_lexer_by_name()
        #     - 例えば、言語が python の場合は、"python" or "python3" となる
        #     - http://pygments.org/docs/lexers/
        #   - pygments.formatters.get_formatter_by_name()
        #     - 例えば、HTMLで出力したい場合は "html" となる
        #     - http://pygments.org/docs/formatters/
        #     - HtmlFormatterは便利だが、残念な事にHTML4形式で現状出力されてしまう。
        #
        # 必要なオブジェクトが揃ったら、後は pygments.highlight() に渡すと
        # 整形データが取得できる
        # --------------------------------------------------------------------------------
        code = """\
def hello():
    print('world')
    results = []
    for x in range(10):
        ressults.append(i for i in x)
        """
        lexer = get_lexer_by_name('python3')
        formatter = get_formatter_by_name('html',
                                          linenos=True,
                                          full=True,
                                          encoding='utf-8')

        # formatter に対して, 共通パラメータ [encoding] を指定した場合
        # 結果として受け取るデータの型は、bytes になる。指定していない場合、str となる。
        # HtmlFormatter にて encoding を指定しない場合、 charset の値が None となることに注意。
        html = highlight(code, lexer, formatter)
        if hasattr(html, 'decode'):
            html = html.decode('utf-8')
        pr('pygments.html', html)

        file_path = (pathlib.Path.home() / 'pygments_test.html').as_posix()
        with open(file_path, 'w') as out_fp:
            out_fp.write(html)

        preserve_file = True
        try:
            if sys.platform == 'win32':
                cmd = shlex.split(f'cmd /C start {file_path}')
            else:
                cmd = shlex.split(f'open {file_path}')
            subprocess.check_call(cmd, shell=False)
        finally:
            if not preserve_file:
                os.unlink(file_path)
コード例 #36
0
ファイル: codehilite.py プロジェクト: sonajeswani/website
    def hilite(self):
        """
        Pass code to the [Pygments](http://pygments.pocoo.org/) highliter with
        optional line numbers. The output should then be styled with css to
        your liking. No styles are applied by default - only styling hooks
        (i.e.: <span class="k">).

        returns : A string of html.

        """

        self.src = self.src.strip('\n')

        if self.lang is None:
            self._parseHeader()

        if pygments and self.use_pygments:
            try:
                lexer = get_lexer_by_name(self.lang)
            except ValueError:
                try:
                    if self.guess_lang:
                        lexer = guess_lexer(self.src)
                    else:
                        lexer = get_lexer_by_name('text')
                except ValueError:
                    lexer = get_lexer_by_name('text')
            lang = lexer.aliases[0]
            formatter = get_formatter_by_name('html',
                                              linenos=self.linenums,
                                              cssclass=self.css_class,
                                              style=self.style,
                                              noclasses=self.noclasses,
                                              hl_lines=self.hl_lines)
            hilited_html = highlight(self.src, lexer, formatter)
            if self.wrap_by_lang and self.lang:
                return '<div class="%(class)s-%(lang)s">%(html)s</div>\n' % {
                    'class': self.css_class,
                    'lang': self.lang.replace('+', '-'),
                    'html': hilited_html,
                }
            else:
                return hilited_html
        else:
            # just escape and build markup usable by JS highlighting libs
            txt = self.src.replace('&', '&amp;')
            txt = txt.replace('<', '&lt;')
            txt = txt.replace('>', '&gt;')
            txt = txt.replace('"', '&quot;')
            classes = []
            if self.lang:
                classes.append('language-%s' % self.lang)
            if self.linenums:
                classes.append('linenums')
            class_str = ''
            if classes:
                class_str = ' class="%s"' % ' '.join(classes)
            return '<pre class="%s"><code%s>%s</code></pre>\n' % \
                   (self.css_class, class_str, txt)
コード例 #37
0
ファイル: admin.py プロジェクト: barbuza/django-robust
 def traceback_code(self, task):
     formatter = get_formatter_by_name('html')
     if sys.version_info.major == 3:
         lexer = get_lexer_by_name('py3tb')
     else:
         lexer = get_lexer_by_name('pytb')
     style = formatter.get_style_defs('.highlight')
     return mark_safe('<style>{}</style><br/>{}'.format(style, highlight(task.traceback, lexer, formatter)))
コード例 #38
0
ファイル: pygments.py プロジェクト: 10sr/dowwner
def get_css(style: str, classname: str) -> Optional[str]:
    try:
        fmter = get_formatter_by_name(_FORMAT, style=style)
    except ClassNotFound:
        return None
    css = fmter.get_style_defs(f".{classname}")
    assert isinstance(css, str)
    return css
コード例 #39
0
 def _determine_formatter(style="default", colors=None, debug=False):
     colors = colors or _get_term_color_support()
     if debug:
         sys.stderr.write("Detected support for %s colors\n" % colors)
     if colors == 256:
         fmt_options = {'style': style}
     elif style in ('light', 'dark'):
         fmt_options = {'bg': style}
     else:
         fmt_options = {'bg': 'dark'}
     fmt_alias = 'terminal256' if colors == 256 else 'terminal'
     try:
         return get_formatter_by_name(fmt_alias, **fmt_options)
     except ClassNotFound as ex:
         if debug:
             sys.stderr.write(str(ex) + "\n")
         return get_formatter_by_name(fmt_alias)
コード例 #40
0
ファイル: pygmy.py プロジェクト: sbfaulkner/pygmy
 def post(self):
   language=self.request.get('language')
   code=self.request.get('code')
   try:
     lexer = get_lexer_by_name(language, stripall=True)
     formatter = get_formatter_by_name('html', linenos=True, cssclass='pygmy')
   except ClassNotFound, e:
     self.render_error(500, { 'error' : e })
コード例 #41
0
ファイル: copy_assets.py プロジェクト: jonhedson/nikola
            def create_code_css():
                from pygments.formatters import get_formatter_by_name

                formatter = get_formatter_by_name("html", style=kw["code_color_scheme"])
                utils.makedirs(os.path.dirname(code_css_path))
                with codecs.open(code_css_path, "wb+", "utf8") as outf:
                    outf.write(formatter.get_style_defs(["pre.code", "div.code pre"]))
                    outf.write("\ntable.codetable { width: 100%;} td.linenos {text-align: right; width: 4em;}\n")
コード例 #42
0
def highlight(context, body, syntax, format='html'):
    """Looks up the appropriate Pygments lexer for a given syntax
    and uses it to format the passed body.
    """
    lexer = get_lexer_by_name(syntax)
    formatter = get_formatter_by_name(format)

    return pygments.highlight(body, lexer, formatter)
コード例 #43
0
def highlight(context, body, syntax, format='html'):
    """Looks up the appropriate Pygments lexer for a given syntax
    and uses it to format the passed body.
    """
    lexer = get_lexer_by_name(syntax)
    formatter = get_formatter_by_name(format)
    
    return pygments.highlight(body, lexer, formatter)
コード例 #44
0
 def create_code_css():
     from pygments.formatters import get_formatter_by_name
     formatter = get_formatter_by_name('html', style=kw["code_color_scheme"])
     utils.makedirs(os.path.dirname(code_css_path))
     with io.open(code_css_path, 'w+', encoding='utf8') as outf:
         outf.write(kw["code.css_head"])
         outf.write(formatter.get_style_defs(kw["code.css_selectors"]))
         outf.write(kw["code.css_close"])
コード例 #45
0
ファイル: md.py プロジェクト: MagicSword/acrylamid
def get_pygments_style():
    try:
        from pygments.formatters import get_formatter_by_name
    except ImportError:
        return {}

    fmt = get_formatter_by_name('html', style='trac')
    return {'text/css': '/* Pygments */\n\n' + fmt.get_style_defs('.highlight')}
コード例 #46
0
def colorprint(data, output_format="yaml"):
    """ Colorized print for either a yaml or a json document given as argument
    """
    lexer = lexers.get_lexer_by_name(output_format)
    formatter = formatters.get_formatter_by_name("256")
    formatter.__init__(style=get_style_by_name('emacs'))
    colored = highlight(str(data, 'UTF-8'), lexer, formatter)
    sys.stdout.write(colored)
コード例 #47
0
ファイル: pprn.py プロジェクト: ms-jpq/py-dev
def pprn(format: str, theme: str, filename: Optional[PurePath],
         text: str) -> str:
    style = get_style_by_name(theme)
    formatter = get_formatter_by_name(format, style=style)

    lexer = _get_lexer(filename, text)
    pretty = highlight(text, lexer=lexer, formatter=formatter)
    return cast(str, pretty)
コード例 #48
0
def format_HTML(filepath):
    with open(filepath, 'r') as file_to_read:
        data = file_to_read.read()
        lexer_object = guess_lexer_for_filename(filepath, data)
        pyg_formatter = get_formatter_by_name('html',
                                              linenos='table',
                                              style='monokai')
        return highlight(data, lexer_object, pyg_formatter)
コード例 #49
0
ファイル: templating.py プロジェクト: trompette/blog
def pygments_style(style):
    try:
        string = get_formatter_by_name('html', style=style).get_style_defs('.highlight')
    except ClassNotFound:
        logger.warning('Unknown Pygments style %s', style)
        string = '/* nothing */'

    return string
コード例 #50
0
def test_get_formatters():
    # test that the formatters functions work
    x = formatters.get_formatter_by_name("html", opt="val")
    assert isinstance(x, formatters.HtmlFormatter)
    assert x.options["opt"] == "val"

    x = formatters.get_formatter_for_filename("a.html", opt="val")
    assert isinstance(x, formatters.HtmlFormatter)
    assert x.options["opt"] == "val"
コード例 #51
0
 def get_text(self, node, **options):
     if options.get('plain'):
         return node.content
     formatter_name = options.get('formatter_name')
     if formatter_name:
         from pygments import highlight
         from pygments.formatters import get_formatter_by_name
         formatter = get_formatter_by_name(formatter_name)
         return highlight(node.content, node.lexer, formatter)
     return node.content
コード例 #52
0
def higlight_code(text):
    try:
        from pygments.lexers import get_lexer_by_name
        from pygments.formatters import get_formatter_by_name
        from pygments.styles import ClassNotFound
    except ImportError:
        return text
    language = 'python'
    lexer = get_lexer_by_name(language)
    if not lexer:
        return text
    try:
        formatter = get_formatter_by_name('terminal256', style='alan')
    except ClassNotFound:
        formatter = get_formatter_by_name('terminal256', style='monokai')
    if not formatter:
        return text
    import pygments
    return pygments.highlight(text, lexer, formatter)
コード例 #53
0
ファイル: app.py プロジェクト: liuyug/rsteditor-qt
 def onCodeStyleChanged(self, label, checked):
     self.pygments = label
     self.settings.setValue('pygments', self.pygments)
     pygments_style_path = os.path.join(
         __home_data_path__, 'themes', 'pygments.css')
     with open(pygments_style_path, 'wb') as f:
         if self.pygments != 'null':
             formatter = get_formatter_by_name('html', style=self.pygments)
             f.write(toBytes(formatter.get_style_defs('pre.code')))
     self.previewCurrentText()
コード例 #54
0
 def formatter(self):
     colors = _get_term_color_support()
     if self.debug:
         sys.stderr.write("Detected support for %s colors\n" % colors)
     if colors == 256:
         fmt_options = {'style': self.style}
     elif self.style in ('light', 'dark'):
         fmt_options = {'bg': self.style}
     else:
         fmt_options = {'bg': 'dark'}
     from pygments.formatters import get_formatter_by_name
     import pygments.util
     fmt_alias = 'terminal256' if colors == 256 else 'terminal'
     try:
         return get_formatter_by_name(fmt_alias, **fmt_options)
     except pygments.util.ClassNotFound as ex:
         if self.debug:
             sys.stderr.write(str(ex) + "\n")
         return get_formatter_by_name(fmt_alias)
コード例 #55
0
ファイル: highlighting.py プロジェクト: trompette/blog
def highlight_code(code, lang):
    code = cleanup_code(code)

    try:
        lexer = get_lexer_by_name(lang, stripall=False)
    except ClassNotFound:
        logger.warning('Unknown Pygments language %s', lang)
        lexer = guess_lexer(code)

    return highlight(code, lexer, get_formatter_by_name('html'))
コード例 #56
0
ファイル: output.py プロジェクト: 0xcharly/pycr
    def __initialize(cls):
        """Initialize the object if needed"""

        if cls.formatter is None:
            name = Config.get("core.color", Formatter.NO_COLOR)

            if name == "auto":
                name = "terminal256"

            cls.formatter = get_formatter_by_name(name, style=OutputStyle, encoding=Formatter.ENCODING)
コード例 #57
0
ファイル: output.py プロジェクト: 0xcharly/pycr
    def raw_format(cls, tokens):
        """Format the given list of tokens as a simple string (no color)

        :param tokens: the input list of token to format
        :type tokens: tuple[Token, str]
        :rtype: str
        """

        formatter = get_formatter_by_name(Formatter.NO_COLOR, encoding=Formatter.ENCODING)
        return pygments.format(tokens, formatter)
コード例 #58
0
ファイル: jinja2.py プロジェクト: fabiommendes/codeschool
def highlight(code, lang='python'):
    """
    Highlights source in the given programming language.
    """

    formatter = get_formatter_by_name('html')
    try:
        lexer = get_lexer_by_name(lang)
    except ClassNotFound:
        lexer = get_lexer_by_name('python')
    return Markup(pygments_highlight(code, lexer, formatter))
コード例 #59
0
ファイル: test_basic_api.py プロジェクト: erickt/pygments
    def test_get_formatters(self):
        a = self.assert_
        ae = self.assertEquals
        # test that the formatters functions work
        x = formatters.get_formatter_by_name("html", opt="val")
        a(isinstance(x, formatters.HtmlFormatter))
        ae(x.options["opt"], "val")

        x = formatters.get_formatter_for_filename("a.html", opt="val")
        a(isinstance(x, formatters.HtmlFormatter))
        ae(x.options["opt"], "val")