Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/crowsonkb/pyparsing-highlighting
Syntax highlighting for prompt_toolkit and HTML with pyparsing.
https://github.com/crowsonkb/pyparsing-highlighting
prompt-toolkit pyparsing python-library syntax-highlighting
Last synced: about 1 month ago
JSON representation
Syntax highlighting for prompt_toolkit and HTML with pyparsing.
- Host: GitHub
- URL: https://github.com/crowsonkb/pyparsing-highlighting
- Owner: crowsonkb
- License: mit
- Created: 2019-01-07T08:11:30.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2019-06-02T19:56:50.000Z (over 5 years ago)
- Last Synced: 2024-09-13T03:19:56.630Z (2 months ago)
- Topics: prompt-toolkit, pyparsing, python-library, syntax-highlighting
- Language: Python
- Homepage:
- Size: 128 KB
- Stars: 9
- Watchers: 4
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
- License: LICENSE
Awesome Lists containing this project
README
pyparsing-highlighting
======================Syntax highlighting with `pyparsing `_, supporting both HTML output and `prompt_toolkit `_–style terminal output. The ``PPHighlighter`` class can also be used as a lexer for syntax highlighting as you type in prompt_toolkit. It is compatible with existing `Pygments `_ styles.
The main benefit of pyparsing-highlighting over Pygments is that pyparsing parse expressions are both more powerful and easier to understand than Pygments lexers. pyparsing implements `parsing expression grammars `_ using `parser combinators `_, which means that higher level parse expressions are built up in Python code out of lower level parse expressions in a straightforward to construct, readable, modular, well-structured, and easily maintainable way.
See `the official pyparsing documentation `_ or `my unofficial (epydoc) documentation `_; read the pyparsing-highlighting documentation on `readthedocs `_.
Requirements
------------- `Python `_ 3.5+
Note that `PyPy `_, a JIT compiler implementation of Python, is often able to achieve around 5x the performance of CPython, the reference Python implementation.
- `pyparsing `_
- `prompt_toolkit `_ 2.0+
- `Pygments `_ (optional; needed to use Pygments styles)Installation
------------.. code:: bash
pip3 install -U pyparsing-highlighting
Or, after cloning the repository on GitHub:
.. code:: bash
python3 setup.py install
(or, with PyPy):
.. code:: bash
pypy3 setup.py install
Examples
--------The following code demonstrates the use of ``PPHighlighter``:
.. code:: python
from pp_highlighting import PPHighlighter
from prompt_toolkit.styles import Style
import pyparsing as pp
from pyparsing import pyparsing_common as ppcdef parser_factory(styler):
a = styler('class:int', ppc.integer)
return pp.delimitedList(a)pph = PPHighlighter(parser_factory)
style = Style([('int', '#528f50')])
pph.print('1, 2, 3', style=style)This prints out the following to the terminal:
.. image:: https://raw.githubusercontent.com/crowsonkb/pyparsing-highlighting/master/docs/source/example_ints.png
:width: 56
:height: 18
:alt: 1, 2, 3The following code generates HTML:
.. code:: python
pph.highlight_html('1, 2, 3')
The output is:
.. code:: HTML
1, 2, 3There is also a lower-level API—:code:`pph.highlight('1, 2, 3')` returns the following::
FormattedText([('class:int', '1'), ('', ', '), ('class:int', '2'), ('', ', '), ('class:int', '3')])
A ``FormattedText`` instance can be passed to ``prompt_toolkit.print_formatted_text()``, along with a ``Style`` mapping the class names to colors, for display on the terminal. See the prompt_toolkit `formatted text documentation `_ and `formatted text API documentation `_.
``PPHighlighter`` can also be passed to a ``prompt_toolkit.PromptSession`` as the ``lexer`` argument, which will perform syntax highlighting as you type. For examples of this, see ``examples/calc.py``, ``examples/json_pph.py``, ``examples/repr.py``, and ``examples/sexp.py``. The examples can be run by (from the project root directory):
.. code:: bash
python3 -m examples.calc
python3 -m examples.json_pph
python3 -m examples.repr
python3 -m examples.sexp