Skip to main content

Pygments plugin for MMT surface syntax (lexer & style)

Project description

PyPI Build Status Codacy Badge GitHub License PRs Welcome    | GitHub Repo | Collection of rendered codes

mmtpygments: Pygments plugin for MMT surface syntax

To support syntax highlighting of the MMT Surface Syntax from the MMT project this package is a Pygments plugin including

  • a Pygments lexer (mmt)
  • a recommended Pygments style for it (mmtdefault)
  • and experimentally a Pygments lexer for MMT relational data (mmtrel).

Collection of rendered codes: click here
Screenshot:
Screenshot of highlighted MMT code

Installation

Via Pip (recommended)

  1. pip install Pygments mmtpygments

  2. Use as you wish with Pygments, e.g. run on CLI:

    pygmentize -f html -l mmt -O full,style=mmtdefault -o test.html test.mmt

    This tells Pygments to use the HTML formatter (-f), the MMT lexer (-l) and to output a full HTML file using the mmtdefault style (-O) rendered of test.mmt into test.html (-o).

Usage in LaTeX with minted

minted is a LaTeX package rendering codes with Pygments as the backend.

% You MUST USE XeLaTeX (or any other LaTeX-derivative which supports Unicode)
\usepackage{fontspec}

% Download GNU Unifont from http://unifoundry.com/unifont/index.html
% And save it, say, as "fonts/unifont-12.1.02.ttf"
\newfontfamily\unifont{unifont-12.1.02.ttf}[Path=./fonts/,NFSSFamily=unifont]

% Disable caching for debugging purposes (increases compilation times!)
\usepackage[cache=false]{minted}
\setminted{
	fontfamily=unifont
}

\newminted[mmtcode]{mmt}{}
\newmintinline[mmtinline]{mmt}{}
\newmintedfile[mmtfile]{mmt}{}

\begin{document}
	% Variant 1: Code given in LaTeX, rendered in display mode
	\begin{mmtcode}
		theory MyTheory = c : type ❘ # abc ❙❚
	\end{mmtcode}

	% Variant 2: Code given in LaTeX, rendered inline
	% You can use any delimiter you like, here we use /
	\mmtinline/theory MyTheory = c : type ❘ # abc ❙❚/

	% Variant 3: Code given externally in file, rendered in display mode
	\mmtfile{your-mmt-file.mmt}
\end{document}

LaTeX Beamer: Use the fragile option for frames embedding codes: \begin{frame}[fragile] ... \end{frame}

See the minted manual for more information on how to customize it.

Common Error: Rendered PDF shows tab characters of source

If you tab characters in the MMT source being highlighted and they are shown in the PDF rendered by XeLaTeX, you face a known bug of XeLaTeX ([1], [2]). It can be solved by passing -8bit to XeLaTeX.

image

Development

  1. Install pipenv, which provides a consistent Python, pip and package environment locked in the committed Pipfile and Pipfile.lock files.
  2. git submodule init
  3. git submodule update

Testing

  1. cd mmtpygments/test
  2. pipenv run python test.py ./ (returns non-zero exit code on failure)
  3. Open index.html in a browser to see failures visually (red rectangles).

This test.py runs the lexer on large MMT archives containing a lot of MMT surface syntax. It recursively searches for MMT files in mmtpygments/test/data, on which it then runs the provided lexer and Pygment's HtmlFormatter. The rendered versions are written next to the original *.mmt files with an .html extension. Furthermore, index.html and amalgamation.html are generated to link and display the results, respectively.

The Travis build automatically runs test.py and deploys the results on the gh-pages branch, see https://comfreek.github.io/mmtpygments/ and especially https://comfreek.github.io/mmtpygments/mmtpygments/test/index.html.

Development

For tinkering and testing the lexer, it is recommended to employ the same testing infrastructure as described above. Even though the Travis build fails on lexing error, test.py actually doesn't -- it just returns a non-zero exit code. In fact, it even generates the HTML renderings with red rectangles around lexing errors. Hence, while tinkering with the lexer, just regularly run test.py and look at the index.html locally in your browser to see any errors.

Publishing

# Packaging
$ pipenv run python setup.py sdist bdist_wheel

# Checking if packages are okay (PyPi server will do the same)
$ pipenv run twine check dist/*

# Upload to Test PyPi repository
$ pipenv run twine upload --repository-url https://test.pypi.org/legacy/ dist/*

# Upload to real PyPi repository
$ pipenv run twine upload dist/*

For future maintainers: necessary changes in case of repository movement

In case you wish to host this repository or a fork thereof somewhere else, these are the places where you have to make changes:

  • README.md: Change all links to deployed gh-pages branch render results accordingly.
  • .travis.yml: Change the base path with which python test.py is run to your hosting URI.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mmtpygments-0.2.0.tar.gz (9.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mmtpygments-0.2.0-py3-none-any.whl (10.7 kB view details)

Uploaded Python 3

File details

Details for the file mmtpygments-0.2.0.tar.gz.

File metadata

  • Download URL: mmtpygments-0.2.0.tar.gz
  • Upload date:
  • Size: 9.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.14.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.3

File hashes

Hashes for mmtpygments-0.2.0.tar.gz
Algorithm Hash digest
SHA256 4e07b7ccb0ce69b928ba48c1e42da9f42b0dc57897ba167a8e95c7fc60cb42dd
MD5 39410a5ee8111b26246ee78336f75678
BLAKE2b-256 50bab5dc6a8093676dcf46fe34ce6139a104cb3f8deb337b7d4ba055242c441a

See more details on using hashes here.

File details

Details for the file mmtpygments-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: mmtpygments-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 10.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.14.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.35.0 CPython/3.7.3

File hashes

Hashes for mmtpygments-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2d7583b987f1a6ba38e29240454c5e027143e9828cfb7d957de9f6a133154078
MD5 8e7312d98910e54f1ccf058d10f6670e
BLAKE2b-256 d978ec27b1d01071a2e550d5fb3422297150f61074ed941b04f2cba36dee0ec5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page