{"id":34107515,"url":"https://github.com/johndoe31415/pyradium","last_synced_at":"2026-04-09T00:32:57.146Z","repository":{"id":38828315,"uuid":"242831731","full_name":"johndoe31415/pyradium","owner":"johndoe31415","description":"Creating HTML presentations with LaTeX-ish features from XML source","archived":false,"fork":false,"pushed_at":"2025-05-21T12:37:42.000Z","size":2296,"stargazers_count":8,"open_issues_count":9,"forks_count":6,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-12-17T01:45:31.363Z","etag":null,"topics":["html","latex","presentation","xml"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/johndoe31415.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-02-24T20:05:10.000Z","updated_at":"2025-05-21T12:37:45.000Z","dependencies_parsed_at":"2023-02-12T21:31:27.590Z","dependency_job_id":"1e7bce54-d6af-4edb-af54-ad480781e448","html_url":"https://github.com/johndoe31415/pyradium","commit_stats":{"total_commits":472,"total_committers":2,"mean_commits":236.0,"dds":0.004237288135593209,"last_synced_commit":"c770a735daa16783cad33507729dd7034fb1bc94"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/johndoe31415/pyradium","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johndoe31415%2Fpyradium","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johndoe31415%2Fpyradium/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johndoe31415%2Fpyradium/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johndoe31415%2Fpyradium/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/johndoe31415","download_url":"https://codeload.github.com/johndoe31415/pyradium/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/johndoe31415%2Fpyradium/sbom","scorecard":{"id":528337,"data":{"date":"2025-08-11","repo":{"name":"github.com/johndoe31415/pyradium","commit":"9683c56b5e45e37a36cca64bf35494cc7cccd7f7"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.4,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/CI.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"1 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/CI.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/johndoe31415/pyradium/CI.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/CI.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/johndoe31415/pyradium/CI.yml/master?enable=pin","Warn: containerImage not pinned by hash: docker/mathjax/Dockerfile:1: pin your Docker image by updating node:22-alpine to node:22-alpine@sha256:1b2479dd35a99687d6638f5976fd235e26c5b37e8122f786fcd5fe231d63de5b","Warn: downloadThenRun not pinned by hash: docker/mathjax/Dockerfile:14","Warn: npmCommand not pinned by hash: docker/mathjax/Dockerfile:21","Warn: npmCommand not pinned by hash: docker/mathjax/Dockerfile:29","Warn: npmCommand not pinned by hash: docker/mathjax/Dockerfile:33","Warn: pipCommand not pinned by hash: .github/workflows/CI.yml:26","Warn: pipCommand not pinned by hash: .github/workflows/CI.yml:27","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 downloadThenRun dependencies pinned","Info:   0 out of   3 npmCommand dependencies pinned","Info:   0 out of   2 pipCommand dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}}]},"last_synced_at":"2025-08-20T05:02:51.999Z","repository_id":38828315,"created_at":"2025-08-20T05:02:51.999Z","updated_at":"2025-08-20T05:02:51.999Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31580020,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["html","latex","presentation","xml"],"created_at":"2025-12-14T18:06:48.389Z","updated_at":"2026-04-09T00:32:57.138Z","avatar_url":"https://github.com/johndoe31415.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# pyradium\n[![Build Status](https://github.com/johndoe31415/pyradium/actions/workflows/CI.yml/badge.svg)](https://github.com/johndoe31415/pyradium/actions/workflows/CI.yml)\n\nThis is a tool which takes XML input that describes a presentation and renders\nit into a presentation HTML. It borrows ideas from LaTeX-beamer but also\ncombines the flexible way of creating visually appealing documents using\nHTML/CSS. it In particular, the features are:\n\n  * Input the slide content in machine-readable form, no WYSIWYG. This is like\n    LaTeX-beamer, but pyradium uses XML as input format. This allows for\n    version controlled presentation input data as well.\n  * Acronyms, automatic table of contents, cross-references, LaTeX equations\n    are all supported.\n  * Delegation of scripts that generate content for inclusion. For example, a\n    'crypto helper' can be programmed as an external script that allows writing\n    slides that only specify input data, cipher and key. Then the ciphertext is\n    automatically computed and errors on the slides are avoided.\n  * Syntax highlighting of code or terminal output (using pygments).\n  * Output is easily customizable: HTML and CSS are used as the underlying\n    technologies. Creation of new slide templates is simple (e.g., a\n    three-column design or a \"quote\" slide template).\n  * Use the advantages of HTML and ECMAScript to provide features like\n    presentation feedback: Make it easy for people to report typos and general\n    feedback about the presentation.  Make submission of that info as easy as\n    possible (low entry barrier). Also it records which git revsion was used to\n    typeset the document so I know exactly if I've already fixed an issue or not if\n    it gets reported multiple times.\n\n## Installation\npyradium is available on PyPi, so installation is as easy as\n\n```\n$ pip3 install pyradium\n```\n\nFor usage of LaTeX formulas, you need pdflatex and ImageMagick. For SVG\nrendering you need Inkscape. For plotting of graphs, you need gnuplot. To\nrender Graphviz graphs (e.g., a DAG) you need Graphviz installed. To use\ncontinuous building, pyradium relies on the inotifytools:\n\n```\n# apt-get install texlive texlive-latex-extra ghostscript imagemagick inkscape gnuplot inotify-tools graphviz fontconfig qrencode\n```\n\nIf you want to use spellchecking of your presentations, you need to install\n[LanguageTool](https://languagetool.org/download/) as well.\n\n## Example\nYou can view an example of a presentation [here](https://johndoe31415.github.io/pyradium-docs/).\nThe source for that presentation can be found [here](https://github.com/johndoe31415/pyradium/tree/master/examples).\n\n## Input Documents\nYou can see an example XML file in the [examples/\nsubdirectory](https://github.com/johndoe31415/pyradium/tree/master/examples).\nXML namespaces are used to distinguish tags which are renderer commands, i.e.,\nwhich have some special interpretation.  All other content is essentially pure\nHTML.\n\n## Display\nYou can view the presentation in a browser. Hitting \"g\" lets you goto a\nspecific slide while pressing \"f\" starts the full-screen view.\n\n## Browser\npyradium presentations work in Chromium and (presumably) Chrome. Firefox is not\nsupported. While they did implement support for the critical CSS \"zoom\"\nproperty [after only 17 years](https://bugzilla.mozilla.org/show_bug.cgi?id=390936),\ntheir implementation differs from that of Chromium so substantially\n([Bug details](https://github.com/johndoe31415/pyradium/issues/66)) that it\ndoes not justify me spending time on fixing this issue. Feel free to spend your\nown time on fixing it and send a PR if you disagree with me and value Firefox\nsupport.\n\n## Third-Party Components\nThere are several external components that pyradium uses:\n\n  * The default template \"Antonio\" is adapted from\n    [Jimena Catalina at SlideCarnival](https://www.slidescarnival.com/antonio-free-presentation-template/84).\n    It is licensed under CC-BY 4.0.\n  * The font Fira Sans is included, from the [Google Fonts Project](https://fonts.google.com/specimen/Fira+Sans). \n    It is licensed under the OFL.\n  * The font Latin Modern Mono is included, from [GUST](http://www.gust.org.pl/projects/e-foundry/latin-modern).\n    It is licensed under the GUST font license.\n  * The pause end ringtone is taken from Jason Steele's [FilmCow Royalty Free Sound Effects Library](https://filmcow.itch.io/filmcow-sfx).\n  * [MathJAX](https://www.mathjax.org/) is licensed under the [Apache License Version 2.0, January 2004](https://github.com/mathjax/MathJax/blob/master/LICENSE)\n\nAll third party licenses can be found in the [licenses/ subdirectory](https://github.com/johndoe31415/pyradium/tree/master/licenses)\nsubdirectory. Additionally, detailed attribution information is also provided\nas part of the template itself in the `configuration.json` file of the\nrespective template. For example, [this](https://github.com/johndoe31415/pyradium/blob/master/pyradium/templates/antonio/configuration.json)\nis the configuration file of the \"antonio\" template.\n\n## Simple Usage\nFirst, you have to create a presentation. For this example, we'll use the\n`example.xml` that is provided. Firstly, it needs to be rendered:\n\n```\n$ ./pyradium.py render -I examples/sub/ examples/example.xml rendered/\n```\n\nYou'll notice that the `-I` parameter defines a subdirectory that is searched\nfor files. This is a feature of pyradium as well (it allows you to distribute\nand organize large presentation into multiple files you can then combine into\none). Once it's rendered, you can create a web server to serve it:\n\n```\n$ ./pyradium.py serve rendered/\nServing: http://127.0.0.1:8123\n```\n\nNow simply redirect your browser there and enjoy the view.\n\n## Complex Usage\nThere are of course more options to choose from. Read the help pages to learn\nmore. To get an overview over the available facilities:\n\n```\n$ ./pyradium.py --help\nusage: ./pyradium.py [command] [options]\n\nHTML presentation renderer\n\nAvailable commands:\n    render             Render a presentation\n    showstyleopts      Show all options a specific style permits\n    serve              Serve a rendered presentation over HTTP\n    acrosort           Sort an acryonym database\n    purge              Purge the document cache\n    hash               Create a hash of a presentation and all dependencies to\n                       detect modifications\n    dumpmeta           Dump the metadata dictionary in JSON format\n    spellcheck         Spellcheck an XML presentation file\n    dictadd            Add false-positive spellcheck errors to the dictionary\n\nversion: pyradium v0.0.6rc0\n\nOptions vary from command to command. To receive further info, type\n    ./pyradium.py [command] --help\n```\n\nEach facility has its own help page. The `render` facility, for example:\n\n```\n$ ./pyradium.py render --help\nusage: ./pyradium.py render [--image-max-dimension pixels] [-I path]\n                            [-R path:uripath] [--template-dir path] [-t name]\n                            [-o key=value] [-g width x height] [-r]\n                            [--collapse-animation] [-i filename] [-j filename]\n                            [-e {interactive,timer,info,pygments,acronyms}]\n                            [-d {interactive,timer,info,pygments,acronyms}]\n                            [-l] [--re-render-watch path] [-f] [-v] [--help]\n                            infile outdir\n\nRender a presentation\n\npositional arguments:\n  infile                Input XML file of the presentation.\n  outdir                Output directory the presentation is put into.\n\noptional arguments:\n  --image-max-dimension pixels\n                        When rendering imaages, specifies the maximum\n                        dimension they're downsized to. The lower this value,\n                        the smaller the output files and the lower the\n                        quality. Defaults to 1920 pixels.\n  -I path, --include-dir path\n                        Specifies an additional include directory in which,\n                        for example, images are located which are referenced\n                        from the presentation. Can be issued multiple times.\n  -R path:uripath, --resource-dir path:uripath\n                        Specifies the resource directory both as the actual\n                        deployment directory and the URI it has when serving\n                        the presentation. By default, the deployment directory\n                        of resources is identical to the output directory and\n                        the uripath is '.'.\n  --template-dir path   Specifies an additional template directories in which\n                        template style files are located. Can be issued\n                        multiple times.\n  -t name, --template-style name\n                        Template style to use. Defaults to antonio.\n  -o key=value, --style-option key=value\n                        Pass template-style specific options to the renderer.\n                        Must always be in the form of \"key=value\", but what\n                        keys are permissible depends on the chosen style. Use\n                        the 'showstyleopts' command to find out what is\n                        supported for a given template.\n  -g width x height, --geometry width x height\n                        Slide geometry, in pixels. Defaults to 1280x720.\n  -r, --remove-pauses   Ignore all pause directives and just render the final\n                        slides.\n  --collapse-animation  Do not render animations as multiple slides, just show\n                        one complete slide.\n  -i filename, --index-filename filename\n                        Gives the name of the presentation index file.\n                        Defaults to index.html. Useful if you want to render\n                        multiple presentations in one subdirectory.\n  -j filename, --inject-metadata filename\n                        Gives the option to inject metadata into the\n                        presentation. Must point to a JSON filename and will\n                        override the respective metadata fields of the\n                        presentation. Useful for changing things like the\n                        presentation date on the command line.\n  -e {interactive,timer,info,pygments,acronyms}, --enable-presentation-feature {interactive,timer,info,pygments,acronyms}\n                        Enable a specific presentation feature. Can be one of\n                        interactive, timer, info, pygments, acronyms and can\n                        be given multiple times.\n  -d {interactive,timer,info,pygments,acronyms}, --disable-presentation-feature {interactive,timer,info,pygments,acronyms}\n                        Disable a specific presentation feature. Can be one of\n                        interactive, timer, info, pygments, acronyms and can\n                        be given multiple times.\n  -l, --re-render-loop  Stay in a continuous loop, re-rendering the\n                        presentation if anything changes.\n  --re-render-watch path\n                        By default, all include files and the template\n                        directory is being watched for changes. This option\n                        gives additional files or directories upon change of\n                        which the presentation should be re-rendered.\n  -f, --force           Overwrite files in destination directory if they\n                        already exist.\n  -v, --verbose         Increase verbosity. Can be specified more than once.\n  --help                Show this help page.\n```\n\n\n## Spellchecking slides\nYou can easily spellcheck slides when you have LanguageTool installed. It can\neither start the Java server itself (then, pyradium needs the path to the\n`languagetool-server.jar` binary) or you can start the server yourself and just\npass a pointer to the URI to pyradium.\n\nSince the former case is easier, we'll show it here:\n\n```\n$ pyradium spellcheck -j ~/lt/languagetool-server.jar presentation.xml\nSlide 4 content [line 46, col 53] \"each\": Possible typo: you repeated a word (suggest each)\nSlide 4 content [line 49, col 75] \"cURL\": Possible spelling mistake found. (suggest curl or Carl or cure)\nSlide 4 content [line 49, col 81] \"Botan\": Possible spelling mistake found. (suggest Botany or Wotan or OTAN)\nSlide 5 content [line 56, col 64] \"gz\": Possible spelling mistake found. (suggest go or GB or GHz)\nSlide 6 content [line 66, col 90] \"testcases\": Possible spelling mistake found. (suggest test cases)\nSlide 13 content [line 166, col 32] \"monoalphabetic\": Possible spelling mistake found.\nSlide 17 content [line 205, col 51] \"undesireable\": Possible spelling mistake found. (suggest undesirable)\n```\n\nYou can also generate a vim errorfile so that you can easily go through all the\nmistakes in vi:\n\n```\n$ pyradium spellcheck -j ~/lt/languagetool-server.jar -m vim -o errfile.vim presentation.xml\n```\n\nThen you can start vi to correct mistakes:\n\n```\n$ vi -q errfile.vim\n```\n\nThere is also a more powerful variant of errorfile, but that is incompatible\nwith the default patterns in vi; you'll have to create a custom errorfile\nformat for it to work with vi. However, it contains additional metadata that\nallows you to later on also add false positives to a dictionary.\n\nTo create such an extended vi errorfile, use:\n\n```\n$ pyradium spellcheck -j ~/lt/languagetool-server.jar -m evim -o errfile.evim presentation.xml\n```\n\nYou can also specify that automatically vi should be opened on that errorfile\nwith the correct parameters:\n\n```\n$ pyradium spellcheck -j ~/lt/languagetool-server.jar -m evim --vim -o errfile.evim presentation.xml\n```\n\nAlternatively, you can specify the pattern yourself on the command line:\n\n```\n$ vi -c ':set errorformat=%[A-Za-z0-9/+=]%\\\\\\\\+::%f::%l::%c::%m' -c ':cf errfile.evim'\n```\n\nIf false positives remain, you can edit the errorfile itself and remove all entries that were not legit (i.e., so that the errorfile only contains false positives). Then you can simply\n\n```\n$ pyradium dictadd errfile.evim\nFinding 13 of 17:\n\"Vigenère\": Possible spelling mistake found.\nOffense: \u003e Vigenère \u003c\n   [A]dd word to dictionary\n   Add word to [g]lobal dictionary (for all languages, e.g., names)\n   Add specific [c]ontext to dictionary\n   Jump to [p]previous finding\n   Do [n]othing with this match (default)\nYour choice: \n```\n\nIt then asks for each offense to which dictionary it should be added. The\ndictionary file is `~/.config/pyradium/dictionary.json`.\n\n## vim Integration\nBy copying the file `xml_pyradium.xml` to\n`~/.vim/after/ftplugin/xml_pyradium.vim` vim gains a pyradium menu (when\nediting pyradium XML files) over which templates can be easily inserted and\nspecific keybdindings (e.g., Ctrl-Shift-B for bold, Ctrl-Shift-I for italics,\nCtrl-Shift-A for links, etc.):\n\n```\n$ mkdir -p ~/.vim/after/ftplugin/ \u0026\u0026 cp xml_pyradium.vim ~/.vim/after/ftplugin/xml_pyradium.vim\n```\n\n## Configuration file\nYou can set a global pyradium JSON configuration file in\n`~/.config/pyradium/configuration.json`. Currently, this only allows to specify\na default LanguageTool installation (either a JAR filename or a URI to use).\nExample:\n\n```json\n{\n\t\"spellcheck\": {\n\t\t\"jar\": \"/opt/LanguageTool-6.0/languagetool-server.jar\"\n\t}\n}\n```\n\n## License\npyradium is licensed under the GNU GPL-3.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjohndoe31415%2Fpyradium","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjohndoe31415%2Fpyradium","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjohndoe31415%2Fpyradium/lists"}