base-markdown 0.1.0

CommonMark compliant markdown parser in Rust with ASTs and extensions
Documentation
# Extension Configuration

Enable Markdown extensions by their syntax names. `Constructs` controls parsing, `ParseOptions` adjusts syntax details, and `CompileOptions` controls HTML output.

```rust
use base_markdown::{to_html_with_options, Constructs, Options, ParseOptions};

let options = Options {
    parse: ParseOptions {
        constructs: Constructs {
            table: true,
            strikethrough: true,
            ..Constructs::default()
        },
        ..ParseOptions::default()
    },
    ..Options::default()
};

let html = to_html_with_options("~~removed~~", &options);
assert_eq!(html, "<p><del>removed</del></p>");
```

The extension constructs are `autolink_literal`, `table`, `strikethrough`, `task_list_item`, `footnote_definition`, and `label_start_footnote`. Enable both footnote constructs to recognize definitions and references. Other optional constructs, including `frontmatter`, `math_flow`, and `math_text`, use the same configuration pattern. Individual extensions retain their existing defaults and parsing behavior.

`ParseOptions::strikethrough_single_tilde` adjusts whether one tilde can delimit strikethrough. HTML options use the same feature names: `CompileOptions::footnote_label`, `footnote_back_label`, `footnote_clobber_prefix`, `footnote_label_attributes`, `footnote_label_tag_name`, `task_list_item_checkable`, and `tagfilter`.

`Constructs::gfm()`, `ParseOptions::gfm()`, `CompileOptions::gfm()`, and `Options::gfm()` remain presets for the GitHub-flavored Markdown combination. Their individual features can still be adjusted afterward. References to GFM in specifications and corpus names identify the dialect being compared.

## Migrating configuration names

Remove `gfm_` from individual extension fields. For example, `constructs.gfm_table` becomes `constructs.table`, `parse.gfm_strikethrough_single_tilde` becomes `parse.strikethrough_single_tilde`, and `compile.gfm_footnote_label` becomes `compile.footnote_label`. Internal modules, tokenizer names, and scratch fields follow the same syntax-based naming; `gfm_footnote_definitions` becomes `footnote_definitions`.

Serialized configuration uses the corresponding names without the `gfm` prefix: `gfmTable` becomes `table`, `gfmStrikethroughSingleTilde` becomes `strikethroughSingleTilde`, and `gfmFootnoteLabel` becomes `footnoteLabel`. Other multiword names continue to use camel case, such as `autolinkLiteral` and `footnoteDefinition`. This is a breaking Rust API and configuration-format rename; update stored configuration and callers together.