Add some parsing stuff to finished/ for Tag

This commit is contained in:
Richard Feldman
2018-05-04 19:30:58 -04:00
parent 82e848ba97
commit 2bd0c78583
24 changed files with 2565 additions and 48 deletions

View File

@@ -3,15 +3,12 @@ module Data.Article
( Article
, Body
, Slug
, Tag
, bodyToHtml
, bodyToMarkdownString
, decoder
, decoderWithBody
, slugParser
, slugToString
, tagDecoder
, tagToString
)
import Data.Article.Author as Author exposing (Author)
@@ -110,24 +107,6 @@ slugToString (Slug slug) =
-- TAGS --
type Tag
= Tag String
tagToString : Tag -> String
tagToString (Tag slug) =
slug
tagDecoder : Decoder Tag
tagDecoder =
Decode.map Tag Decode.string
-- BODY --

View File

@@ -0,0 +1,55 @@
module Data.Article.Tag
exposing
( Tag
, decoder
, encode
, listParser
, toString
)
import Json.Decode as Decode exposing (Decoder)
import Json.Encode as Encode exposing (Value)
import Parser exposing ((|.), (|=), Parser, end, ignore, keep, oneOrMore, repeat, zeroOrMore)
type Tag
= Tag String
toString : Tag -> String
toString (Tag str) =
str
encode : Tag -> Value
encode (Tag str) =
Encode.string str
decoder : Decoder Tag
decoder =
Decode.map Tag Decode.string
listParser : Parser (List Tag)
listParser =
Parser.succeed (List.map Tag)
|. ignore zeroOrMore isWhitespace
|= repeat zeroOrMore tag
|. end
-- INTERNAL --
tag : Parser String
tag =
keep oneOrMore (\char -> not (isWhitespace char))
|. ignore zeroOrMore isWhitespace
isWhitespace : Char -> Bool
isWhitespace char =
-- Treat hashtags and commas as effectively whitespace; ignore them.
char == '#' || char == ',' || char == ' '