{"id":25453161,"url":"https://github.com/nlopes/acdc","last_synced_at":"2026-02-15T01:19:44.261Z","repository":{"id":258793032,"uuid":"864679956","full_name":"nlopes/acdc","owner":"nlopes","description":"AsciiDoc tooling in rust","archived":false,"fork":false,"pushed_at":"2026-01-31T21:31:34.000Z","size":3885,"stargazers_count":20,"open_issues_count":4,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-02-01T09:21:30.452Z","etag":null,"topics":["asciidoc","rust","tooling"],"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/nlopes.png","metadata":{"files":{"readme":"README.adoc","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"nlopes","buy_me_a_coffee":"nlopes"}},"created_at":"2024-09-28T21:40:26.000Z","updated_at":"2026-01-31T21:31:38.000Z","dependencies_parsed_at":"2024-11-17T22:18:02.718Z","dependency_job_id":"c1d8f49d-18c6-493a-b9fe-0583845e0d59","html_url":"https://github.com/nlopes/acdc","commit_stats":null,"previous_names":["nlopes/acdc"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/nlopes/acdc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nlopes%2Facdc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nlopes%2Facdc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nlopes%2Facdc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nlopes%2Facdc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nlopes","download_url":"https://codeload.github.com/nlopes/acdc/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nlopes%2Facdc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29125129,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-05T14:05:12.718Z","status":"ssl_error","status_checked_at":"2026-02-05T14:03:53.078Z","response_time":65,"last_error":"SSL_read: 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":["asciidoc","rust","tooling"],"created_at":"2025-02-17T23:49:28.897Z","updated_at":"2026-02-15T01:19:44.243Z","avatar_url":"https://github.com/nlopes.png","language":"Rust","funding_links":["https://github.com/sponsors/nlopes","https://buymeacoffee.com/nlopes"],"categories":[],"sub_categories":[],"readme":"= acdc - AsciiDoc Parser \u0026 Converter\n\nimage:https://github.com/nlopes/acdc/workflows/Test/badge.svg[CI Status,link=https://github.com/nlopes/acdc/actions]\nimage:https://docs.rs/acdc-parser/badge.svg[docs.rs,link=https://docs.rs/acdc-parser]\nimage:https://img.shields.io/crates/v/acdc-parser.svg[crates.io,link=https://crates.io/crates/acdc-parser]\nimage:https://img.shields.io/badge/license-MIT-blue.svg[MIT licensed,link=https://github.com/nlopes/acdc/blob/main/LICENSE]\n\nFast, correct AsciiDoc parser and converter written in Rust using PEG grammar.\n\nFor architecture and design decisions, see link:./ARCHITECTURE.adoc[ARCHITECTURE.adoc].\n\n== Quick start\n\n[source,bash]\n----\n# Parse and convert AsciiDoc to HTML\ncargo run --bin acdc -- convert document.adoc\n\n# Run the test suite\ncargo nextest run\n----\n\nSee link:./acdc-cli/README.adoc[acdc-cli README] for all CLI options, backends, and feature flags.\n\n== Project structure\n\n----\nacdc/\n├── acdc-cli/                 # Command-line interface\n│   └── src/\n│       └── main.rs          # CLI entry point\n├── acdc-lsp/                 # Language Server Protocol (early/experimental)\n│   └── src/\n│       ├── capabilities/    # LSP features (diagnostics, hover, definition)\n│       └── state/           # Document and workspace state management\n├── acdc-parser/             # Core parser and AST\n│   ├── src/\n│   │   ├── grammar/         # PEG grammar definitions\n│   │   ├── model/           # AST data structures\n│   │   ├── preprocessor/    # Include and conditional handling\n│   │   └── proptests/       # Property-based testing\n│   └── fixtures/            # Test fixtures\n├── acdc-editor-wasm/        # WASM live editor (syntax highlight + preview)\n└── converters/              # Output converters\n    ├── core/               # Shared traits (Processable, Visitor)\n    ├── dev/                # Development utilities (unpublished)\n    ├── html/               # HTML5 converter\n    ├── manpage/            # Native roff/troff manpage output\n    ├── markdown/           # Markdown converter (CommonMark \u0026 GFM)\n    └── terminal/           # Rich terminal output\n----\n\n== Tooling\n\n* link:./acdc-cli[acdc-cli] - AsciiDoc processor (CLI)\n* link:./acdc-editor-wasm[acdc-editor-wasm] - WASM live editor with syntax highlighting and preview\n* link:./acdc-lsp[acdc-lsp] - Language Server Protocol implementation (early/experimental)\n* link:./acdc-parser[acdc-parser] - AsciiDoc parser library\n* link:./converters[converters] - collection of AsciiDoc converters\n\n== Architecture overview\n\n=== Parser design\n\n* **PEG-based**: Uses the `peg` crate for grammar definition\n* **Two-pass inline processing**: First identifies boundaries, then parses content\n* **Fail-fast**: Stops on first error (by design)\n* **Preprocessor**: Handles includes and conditionals before parsing\n\n=== Testing strategy\n\n1. **Fixture tests**: Compare against known good outputs\n2. **Property tests**: Verify invariants hold for any input (proptest)\n3. **TCK tests**: Check specification compliance\n4. **Integration tests**: End-to-end conversion testing\n\n== Known limitations\n\n* **Inline markup in code/links**: Bold/italic inside code spans and link text not parsed\n* **Cross-file references**: LSP and parser are single-file only\n\nSee link:./acdc-parser/README.adoc[acdc-parser README] for detailed feature support and list handling notes.\n\n== Building \u0026 testing\n\n[source,bash]\n----\n# Build all crates\ncargo build --all\n\n# Run tests with detailed output\nRUST_LOG=error cargo nextest run --no-fail-fast --all-features --all-targets\n\n# Run clippy with pedantic lints\ncargo clippy --all-targets --all-features -- --deny clippy::pedantic\n\n# Run property-based tests\nPROPTEST_CASES=1000 cargo test --package acdc-parser --lib proptests\n----\n\n== Development workflow\n\n=== Debug parser issues\n\n[source,bash]\n----\n# Enable trace logging for grammar module\nRUST_LOG=acdc_parser::grammar::document=trace cargo run --bin acdc -- convert file.adoc\n----\n\n=== Compare with reference implementation\n\n[source,bash]\n----\n# asciidoctor is our reference\nasciidoctor -o file.asciidoctor.html file.adoc\ncargo run --bin acdc -- convert file.adoc\ndiff -u file.asciidoctor.html file.html\n----\n\n== Contributing\n\n1. Use conventional commits (`feat:`, `fix:`, `docs:`, etc.)\n2. Run the full test suite before committing\n\n== Acknowledgments\n\n* https://asciidoctor.org[asciidoctor] - Reference implementation\n* https://docs.asciidoctor.org/asciidoc/latest/[AsciiDoc documentation]\n* https://gitlab.eclipse.org/eclipse/asciidoc-lang/asciidoc-lang/-/blob/main/spec/outline.adoc?ref_type=heads[Language Specification]\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnlopes%2Facdc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnlopes%2Facdc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnlopes%2Facdc/lists"}