{"id":29012162,"url":"https://github.com/liblouis/louis-parser","last_synced_at":"2025-06-25T18:15:19.320Z","repository":{"id":38315629,"uuid":"192323900","full_name":"liblouis/louis-parser","owner":"liblouis","description":"An experiment at writing a liblouis table parser based on Parsing expression grammar","archived":false,"fork":false,"pushed_at":"2023-03-01T16:18:54.000Z","size":51,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-21T03:08:11.536Z","etag":null,"topics":["liblouis","parsing-expression-grammar","peg","pest"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/liblouis.png","metadata":{"files":{"readme":"README.org","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-06-17T10:17:01.000Z","updated_at":"2022-03-08T16:44:24.000Z","dependencies_parsed_at":"2022-08-17T16:00:21.313Z","dependency_job_id":null,"html_url":"https://github.com/liblouis/louis-parser","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/liblouis/louis-parser","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liblouis%2Flouis-parser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liblouis%2Flouis-parser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liblouis%2Flouis-parser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liblouis%2Flouis-parser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/liblouis","download_url":"https://codeload.github.com/liblouis/louis-parser/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liblouis%2Flouis-parser/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261927691,"owners_count":23231383,"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":["liblouis","parsing-expression-grammar","peg","pest"],"created_at":"2025-06-25T18:15:18.565Z","updated_at":"2025-06-25T18:15:19.315Z","avatar_url":"https://github.com/liblouis.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"#+title: Experimental liblouis table parser\n\nAn experiment at writing a liblouis table parser based on [[https://en.wikipedia.org/wiki/Parsing_expression_grammar][Parsing\nexpression grammar]], [[https://pest.rs/][pest]] and Rust\n\n* Usage\n\n#+BEGIN_SRC shell\n$ cargo run ~/src/liblouis/tables/bengali.cti\n  Rule:    miscellaneous_rules\n  Text:    \"include braille-patterns.cti\"\n    Rule:    include_rule\n    Text:    \"include braille-patterns.cti\"\n  Rule:    character_definition_rules\n  Text:    \"letter   \\x0981\t3\"\n    Rule:    letter_rules\n    Text:    \"letter   \\x0981\t3\"\n  Rule:    character_definition_rules\n  Text:    \"letter   \\x0982\t56\"\n    Rule:    letter_rules\n    Text:    \"letter   \\x0982\t56\"\n  Rule:    character_definition_rules\n  Text:    \"letter   \\x0983\t6\"\n    Rule:    letter_rules\n    Text:    \"letter   \\x0983\t6\"\n...\n#+END_SRC\n\n* Rationale\nMany if not most of the CVEs of liblouis are rooted in the hand\ncrafted parsing functions of liblouis.\n\nMoving to Rust for solid memory management and to parser generator\nlike pest would be of tremendeous help to avoid the buffer overflow\nproblems.\n\n* Status\nThe grammar is pretty complete thanks to the work done on the\ntree-sitter for liblouis.\n\nThe parser can handle all of the tables from the liblouis distribution\nwith the exception of the files that contain continuation lines\n(da-dk-g16-lit.ctb, da-dk-g26-lit.ctb and da-dk-g26l-lit.ctb). Also it\nfails on two tables that contain weird unicode chars inside a cotext\nor match opcode (hu-hu-g2.ctb and my-g2.ctb)\n\n* Prerequisites\n\n- You need the [[https://www.rust-lang.org/][Rust tool chain]].\n\n* contributing\nIf you have any improvements or comments please feel free to file a\npull request or an issue.\n\n* License\n\nCopyright (C) 2019 Swiss Library for the Blind, Visually Impaired and Print Disabled\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program.  If not, see\n\u003chttps://www.gnu.org/licenses/\u003e.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fliblouis%2Flouis-parser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fliblouis%2Flouis-parser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fliblouis%2Flouis-parser/lists"}