Started thinking of using new datatypes

This commit is contained in:
Pingu 2022-10-28 12:55:46 +02:00
parent 3b6daaba8e
commit c0f058dd42
2 changed files with 38 additions and 12 deletions

View File

@ -7,14 +7,10 @@ The name is pronounced like autumn.
* Spec * Spec
| org | forum | Notes | | org | forum | Notes |
|-----+-----------------+---------------------------| |---------------+------------------------------------------------------+------------------------------------|
| * | [TITLE][/TITLE] | | | * | [TITLE][/TITLE] | |
| ** | [SIZE=4][/SIZE] | | | ** | [SIZE=4][/SIZE] | |
| *** | [SIZE=2][/SIZE] | | | *** | [SIZE=2][/SIZE] | |
| - | [*] | Needs a [LIST] around all | | - | [*] | Needs a [LIST] around all |
| | | | | [[]] | [IMG][/IMG] or [VIDEO][/VIDEO] or [URL="link"][/URL] | Figure out what type of link it is |
| | | | | #+BEGIN #+END | [SPOILER][/SPOILER] | |
| | | |
| | | |
| | | |
| | | |

View File

@ -4,6 +4,8 @@ import Control.Applicative hiding (some)
import Control.Monad import Control.Monad
import Data.Functor import Data.Functor
import Data.Void import Data.Void
import GHC.Stack.CCS (whereFrom)
import GHC.StaticPtr (StaticPtrInfo)
import System.Environment import System.Environment
import System.Exit import System.Exit
import Text.Megaparsec hiding (satisfy) import Text.Megaparsec hiding (satisfy)
@ -11,6 +13,34 @@ import Text.Megaparsec.Char
type Parser = Parsec Void String type Parser = Parsec Void String
newtype URL = URL String
data Info =
Bread String |
List [Info] |
Header String |
Subheader String |
Subsubheader String |
Image URL |
Video URL |
Link URL Info |
Spoiler Info
instance Show Info where
show :: Info -> String
show info = case info of
Bread text -> text
List texts -> "[LIST]" ++ concatMap show texts ++ "[/LIST]"
Header text -> "[TITLE]" ++ text ++ "[/TITLE]"
Subheader text -> "[SIZE=4]" ++ text ++ "[/SIZE]"
Subsubheader text -> "[SIZE=2]" ++ text ++ "[/SIZE]"
Image (URL url) -> "[IMG]" ++ url ++ "[/IMG]"
Video (URL url) -> "[VIDEO]" ++ url ++ "[/VIDEO]"
Link (URL url) inf -> "[URL=\"" ++ url ++ "\"]" ++ show inf ++ "[/IMG]"
Spoiler inf -> "[SPOILER]" ++ show inf ++ "[/SPOILER]"
newtype Post = Post [Info]
parseHelper :: Parser String -> String -> String parseHelper :: Parser String -> String -> String
parseHelper parser x = case parse parser "" x of parseHelper parser x = case parse parser "" x of
Left bundle -> error $ errorBundlePretty bundle Left bundle -> error $ errorBundlePretty bundle