Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/xieyuheng/postmark
A framework for building markdown extensions.
https://github.com/xieyuheng/postmark
content-managment markdown markdown-extension parser
Last synced: 9 days ago
JSON representation
A framework for building markdown extensions.
- Host: GitHub
- URL: https://github.com/xieyuheng/postmark
- Owner: xieyuheng
- License: gpl-3.0
- Created: 2021-11-07T11:18:50.000Z (about 3 years ago)
- Default Branch: master
- Last Pushed: 2023-03-18T17:30:16.000Z (almost 2 years ago)
- Last Synced: 2024-12-08T07:42:47.989Z (18 days ago)
- Topics: content-managment, markdown, markdown-extension, parser
- Language: TypeScript
- Homepage:
- Size: 1.94 MB
- Stars: 30
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Code of conduct: CODE-OF-CONDUCT.md
Awesome Lists containing this project
README
# Postmark
A framework for building markdown extensions.
## Install
```bash
npm i @xieyuheng/postmark
```## Used By
- [Sisuo App](https://sisuo.app)
- [Readonly.Link](https://readonly.link)
- [Xie Yuheng Website](https://xieyuheng.com)## Usage
### Command Line Interface
After installed the `@xieyuheng/postmark` package, you can run `postmark help` to see help messages.
## API Docs
### `Postmark.createParser(opts: ParserOptions)`
```typescript
import Postmark from "@xieyuheng/postmark"const parser = Postmark.createParser({
enableTable: true, // default
})
```### `parser.parseDocument(text: string)`
```typescript
const text = `\
---
title: The principle of type theory
date: 2021-08-27
author: Xie Yuheng
---# The principle
The principle of type theory is:
> We should study **terms** and **types** together.
`const document = parser.parseDocument(text)
console.log(document)
```Output:
``` javascript output
Document {
kind: 'Document',
attributes: {
title: 'The principle of type theory',
date: 2021-08-27T00:00:00.000Z,
author: 'Xie Yuheng'
},
span: Span {
start: Position { line: 1, column: 1 },
end: Position { line: 5, column: 51 }
},
children: [
Headline { ... },
Paragraph { ... },
BlockQuote { ... }
]
}
```### `parser.use(plugin: Plugin)`
```typescript
const parser = Postmark.createParser()
.use({
kind: "CustomBlock",
customKind: "Katex",
recognize: ({ name }) => name.toLowerCase() === "katex",
})
.use({
kind: "CustomItem",
customKind: "Dialog",
recognize: (item) =>
item.start.some((tag) => tag.name.toLowerCase() === "dialog"),
build: (item, { previousCustomItems }) =>
Dialog.build(item, { previousCustomItems }),
})
```### `node.format()` & `node.render()`
The `node.format` & `node.render` methods, help user to avoid handle `Node` recursively.
- `node.format()` -- format `node` back to markdown itself.
- `node.render()` -- render `node` to html.## Development
```
npm install // Install dependencies
npm run build // Compile `src/` to `lib/`
npm run watch // Watch the compilation
npm run test // Run test
```## Contributions
> Be polite, do not bring negative emotion to others.
- [TODO.md](TODO.md)
- [STYLE-GUIDE.md](STYLE-GUIDE.md)
- [CODE-OF-CONDUCT.md](CODE-OF-CONDUCT.md)
- When contributing, add yourself to [AUTHORS](AUTHORS)## License
- [GPLv3](LICENSE)