Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/cristianvasquez/docs-and-graphs
Parse markdown into a simplified Abstract Syntax tree
https://github.com/cristianvasquez/docs-and-graphs
logsseq markdown markdown-parser obsidian tana
Last synced: 16 days ago
JSON representation
Parse markdown into a simplified Abstract Syntax tree
- Host: GitHub
- URL: https://github.com/cristianvasquez/docs-and-graphs
- Owner: cristianvasquez
- License: mit
- Created: 2022-12-01T22:39:12.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-05-09T21:25:58.000Z (6 months ago)
- Last Synced: 2024-10-25T21:21:41.978Z (22 days ago)
- Topics: logsseq, markdown, markdown-parser, obsidian, tana
- Language: JavaScript
- Homepage:
- Size: 1.49 MB
- Stars: 10
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# docs-and-graphs
This lib parses markdown into a simplified Abstract Syntax tree.
## Why?
Several Note-Taking apps are 'node-based,' 'markdown based,' etc.
I use Markdown, and I cannot get used to outlines. However, I recognize the benefits of having node-based systems, where
you can reference a specific node from any other node.So my question was: How can I have these nodes, and still use Markdown?
After considering this, I realized that Markdown has some structure. It has headers that can be inside other headings
and lists that can be inside other lists. These are the nodes this library generates.## Usage
Say you have the following markdown
```markdown
---
hello: world
---# Heading 1
Some text under Heading 1
Text that has (inline::variables)
## Inline elements
- Tana and logseq likes
- embedded nodes
```The lib
```js
import { simpleAst } from 'docs-and-graphs'const json = simpleAst(yourMarkdownString)
```will produce the following Json
```json
{
"type": "root",
"depth": 0,
"data": [
{
"hello": "world"
}
],
"children": [
{
"type": "block",
"value": "# Heading 1",
"depth": 1,
"children": [
{
"type": "text",
"value": "Some text under Heading 1"
},
{
"type": "text",
"data": [
{
"inline": "variables"
}
],
"value": "Text that has (inline::variables)"
},
{
"type": "block",
"value": "## Inline elements",
"depth": 2,
"children": [
{
"type": "outline",
"ordered": false,
"children": [
{
"type": "outline",
"value": "Tana and logseq likes "
},
{
"type": "outline",
"ordered": false,
"children": [
{
"type": "outline",
"value": "embedded nodes"
}
]
}
]
}
]
}
]
}
]
}```
## Based on
- [remark](https://github.com/remarkjs/remark)
- [unifiedjs](https://github.com/unifiedjs/unified)## And then?
I use this structure to later produce [RDF](https://en.wikipedia.org/wiki/Resource_Description_Framework) using
a [vault-triplifier](https://github.com/cristianvasquez/vault-triplifier), but you can use it for whatever you want.