Skip to content

hebertialmeida/MarkdownSyntax

Repository files navigation

☄️ MarkdownSyntax

codecov

MarkdownSyntax is a wrapper on top of the GitHub Flavoured Markdown that conforms to mdast. It parses markdown and creates a normalized AST so you can use it not only for rendering markdown and syntax highlighting. In addition, you can render to standard markdown formats: HTML, XML, Man, LaTeX, Plain Text.

If you want to see a real-world usage of MarkdownSyntax, check out https://pinery.app where this framework was designed for.

Usage

let input = "Hi this is **alpha**"
let tree = try await Markdown(text: input).parse()

Outputs a normalized tree:

Root(
    children: [
        Paragraph(
            children: [
                Text(
                    value: "Hi this is ",
                    position: Position(
                        start: Point(line: 1, column: 1, offset: 0),
                        end: Point(line: 1, column: 11, offset: 10),
                        indent: nil
                    )
                ),
                Strong(
                    children: [
                        Text(
                            value: "alpha",
                            position: Position(
                                start: Point(line: 1, column: 14, offset: 13),
                                end: Point(line: 1, column: 18, offset: 17),
                                indent: nil
                            )
                        )
                    ],
                    position: Position(
                        start: Point(line: 1, column: 12, offset: 11),
                        end: Point(line: 1, column: 20, offset: 19),
                        indent: nil
                    )
                )
            ],
            position: Position(
                start: Point(line: 1, column: 1, offset: 0),
                end: Point(line: 1, column: 20, offset: 19),
                indent: nil
            )
        )
    ],
    position: Position(
        start: Point(line: 1, column: 1, offset: 0),
        end: Point(line: 1, column: 20, offset: 19),
        indent: nil
    )
)

For more examples checkout the tests MarkdownSyntaxTests.

Installation

Swift Package Manager

The Swift Package Manager is a tool for automating the distribution of Swift code and is integrated into the swift compiler.

Once you have your Swift package set up, adding MarkdownSyntax as a dependency is as easy as adding it to the dependencies value of your Package.swift.

dependencies: [
    .package(url: "https://github.com/hebertialmeida/MarkdownSyntax", from: "1.2.1")
]

Acknowledgements

About

☄️ A Type-safe Markdown parser in Swift.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages