{"id":24327600,"url":"https://github.com/sesodesa/rustla","last_synced_at":"2025-09-27T12:31:07.743Z","repository":{"id":57665705,"uuid":"325591379","full_name":"SeSodesa/rustla","owner":"SeSodesa","description":"The Master's Thesis project of Santtu Söderholm, a reStructuredText to LaTeX transpiler/compiler.","archived":false,"fork":false,"pushed_at":"2021-05-28T13:57:38.000Z","size":2128,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-16T13:16:08.494Z","etag":null,"topics":["compiler","latex","restructuredtext","restructuredtext-parser","rust","transpiler"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SeSodesa.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.rst","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-12-30T16:00:10.000Z","updated_at":"2023-01-28T04:41:21.000Z","dependencies_parsed_at":"2022-09-14T13:01:01.752Z","dependency_job_id":null,"html_url":"https://github.com/SeSodesa/rustla","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SeSodesa%2Frustla","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SeSodesa%2Frustla/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SeSodesa%2Frustla/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SeSodesa%2Frustla/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SeSodesa","download_url":"https://codeload.github.com/SeSodesa/rustla/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":234435248,"owners_count":18832092,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["compiler","latex","restructuredtext","restructuredtext-parser","rust","transpiler"],"created_at":"2025-01-17T22:14:00.571Z","updated_at":"2025-09-27T12:31:07.348Z","avatar_url":"https://github.com/SeSodesa.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"ruSTLa - rSTLa in Rust\n======================\n\nruSTLa is an implementation of the rSTLa (reStructuredText → LaTeX) transpiler,\nwritten in the Rust programming language. rSTLa itself is an inverse transpiler to the\nLarST (LaTeX → reStructuredText) transpiler written by `Tomi Janhunen`_.\n\n.. _`Tomi Janhunen`: https://www.tuni.fi/fi/tomi-janhunen\n\nruSTLa was originally written as the \"practical part\"\nof Santtu Söderholm's Master's Thesis. In other words:\n\n    Copyright © 2020 Santtu Söderholm\n\nNote about the state of the project\n-----------------------------------\n\nruSTLa is still very much a work in progress. For example reStructuredText tables and many directives\nare not yet supported, as can be witnessed by looking into the files ``src/parser/table_parsers``\nand ``src/parser/directive_parsers``. Still, it was deemed appropriate to release it now,\nas the actual thesis writing project is nearing its end and the (rather simple) software architecture has been\nset in stone, moving towards version 1.0.0.\n\nThis tool can therefore help you with tranferring course materials from reStructuredText\nto the LarST format, but certain structures will need to be transferred by the user themselves.\n\n.. admonition:: Todo\n\n    Add information about missing constructs.\n\nBuild instructions\n------------------\n\nIf you wish to build the project yourself, the easiest way to do it is to install `rustup`_,\nreboot your computer so the necessary `PATH` modifications come into effect,\nnavigate to the project folder and run ::\n\n    cargo build [--release]\n\nTo run the unit tests, type `cargo test`. Running a specific test includes typing ::\n\n    cargo test path::to::test::function\n\nType ::\n\n    cargo test path::to::test::function -- --nocapture\n\nif you wish to view test output. See `Cargo documentation`_ for more options.\n\n.. _`rustup`: https://rustup.rs/\n.. _`Cargo documentation`: https://doc.rust-lang.org/cargo/commands/cargo-build.html\n\nUsage on a machine without Cargo\n--------------------------------\n\nThe program can be run in the terminal without any options by typing::\n\n    $ path/to/rustla path/to/rst/file.rst\n\nNote the required source file suffix `.rst`:\nrusTLa is opinionated in this way to protect the user from accidentally overwriting the source file with the object file.\n\nAlternatively, one might move the binary to one of the folders listed in the `PATH` environment variable\nand restarting the terminal or logging out, if your system requires this in order for the changes to `PATH`\nto become effective. This allows it to be run from anywhere by simply typing::\n\n    $ rustla path/to/rst/file.rst\n\n\nOptions can be given to `rustla` via different flags, specified *before* the reStructuredText source file path::\n\n    $ path/to/rustla --flag1 --flag2 ... --flagN path/to/rst/file.rst\n\n\nThe recognized flags are given in the following listing::\n\n    Option              Explanation\n    ===========         ===========\n\n    --to-stdout         The option \"stdout\" is self-explanatory:\n                        it directs the program output to the standard output of rustla.\n                        This is the default functionality if \"output-stream\" is not specified.\n\n    --to-file           The option \"file\" creates a new LarST file next to the reST source file,\n                        with the same name except for the suffix \".rst\", which is replaced with \".tex\".\n                        There is currently no way to prevent this object file from being overwritten,\n                        so care should be taken when running the program with this flag set.\n\n    --full-doc          If this is set, the resulting output will be surrounded by the string:\n\n                            \\documentclass{aplus}\n                            \\begin{document}\n                            \u003coutput\u003e\n                            \\end{document}\n\n    --aplus-cls         This option generates an aplus.cls file next to the file generated,\n                        when the flag --to-file is set.\n\n\nProject structure\n-----------------\n\nThe current structure of the project is given below::\n\n    src/\n    ├── common.rs\n    ├── doctree\n    │   ├── class_data.rs\n    │   ├── directives.rs\n    │   ├── hyperref_data.rs\n    │   ├── larst_writer.rs\n    │   ├── mod.rs\n    │   ├── node_categories.rs\n    │   ├── restructuredtext_transforms.rs\n    │   ├── section_data.rs\n    │   ├── tests\n    │   │   ├── mod.rs\n    │   │   ├── test_constructor.rs\n    │   │   └── test_walkers.rs\n    │   ├── tree_node.rs\n    │   ├── tree_node_types.rs\n    │   ├── tree_zipper.rs\n    │   └── walkers.rs\n    ├── main.rs\n    ├── parser\n    │   ├── automata.rs\n    │   ├── converters.rs\n    │   ├── directive_parsers.rs\n    │   ├── line_cursor.rs\n    │   ├── mod.rs\n    │   ├── regex_patterns.rs\n    │   ├── state_machine\n    │   │   ├── aplus_questionnaire.rs\n    │   │   ├── aplus.rs\n    │   │   ├── block_quote.rs\n    │   │   ├── body.rs\n    │   │   ├── bullet_list.rs\n    │   │   ├── common.rs\n    │   │   ├── definition_list.rs\n    │   │   ├── enumerated_list.rs\n    │   │   ├── field_list.rs\n    │   │   ├── inline.rs\n    │   │   ├── literal_block.rs\n    │   │   ├── mod.rs\n    │   │   ├── transitions.rs\n    │   │   └── unknown_transitions.rs\n    │   ├── table_parsers.rs\n    │   ├── tests\n    │   │   ├── mod.rs\n    │   │   ├── test_admonitions.rs\n    │   │   ├── test_aplus_point_of_interest.rs\n    │   │   ├── test_aplus_questionnaire.rs\n    │   │   ├── test_block_quotes.rs\n    │   │   ├── test_block_reading.rs\n    │   │   ├── test_bullet_lists.rs\n    │   │   ├── test_class.rs\n    │   │   ├── test_comments.rs\n    │   │   ├── test_converters.rs\n    │   │   ├── test_definition_lists.rs\n    │   │   ├── test_enumerated_lists.rs\n    │   │   ├── test_field_lists.rs\n    │   │   ├── test_hyperlink_targets.rs\n    │   │   ├── test_images.rs\n    │   │   ├── test_inline_parsing.rs\n    │   │   ├── test_list_tables.rs\n    │   │   ├── test_literal_blocks.rs\n    │   │   ├── test_math_blocks.rs\n    │   │   ├── test_mixed_structures.rs\n    │   │   ├── test_regexes.rs\n    │   │   ├── test_sections_and_transitions.rs\n    │   │   ├── test_sphinx_only.rs\n    │   │   └── test_unknown_directives.rs\n    │   └── types_and_aliases.rs\n    ├── rustla_options.rs\n    └── utf8_to_latex.rs\n\n    6 directories, 65 files\n\n\nThis is subject to change as the project advances further.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsesodesa%2Frustla","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsesodesa%2Frustla","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsesodesa%2Frustla/lists"}