반응형
목표
Markdown을 HTMl으로 바꿔주는 프로그램을 만들어봅시다
- Markdown : 텍스트 기반의 마크업 언어로 쉽게 문서를 만들 수 있다
- HTML : 하이퍼 텍스트 마크업 언어로 웹 페이지를 위해 개발된 언어
이번에 사용할 모듈은 다음과 같습니다.
https://github.com/gomarkdown/markdown
코드
프로젝트를 만듭시다
mkdir md2html
cd md2html
go mod init md2html.com
go get github.com/gomarkdown/markdown
대부분의 기능을 담은 main.go를 만듭시다
package main
import (
"md2html.com/utils"
"os"
"github.com/gomarkdown/markdown"
"github.com/gomarkdown/markdown/html"
"github.com/gomarkdown/markdown/parser"
"fmt"
)
func mdToHTML(md []byte) []byte {
// Markdown Parser extensions : 마크다운 파서 설정
// CommonExtensions : 기본 설정
// AutoHeadingIDs : 제목에 자동으로 ID를 부여
extensions := parser.CommonExtensions | parser.AutoHeadingIDs
p := parser.NewWithExtensions(extensions)
// md 파일 읽기
doc := p.Parse(md)
// Html Renderer flags : HTML 렌더링 설정
// CommonFlags : 기본 설정
// HrefTargetBlank : 링크를 새 탭에서 열기
// CompletePage : <html> 태그 추가
htmlFlags := html.CommonFlags | html.HrefTargetBlank | html.CompletePage
opts := html.RendererOptions{Flags: htmlFlags}
renderer := html.NewRenderer(opts)
// Convert markdown to HTML : 읽은 마크다운을 HTML로 변환
return markdown.Render(doc, renderer)
}
// file2Text : 파일을 읽어서 string 으로 반환
func file2Text(filePath string) string {
data, err := os.ReadFile(filePath)
utils.ErrorHandler(err)
content := string(data)
return content
}
// byte2html : []byte 로 HTML 파일 생성
func byte2html(content []byte, filePath string) {
err := os.WriteFile(filePath, content, 0)
utils.ErrorHandler(err)
}
// deleteFile : 파일 삭제
func deleteFile(filePath string) {
_ = os.Remove(filePath)
}
func main() {
const (
resourcePath = "./resource/test.md"
resultPath = "./result/test.html"
)
md := []byte(file2Text(resourcePath))
htmlBytes := mdToHTML(md)
deleteFile(resultPath)
byte2html(htmlBytes, resultPath)
fmt.Printf("Markdown to HTML")
}
에러 핸들링을 위해 utils/error.go를 만듭시다.
package utils
import "fmt"
func ErrorHandler(err error) {
if err != nil {
fmt.Println(err)
panic(err)
}
}
제가 사용한 Markdown은 다음과 같습니다. 위치는 resource/test.md
# Markdown Editor
Markdown is a lightweight markup language with plain text formatting syntax.
## Features
- Tables
- Fenced code blocks
- Drag and drop markdown files
- Even More
## Code Highlighting
```javascript
const CHANCE = Math.random() > 0.5 ? true : false;
if (CHANCE === true) {
console.log('It`s true');
}
if (CHANCE === false) {
console.log('It's false');
}
```
## Images
![alt text](https://i.ytimg.com/vi/esBYZjbz1zw/maxresdefault.jpg 'Ken Block rip')
## Donate
If you like this extension, please consider donating to support the development of this extension.
이제 코드를 실행하면
go run .\main.go
다음 경로에 result/test.html이 만들어진 것을 확인할 수 있습니다.
결과물)
반응형
'Go Lang > Study' 카테고리의 다른 글
[GoLang] Context가 뭘까요? (2) | 2023.12.02 |
---|---|
[GoLang] Markdown을 HTML로 변환하기 (고도화) (0) | 2023.11.12 |
[GoLang] Interface와 덕 타이핑 (0) | 2023.11.05 |
[GoLang] 단축 URL 웹사이트 만들기 (0) | 2023.11.03 |
[GoLang] 구조체 선언 시 메모리 최적화 하기 (1) | 2023.10.29 |