katana-document-viewer 0.1.4

KatanA document viewer artifact, render evaluation, and export foundation.
Documentation
use crate::evaluation::{CoverageStatus, EvaluationFeatureCoverage, FixtureCategory};

const FEATURE_COUNT: usize = 33;
const COMMONMARK: FixtureCategory = FixtureCategory::CommonMark;
const GFM: FixtureCategory = FixtureCategory::Gfm;
const MATH: FixtureCategory = FixtureCategory::Math;
const ALERT: FixtureCategory = FixtureCategory::GitHubAlert;
const KATANA: FixtureCategory = FixtureCategory::KatanaCompatibility;
const EXTERNAL: FixtureCategory = FixtureCategory::ExternalRendering;
const DTO: CoverageStatus = CoverageStatus::KmmDto;
const KRR: CoverageStatus = CoverageStatus::KrrDirect;
const ZENUML: CoverageStatus = CoverageStatus::KrrMermaidCompatibility;

type FeatureSeed = (&'static str, &'static str, FixtureCategory, CoverageStatus);

const FEATURES: [FeatureSeed; FEATURE_COUNT] = [
    ("commonmark-heading", "commonmark-blocks", COMMONMARK, DTO),
    ("commonmark-paragraph", "commonmark-blocks", COMMONMARK, DTO),
    (
        "commonmark-blockquote",
        "commonmark-blocks",
        COMMONMARK,
        DTO,
    ),
    ("commonmark-list", "commonmark-blocks", COMMONMARK, DTO),
    (
        "commonmark-code-block",
        "commonmark-blocks",
        COMMONMARK,
        DTO,
    ),
    (
        "commonmark-thematic-break",
        "commonmark-blocks",
        COMMONMARK,
        DTO,
    ),
    (
        "commonmark-emphasis",
        "commonmark-inline-gap",
        COMMONMARK,
        DTO,
    ),
    (
        "commonmark-strong",
        "commonmark-inline-gap",
        COMMONMARK,
        DTO,
    ),
    (
        "commonmark-inline-code",
        "commonmark-inline-gap",
        COMMONMARK,
        DTO,
    ),
    ("commonmark-link", "commonmark-inline-gap", COMMONMARK, DTO),
    ("commonmark-image", "commonmark-inline-gap", COMMONMARK, DTO),
    (
        "commonmark-footnote",
        "commonmark-inline-gap",
        COMMONMARK,
        DTO,
    ),
    ("gfm-table", "gfm-table-task", GFM, DTO),
    ("gfm-task-list", "gfm-table-task", GFM, DTO),
    ("github-alert-note", "gfm-alerts", ALERT, DTO),
    ("github-alert-warning", "gfm-alerts", ALERT, DTO),
    ("math-fenced", "math-mixed", MATH, DTO),
    ("math-inline", "math-mixed", MATH, DTO),
    ("math-dollar-block", "math-mixed", MATH, DTO),
    ("katana-centered-html", "katana-compat", KATANA, DTO),
    ("katana-badge-row", "katana-compat", KATANA, DTO),
    ("katana-legacy-note", "katana-compat", KATANA, DTO),
    ("katana-description-list", "katana-compat", KATANA, DTO),
    ("katana-task-marker", "katana-compat", KATANA, DTO),
    ("katana-drawio-block", "katana-compat", KATANA, DTO),
    ("katana-japanese-text", "katana-compat", KATANA, DTO),
    ("katana-html-entity", "katana-compat", KATANA, DTO),
    ("katana-drawio-file-ref", "katana-compat", KATANA, DTO),
    ("katana-xml-file-ref", "katana-compat", KATANA, DTO),
    ("mermaid-render", "external-success", EXTERNAL, KRR),
    ("drawio-render", "external-success", EXTERNAL, KRR),
    (
        "zenuml-mermaid-compat",
        "external-success",
        EXTERNAL,
        ZENUML,
    ),
    ("plantuml-render", "external-failure", EXTERNAL, KRR),
];

pub(crate) struct V01EvaluationCoverageFactory;

impl V01EvaluationCoverageFactory {
    pub(crate) fn create() -> Vec<EvaluationFeatureCoverage> {
        FEATURES.iter().map(Self::feature).collect()
    }

    fn feature(seed: &FeatureSeed) -> EvaluationFeatureCoverage {
        let (id, fixture_id, category, status) = *seed;
        EvaluationFeatureCoverage {
            id: id.to_string(),
            fixture_id: fixture_id.to_string(),
            category,
            scenario: Self::scenario(category).to_string(),
            status,
        }
    }

    fn scenario(category: FixtureCategory) -> &'static str {
        match category {
            FixtureCategory::CommonMark => "Markdown標準の全記法をKMM入力として評価する",
            FixtureCategory::Gfm => "CommonMark / GFM / KatanA互換fixtureを評価する",
            FixtureCategory::Math => "数式とGitHub alertを評価対象に含める",
            FixtureCategory::GitHubAlert => "数式とGitHub alertを評価対象に含める",
            FixtureCategory::KatanaCompatibility => "KatanA独自解釈を評価対象に含める",
            FixtureCategory::ExternalRendering => "KRR direct renderingの対象を限定する",
        }
    }
}