lute
🎼 一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。A structured Markdown engine that supports Go and JavaScript.
Top Related Projects
CommonMark parsing and rendering library and program in C
:trophy: A markdown parser written in Go. Easy to extend, standard(CommonMark) compliant, well structured.
Blackfriday: a markdown processor for Go
markdown parser and HTML renderer for Go
A markdown parser and compiler. Built for speed.
Quick Overview
Lute is a structured Markdown engine written in Go. It provides parsing, rendering, and manipulation capabilities for Markdown content, with a focus on extensibility and performance. Lute aims to be a comprehensive solution for working with Markdown in Go applications.
Pros
- High performance and efficient parsing
- Extensive support for various Markdown flavors and extensions
- Customizable and extensible architecture
- Well-documented API and usage examples
Cons
- Primarily focused on Go language, limiting its use in other ecosystems
- May have a steeper learning curve for complex customizations
- Documentation is primarily in Chinese, which may be a barrier for non-Chinese speakers
Code Examples
- Basic Markdown parsing and rendering:
engine := lute.New()
html := engine.MarkdownStr("demo", "# Hello, Lute!")
fmt.Println(html)
// Output: <h1 id="hello-lute">Hello, Lute!</h1>
- Customizing Markdown rendering options:
engine := lute.New()
engine.SetHeadingAnchor(true)
engine.SetCodeSyntaxHighlight(true)
html := engine.MarkdownStr("demo", "## Custom Heading\n\n```go\nfmt.Println(\"Hello, World!\")\n```")
fmt.Println(html)
// Output: <h2 id="custom-heading">Custom Heading</h2>
// <pre><code class="language-go">fmt.Println("Hello, World!")
// </code></pre>
- Working with Abstract Syntax Tree (AST):
engine := lute.New()
tree := engine.ParseMarkdown([]byte("# Heading\n\nParagraph"))
heading := tree.Root.FirstChild
fmt.Println(heading.Type) // Output: NodeHeading
fmt.Println(heading.HeadingLevel) // Output: 1
Getting Started
To use Lute in your Go project, follow these steps:
-
Install Lute:
go get -u github.com/88250/lute
-
Import and use Lute in your code:
import "github.com/88250/lute" func main() { engine := lute.New() html := engine.MarkdownStr("demo", "# Hello, Lute!") fmt.Println(html) }
-
Customize the engine as needed:
engine.SetHeadingAnchor(true) engine.SetCodeSyntaxHighlight(true)
For more advanced usage and configuration options, refer to the Lute documentation.
Competitor Comparisons
CommonMark parsing and rendering library and program in C
Pros of cmark
- Written in C, offering high performance and potential for easy integration with other languages
- Strictly adheres to the CommonMark specification, ensuring consistent parsing
- Extensively tested with a comprehensive test suite
Cons of cmark
- Limited to CommonMark syntax, lacking support for extended Markdown features
- Less flexibility for customization compared to Lute
- Primarily focused on parsing and rendering, with fewer additional utilities
Code Comparison
cmark
cmark_node *document = cmark_parse_document(buffer, len, CMARK_OPT_DEFAULT);
char *html = cmark_render_html(document, CMARK_OPT_DEFAULT);
printf("%s", html);
free(html);
cmark_node_free(document);
Lute
engine := lute.New()
html := engine.MarkdownStr("", markdown)
fmt.Println(html)
Summary
cmark is a high-performance C implementation of CommonMark, offering strict adherence to the specification and extensive testing. It's ideal for projects requiring fast, standard-compliant Markdown parsing. Lute, written in Go, provides more flexibility and extended Markdown features, making it suitable for projects needing customization or additional Markdown syntax support. The choice between them depends on specific project requirements, performance needs, and desired Markdown feature set.
:trophy: A markdown parser written in Go. Easy to extend, standard(CommonMark) compliant, well structured.
Pros of Goldmark
- Faster parsing and rendering performance
- More extensive CommonMark compliance
- Wider adoption and community support
Cons of Goldmark
- Less feature-rich compared to Lute's advanced functionalities
- Limited support for custom syntax extensions
- Fewer built-in options for customizing output
Code Comparison
Goldmark:
md := goldmark.New(
goldmark.WithExtensions(extension.GFM),
goldmark.WithParserOptions(
parser.WithAutoHeadingID(),
),
)
var buf bytes.Buffer
if err := md.Convert([]byte(source), &buf); err != nil {
panic(err)
}
Lute:
engine := lute.New()
engine.SetGFMTable(true)
engine.SetGFMTaskListItem(true)
engine.SetHeadingAnchor(true)
html := engine.MarkdownStr("", source)
Both libraries offer easy-to-use APIs for converting Markdown to HTML, but Lute provides more built-in options for customization, while Goldmark focuses on extensibility through its modular design.
Blackfriday: a markdown processor for Go
Pros of Blackfriday
- More established and widely used in the Go community
- Faster parsing and rendering performance
- Extensive CommonMark compliance
Cons of Blackfriday
- Less active development and maintenance
- Fewer customization options for rendering
- Limited support for extended Markdown features
Code Comparison
Blackfriday:
import "github.com/russross/blackfriday/v2"
markdown := []byte("# Hello, World!")
html := blackfriday.Run(markdown)
Lute:
import "github.com/88250/lute"
engine := lute.New()
markdown := "# Hello, World!"
html := engine.MarkdownStr("", markdown)
Both libraries offer straightforward APIs for converting Markdown to HTML. Blackfriday uses a functional approach with the Run
function, while Lute employs an object-oriented style with the engine
instance.
Lute provides more configuration options and supports additional Markdown extensions, making it more flexible for customized rendering. However, Blackfriday's simpler API and better performance make it a popular choice for projects prioritizing speed and standard Markdown compliance.
markdown parser and HTML renderer for Go
Pros of markdown
- More actively maintained with frequent updates and contributions
- Broader language support, including CommonMark and GitHub Flavored Markdown
- Extensive documentation and examples for easier integration
Cons of markdown
- Larger codebase, potentially more complex to understand and modify
- Less focus on performance optimization compared to Lute
- May have a steeper learning curve for newcomers to the project
Code Comparison
Lute (parsing example):
ast := parse.Parse("", []byte("Hello, *Lute*!"), luteEngine.ParseOptions)
markdown (parsing example):
parser := parser.NewWithExtensions(parser.CommonExtensions)
node := parser.Parse([]byte("Hello, *markdown*!"))
Both libraries offer similar functionality for parsing Markdown, but Lute's API appears more concise in this example. However, markdown provides more flexibility with parsing extensions.
Summary
While markdown offers broader language support and more active development, Lute focuses on performance and simplicity. The choice between the two depends on specific project requirements, such as the need for extensive Markdown flavors or performance optimization.
A markdown parser and compiler. Built for speed.
Pros of marked
- Widely adopted and battle-tested in production environments
- Extensive documentation and community support
- Lightweight and fast performance
Cons of marked
- Limited customization options for parsing and rendering
- Lacks some advanced features like syntax highlighting and table of contents generation
Code comparison
marked:
import { marked } from 'marked';
const markdown = '# Hello, world!';
const html = marked(markdown);
console.log(html);
lute:
import "github.com/88250/lute"
markdown := "# Hello, world!"
engine := lute.New()
html := engine.MarkdownStr("", markdown)
fmt.Println(html)
Key differences
- marked is written in JavaScript, while lute is written in Go
- lute offers more advanced features like syntax highlighting and custom rendering
- marked has a simpler API and is easier to integrate into web applications
- lute provides better support for Chinese language processing and formatting
Use cases
- marked: Ideal for web applications requiring basic Markdown parsing
- lute: Suitable for projects needing advanced Markdown features and Chinese language support
Community and maintenance
- marked: Large community, frequent updates, and extensive third-party ecosystem
- lute: Smaller community, but actively maintained with regular updates
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
ä¸æ¬¾ç»æåç Markdown å¼æï¼æ¯æ Go å JavaScript
åå¼ä¸å¤å§åºæ¥âç¹æ±çµç¶åé®é¢
转轴æ¨å¼¦ä¸ä¸¤å£°âæªææ²è°å
ææ
 Â
 Â
 Â
ð¡ ç®ä»
Lute æ¯ä¸æ¬¾ç»æåç Markdown å¼æï¼å®æ´å®ç°äºææ°ç GFM/CommonMark è§èï¼å¯¹ä¸æè¯å¢æ¯ææ´å¥½ã
欢è¿å° Lute å®æ¹è®¨è®ºåºäºè§£æ´å¤ãåæ¶ä¹æ¬¢è¿å
³æ³¨ B3log å¼æºç¤¾åºå¾®ä¿¡å
¬ä¼å· B3logå¼æº
ï¼
ð½ï¸ èæ¯
ä¹åæä¸ç´å¨ä½¿ç¨å ¶ä» Markdown å¼æï¼å®ä»¬æå¤æå°é½æäºâççµâï¼
- 对æ åè§èçæ¯æä¸ä¸è´
- 对âæªå¼âææ¬å¤çé常èæ¶ï¼çè³ææ»
- 对ä¸ææ¯æä¸å¤å¥½
Lute çç®æ æ¯æ建ä¸ä¸ªç»æåç Markdown å¼æï¼å®ç° GFM/CM è§è并对ä¸ææä¾æ´å¥½çæ¯æãæè°çâç»æåâæçæ¯ä»è¾å ¥ç MD ææ¬æ建æ½è±¡è¯æ³æ ï¼éè¿æä½æ æ¥è¿è¡ HTML è¾åºãåææ ¼å¼åçã å®ç°è§èæ¯ä¸ºäºä¿è¯ Markdown 渲æä¸åå¨äºä¹æ§ï¼è®©åä¸ä»½ Markdown ææ¬å¯ä»¥å¨å®ç°è§èç Markdown å¼æå¤çåå¾å°ä¸æ ·çç»æï¼è¿ä¸ç¹é常éè¦ã
å®ç°è§èçå¼æ并ä¸å¤ï¼ææ³è¯è¯çèªå·±è½ä¸è½åä¸ä¸ä¸ªï¼è¿ä¹æ¯ Lute çå¨æºä¹ä¸ãå ³äºå¦ä½å®ç°ä¸ä¸ª Markdown å¼æï¼ç½ä¸ä¼è¯´çº·çºï¼
- æç人说 Markdown éåç¨æ£å解æï¼å 为ææ³è§å太ç®å
- ä¹æç人说 Markdown å¯ä»¥ç¨ç¼è¯åçæ¥å¤çï¼æ£å太é¾ç»´æ¤
æèµååè ï¼å 为æ£åç¡®å®å¤ªé¾ç»´æ¤èä¸è¿è¡æçè¾ä½ãæéè¦çåå æ¯ç¬¦å GFM/CM è§èç Markdown å¼æçæ ¸å¿è§£æç®æ³ä¸å¯è½ç¨æ£åååºæ¥ï¼å 为è§èå®ä¹çè§åå®å¨æ¯å¤ªå¤æäºã
æåï¼è¿æä¸ä¸ªå¾éè¦çå¨æºå°±æ¯ B3log å¼æºç¤¾åºéè¦ä¸æ¬¾èªå·±ç Markdown å¼æï¼
- SoloãPipeãSym éè¦ææç»ä¸ç Markdown 渲æï¼å¹¶ä¸æ§è½é常éè¦
- Vditor éè¦ä¸æ¬¾ç»æåçå¼æä½ä¸ºæ¯æ以å®ç°ä¸ä¸ä»£ç Markdown ç¼è¾å¨
⨠ç¹æ§
- å®ç°ææ°ç GFM/CM è§è
- é¶æ£åï¼é常快
- å 置代ç åè¯æ³é«äº®
- 对ä¸æè¯å¢æ¯ææ´å¥½
- æ¯è¯æ¼åä¿®æ£
- Markdown æ ¼å¼å
- Emoji 解æ
- HTML è½¬æ¢ Markdown
- èªå®ä¹æ¸²æå½æ°
- æ¯æ JavaScript 端使ç¨
ð æ¡ä¾
ð¨ð³ ä¸æè¯å¢ä¼å
- èªå¨é¾æ¥è¯å«å 强
- å¨ä¸è¥¿æé´èªå¨æå ¥ç©ºæ ¼
â æ ¼å¼å
æ ¼å¼ååè½å¯å°âä¸æ´æ´âç Markdown ææ¬æ ¼å¼å为ç»ä¸é£æ ¼ï¼å¨éè¦å ¬å ±ç¼è¾çåºæ¯ä¸ï¼ç»ä¸çæçé£æ ¼è½è®©å¤§å®¶æ´å®¹æåä½ã
ç¹æ¤å±å¼æ ¼å¼å示ä¾ã
Markdown åæï¼
# ATX æ é¢ä¹æå¯è½éè¦æ ¼å¼åç ##
ä¸ä¸ªç®çç段è½ã
Setext 说å®è¯æä¸å欢 Setext æ é¢
----
0. æåºå表å¯ä»¥ä» 0 å¼å§
0. åºè¯¥èªå¢åºå·ç
1. 对é½å¯¹é½å¯¹é½
æ们åæ¥ççå¦ä¸ä¸ªæåºå表ã
1. 没空è¡çæ
åµä¸åºå·è¦ä» 1 å¼å§æè½ææ段è½å¼å§ä¸ä¸ªæ°å表
3. è½ç¶ä¹±åºä¸å½±å渲æ
2. ä½æ¯éæååºå·å®¹æå¼èµ·è¯¯è§£
è¯ä¸è´´æ®µä»£ç ï¼
```go
package main
import "fmt"
func main() {
fmt.Println("Hello, ä¸ç")
}
```
对äºï¼ç¼©è¿ä»£ç å建议æ¢æå´æ 代ç åï¼
缩è¿ä»£ç å太éæ¦äº
ä¹æ²¡æ³æå®ç¼ç¨è¯è¨ï¼å®¹æ导è´ä»£ç é«äº®å¤±æ
æä»¥å»ºè®®å¤§å®¶ç¨ ``` å´æ 代ç å
è¯ä¸å´æ 代ç åå¹é
åºæ¯ï¼
````markdown
å´æ 代ç ååªè¦å¼å¤´ç ` åç»æç ` æ°éå¹é
å³å¯ï¼è¿æ ·å¯ä»¥å®ç°å¨å´æ 代ç åä¸æ¾ç¤ºå´æ 代ç åï¼
```
è¿éåªæ 3 个 `ï¼æ以ä¸ä¼å¹é
markdown代ç åç»æ
```
ä¸é¢å¹é
å°å°±ççç»æäºã
````
以ä¸å级å
容é½æ¤å¨ä¸å¨äºï¼æå
¥åçç空è¡ä¹å¾æå¿
è¦ã
ä½æ¯è¿å¤ç空è¡å段ä¹ä¸å¥½åï¼ç¨æ¥å段çè¯ä¸ä¸ªç©ºè¡å°±å¤äºã
æ¥ä¸æ¥è®©æ们è¯è¯ç¨å¾®å¤æç¹çåºæ¯ï¼æ¯å¦å表项å
å«å¤ä¸ªæ®µè½çæ
åµï¼
1. å表项ä¸ç第ä¸æ®µ
è¿éæ¯ç¬¬äºä¸ªæ®µè½ï¼è´´æ®µä»£ç ï¼
```markdown
è¦æ为Markdownç¨åºå并ä¸å®¹æï¼åçPPTæ¶æå¸ä¹æ¯ã
注æ代ç åä¸çä¸è¥¿æé´å¹¶æ²¡ææå
¥ç©ºæ ¼ã
```
è¿éæ¯æåä¸æ®µäºã
1. æ´ä¸ªæåºå表æ¯âæ¾æ£âçï¼å表项å
容è¦ç¨ `<p>` æ ç¾
æåï¼æ们è¯ä¸å¯¹ GFM çæ ¼å¼åæ¯æï¼
|col1|col2 | col3 |
--- |---------------|--
col1 without left pipe | this is col2 | col3 without right pipe
||need align cell|
**以ä¸å°±æ¯ä¸ºä»ä¹æ们éè¦Markdown Formatï¼èä¸æ¯å¸¦ä¸è¥¿æèªå¨ç©ºæ ¼çæ ¼å¼åã**
æ ¼å¼ååï¼
# ATX æ é¢ä¹æå¯è½éè¦æ ¼å¼åç
ä¸ä¸ªç®çç段è½ã
## Setext 说å®è¯æä¸å欢 Setext æ é¢
0. æåºå表å¯ä»¥ä» 0 å¼å§
1. åºè¯¥èªå¢åºå·ç
2. 对é½å¯¹é½å¯¹é½
æ们åæ¥ççå¦ä¸ä¸ªæåºå表ã
1. 没空è¡çæ
åµä¸åºå·è¦ä» 1 å¼å§æè½ææ段è½å¼å§ä¸ä¸ªæ°å表
2. è½ç¶ä¹±åºä¸å½±å渲æ
3. ä½æ¯éæååºå·å®¹æå¼èµ·è¯¯è§£
è¯ä¸è´´æ®µä»£ç ï¼
```go
package main
import "fmt"
func main() {
fmt.Println("Hello, ä¸ç")
}
```
对äºï¼ç¼©è¿ä»£ç å建议æ¢æå´æ 代ç åï¼
```
缩è¿ä»£ç å太éæ¦äº
ä¹æ²¡æ³æå®ç¼ç¨è¯è¨ï¼å®¹æ导è´ä»£ç é«äº®å¤±æ
æä»¥å»ºè®®å¤§å®¶ç¨ ``` å´æ 代ç å
```
è¯ä¸å´æ 代ç åå¹é
åºæ¯ï¼
````markdown
å´æ 代ç ååªè¦å¼å¤´ç ` åç»æç ` æ°éå¹é
å³å¯ï¼è¿æ ·å¯ä»¥å®ç°å¨å´æ 代ç åä¸æ¾ç¤ºå´æ 代ç åï¼
```
è¿éåªæ 3 个 `ï¼æ以ä¸ä¼å¹é
markdown代ç åç»æ
```
ä¸é¢å¹é
å°å°±ççç»æäºã
````
以ä¸å级å
容é½æ¤å¨ä¸å¨äºï¼æå
¥åçç空è¡ä¹å¾æå¿
è¦ã
ä½æ¯è¿å¤ç空è¡å段ä¹ä¸å¥½åï¼ç¨æ¥å段çè¯ä¸ä¸ªç©ºè¡å°±å¤äºã
æ¥ä¸æ¥è®©æ们è¯è¯ç¨å¾®å¤æç¹çåºæ¯ï¼æ¯å¦å表项å
å«å¤ä¸ªæ®µè½çæ
åµï¼
1. å表项ä¸ç第ä¸æ®µ
è¿éæ¯ç¬¬äºä¸ªæ®µè½ï¼è´´æ®µä»£ç ï¼
```markdown
è¦æ为Markdownç¨åºå并ä¸å®¹æï¼åçPPTæ¶æå¸ä¹æ¯ã
注æ代ç åä¸çä¸è¥¿æé´å¹¶æ²¡ææå
¥ç©ºæ ¼ã
```
è¿éæ¯æåä¸æ®µäºã
2. æ´ä¸ªæåºå表æ¯âæ¾æ£âçï¼å表项å
容è¦ç¨ `<p>` æ ç¾
æåï¼æ们è¯ä¸å¯¹ GFM çæ ¼å¼åæ¯æï¼
| col1 | col2 | col3 |
| ---------------------- | --------------- | ----------------------- |
| col1 without left pipe | this is col2 | col3 without right pipe |
| | need align cell | |
**以ä¸å°±æ¯ä¸ºä»ä¹æ们éè¦ Markdown Formatï¼èä¸æ¯å¸¦ä¸è¥¿æèªå¨ç©ºæ ¼çæ ¼å¼åã**
âï¸ æ¯è¯ä¿®æ£
Markdown åæï¼
å¨githubä¸åå¼æºé¡¹ç®æ¯ä¸ä»¶å¾å¼å¿çäºæ
ï¼è¯·ä¸è¦æGithubæ¼åæ`github`å¦ï¼
ç¹å«æ¯ç®åä¸åä¸ä¸è¦åºç°è¿æ ·çæ
åµï¼
> çç»ä½¿ç¨JAVAãJavascriptãGITï¼å¯¹androidãioså¼åæä¸å®äºè§£ï¼çç»ä½¿ç¨Mysqlãpostgresqlæ°æ®åºã
ä¿®æ£åï¼
å¨ GitHub ä¸åå¼æºé¡¹ç®æ¯ä¸ä»¶å¾å¼å¿çäºæ
ï¼è¯·ä¸è¦æ GitHub æ¼åæ`github`å¦ï¼
ç¹å«æ¯ç®åä¸åä¸ä¸è¦åºç°è¿æ ·çæ
åµï¼
> çç»ä½¿ç¨ JavaãJavaScriptãGitï¼å¯¹ AndroidãiOS å¼åæä¸å®äºè§£ï¼çç»ä½¿ç¨ MySQLãPostgreSQL æ°æ®åºã
â¡ æ§è½
请ç Golang markdown å¼ææ§è½åºåæµè¯ã
ðª å¥å£®æ§
Lute æ¿è½½äºé¾æ»´ä¸çææ Markdown å¤çï¼æ¯å¤©å¤çæ°ç¾ä¸è§£æ渲æ请æ±ï¼è¿è¡è¡¨ç°ç¨³å®ã
ð å®å ¨æ§
Lute 没æå®ç°å®ç° GFM ä¸ç Disallowed Raw HTML (extension)ï¼å 为该æ©å±è¿æ¯åå¨ä¸å®æ¼æ´ï¼æ¯å¦æ²¡æå¤ç <input>
ï¼ã
建议éè¿å
¶ä»åºï¼æ¯å¦ bluemondayï¼æ¥è¿è¡ HTML å®å
¨è¿æ»¤ï¼è¿æ ·ä¹è½æ´å¥½å°éé
åºç¨åºæ¯ã
ð ï¸ ä½¿ç¨
æä¸ç§æ¹å¼ä½¿ç¨ Luteï¼
- å端ï¼ç¨ Go è¯è¨çè¯å¼å
¥
github.com/88250/lute
å - å端ï¼å° Lute å¯å¨ä¸ºä¸ä¸ª HTTP æå¡è¿ç¨ä¾å ¶ä»è¿ç¨è°ç¨ï¼å ·ä½è¯·åèè¿é
- å端ï¼å¼å ¥ js ç®å½ä¸ç lute.min.jsï¼æ¯æ Node.js
Go
å¼å ¥ Lute åºï¼
go get -u github.com/88250/lute
æå°åå¯å·¥ä½ç¤ºä¾ï¼
package main
import (
"fmt"
"github.com/88250/lute"
)
func main() {
luteEngine := lute.New() // é»è®¤å·²ç»å¯ç¨ GFM æ¯æ以åä¸æè¯å¢ä¼å
html:= luteEngine.MarkdownStr("demo", "**Lute** - A structured markdown engine.")
fmt.Println(html)
// <p><strong>Lute</strong> - A structured Markdown engine.</p>
}
å ³äºä»£ç åè¯æ³é«äº®ï¼
- é»è®¤ä½¿ç¨å¤é¨æ ·å¼è¡¨ï¼ä¸»é¢ä¸º github.cssï¼å¯ä» chroma-styles ç®å½ä¸æ·è´è¯¥æ ·å¼æ件å°é¡¹ç®ä¸å¼å ¥
- å¯éè¿
lutenEngine.SetCodeSyntaxHighlightXXX()
æ¥æå®é«äº®ç¸å ³åæ°ï¼æ¯å¦æ¯å¦å¯ç¨å èæ ·å¼ãè¡å·ä»¥å主é¢
JavaScript
ç®å示ä¾å¯åè JavaScript ç®å½ä¸ç demoï¼ç»åå端ç¼è¾å¨çå®æ´ç¨æ³è¯·åè Vditor ä¸ç示ä¾ã
ä¸äºç»èï¼
- lute.js 没æå ç½®è¯æ³é«äº®ç¹æ§
- lute.js ç¼è¯å大å°ä¸º ~3.5MBï¼GZip å缩åå¤§å° ~500KB
ð ææ¡£
- ãæé®çæºæ §ã精读注解ç
- CommonMark è§èè¦ç¹è§£è¯»
- Lute å®ç°åè®°
- Markdown 解æåç详解å Markdown AST æè¿°
ðï¸ ç¤¾åº
ð ææ
Lute ä½¿ç¨ æ¨å °å®½æ¾è®¸å¯è¯, 第2ç å¼æºåè®®ã
ð 鸣谢
Lute çè¯ç离ä¸å¼ä»¥ä¸å¼æºé¡¹ç®ï¼å¨æ¤å¯¹è¿äºé¡¹ç®çè´¡ç®è 们è´æ¬ï¼
- commonmark.jsï¼è¯¥é¡¹ç®æ¯ CommonMark å®æ¹åèå®ç°ç JavaScript çï¼Lute åèäºå ¶è§£æå¨å®ç°é¨å
- goldmarkï¼å¦ä¸æ¬¾ç¨ golang åç Markdown å¼æï¼Lute åèäºå ¶æ éåå®ç°é¨å
- golang-commonmarkï¼å¦ä¸æ¬¾ç¨ golang åç Markdown å¼æï¼Lute åèäºå ¶ URL ç¼ç 以å HTML 转ä¹ç®æ³
- Chromaï¼ç¨ golang åçè¯æ³é«äº®å¼æ
- ä¸æææ¡æçæåï¼ç»ä¸ä¸æææ¡ãæççç¸å ³ç¨æ³ï¼éä½å¢éæåä¹é´çæ²éææ¬ï¼å¢å¼ºç½ç«æ°è´¨
- GopherJSï¼å° Go 代ç ç¼è¯æ JavaScript 代ç
Top Related Projects
CommonMark parsing and rendering library and program in C
:trophy: A markdown parser written in Go. Easy to extend, standard(CommonMark) compliant, well structured.
Blackfriday: a markdown processor for Go
markdown parser and HTML renderer for Go
A markdown parser and compiler. Built for speed.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot