Skip to content

Instantly share code, notes, and snippets.

@bradparker
Created January 29, 2019 09:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bradparker/b8779d8e4239ce96ba61a7442ab2cb5a to your computer and use it in GitHub Desktop.
Save bradparker/b8779d8e4239ce96ba61a7442ab2cb5a to your computer and use it in GitHub Desktop.
Common mark json
{-# LANGUAGE OverloadedStrings #-}
module Main
( main
) where
import CMarkGFM
( ListAttributes
, Node
, NodeType
, PosInfo
, TableCellAlignment
, ListType
, DelimType
, commonmarkToNode
)
import Data.Aeson (FromJSON, ToJSON, decode, encode)
import Data.ByteString.Lazy.Char8 as LBS
instance FromJSON ListType
instance ToJSON ListType
instance FromJSON DelimType
instance ToJSON DelimType
instance FromJSON TableCellAlignment
instance ToJSON TableCellAlignment
instance FromJSON ListAttributes
instance ToJSON ListAttributes
instance FromJSON PosInfo
instance ToJSON PosInfo
instance FromJSON NodeType
instance ToJSON NodeType
instance FromJSON Node
instance ToJSON Node
-- >>> main
-- [
-- {
-- "startLine": 1,
-- "endLine": 5,
-- "startColumn": 1,
-- "endColumn": 18
-- },
-- {
-- "tag": "DOCUMENT"
-- },
-- [
-- [
-- {
-- "startLine": 1,
-- "endLine": 1,
-- "startColumn": 1,
-- "endColumn": 7
-- },
-- {
-- "tag": "HEADING",
-- "contents": 1
-- },
-- [
-- [
-- {
-- "startLine": 1,
-- "endLine": 1,
-- "startColumn": 3,
-- "endColumn": 7
-- },
-- {
-- "tag": "TEXT",
-- "contents": "Hello"
-- },
-- []
-- ]
-- ]
-- ],
-- [
-- {
-- "startLine": 3,
-- "endLine": 3,
-- "startColumn": 1,
-- "endColumn": 6
-- },
-- {
-- "tag": "PARAGRAPH"
-- },
-- [
-- [
-- {
-- "startLine": 3,
-- "endLine": 3,
-- "startColumn": 1,
-- "endColumn": 6
-- },
-- {
-- "tag": "TEXT",
-- "contents": "World!"
-- },
-- []
-- ]
-- ]
-- ],
-- [
-- {
-- "startLine": 5,
-- "endLine": 5,
-- "startColumn": 1,
-- "endColumn": 18
-- },
-- {
-- "tag": "PARAGRAPH"
-- },
-- [
-- [
-- {
-- "startLine": 5,
-- "endLine": 5,
-- "startColumn": 1,
-- "endColumn": 8
-- },
-- {
-- "tag": "TEXT",
-- "contents": "This is "
-- },
-- []
-- ],
-- [
-- {
-- "startLine": 5,
-- "endLine": 5,
-- "startColumn": 9,
-- "endColumn": 17
-- },
-- {
-- "tag": "EMPH"
-- },
-- [
-- [
-- {
-- "startLine": 5,
-- "endLine": 5,
-- "startColumn": 10,
-- "endColumn": 16
-- },
-- {
-- "tag": "TEXT",
-- "contents": "awesome"
-- },
-- []
-- ]
-- ]
-- ],
-- [
-- {
-- "startLine": 5,
-- "endLine": 5,
-- "startColumn": 18,
-- "endColumn": 18
-- },
-- {
-- "tag": "TEXT",
-- "contents": "."
-- },
-- []
-- ]
-- ]
-- ]
-- ]
-- ]
-- Just (Node (Just (PosInfo {startLine = 1, startColumn = 1, endLine = 5, endColumn = 18})) DOCUMENT [Node (Just (PosInfo {startLine = 1, startColumn = 1, endLine = 1, endColumn = 7})) (HEADING 1) [Node (Just (PosInfo {startLine = 1, startColumn = 3, endLine = 1, endColumn = 7})) (TEXT "Hello") []],Node (Just (PosInfo {startLine = 3, startColumn = 1, endLine = 3, endColumn = 6})) PARAGRAPH [Node (Just (PosInfo {startLine = 3, startColumn = 1, endLine = 3, endColumn = 6})) (TEXT "World!") []],Node (Just (PosInfo {startLine = 5, startColumn = 1, endLine = 5, endColumn = 18})) PARAGRAPH [Node (Just (PosInfo {startLine = 5, startColumn = 1, endLine = 5, endColumn = 8})) (TEXT "This is ") [],Node (Just (PosInfo {startLine = 5, startColumn = 9, endLine = 5, endColumn = 17})) EMPH [Node (Just (PosInfo {startLine = 5, startColumn = 10, endLine = 5, endColumn = 16})) (TEXT "awesome") []],Node (Just (PosInfo {startLine = 5, startColumn = 18, endLine = 5, endColumn = 18})) (TEXT ".") []]])
-- True
main :: IO ()
main = do
let node = commonmarkToNode [] [] "# Hello\n\nWorld!\n\nThis is *awesome*.\n"
let encoded = encode node
LBS.putStrLn encoded
let decoded = decode encoded :: Maybe Node
LBS.putStrLn $ LBS.pack $ show decoded
LBS.putStrLn $ LBS.pack $ show $ Just node == decoded
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment