Add exposed modules + elm-format

parser
Bram 2024-04-09 20:43:18 +02:00
parent cd0c687307
commit 78794ef59b
2 changed files with 30 additions and 16 deletions

View File

@ -5,6 +5,8 @@
"license": "EUPL-1.1", "license": "EUPL-1.1",
"version": "2.1.2", "version": "2.1.2",
"exposed-modules": [ "exposed-modules": [
"Internal.Grammar.ServerName",
"Internal.Grammar.UserId",
"Matrix", "Matrix",
"Matrix.Event", "Matrix.Event",
"Matrix.Settings" "Matrix.Settings"

View File

@ -1,6 +1,7 @@
module Internal.Tools.ParserExtra exposing (..) module Internal.Tools.ParserExtra exposing (..)
import Parser as P exposing (Parser, (|.), (|=)) import Parser as P exposing ((|.), (|=), Parser)
zeroOrMore : Parser a -> Parser (List a) zeroOrMore : Parser a -> Parser (List a)
zeroOrMore parser = zeroOrMore parser =
@ -13,12 +14,14 @@ zeroOrMore parser =
] ]
) )
oneOrMore : Parser a -> Parser (List a) oneOrMore : Parser a -> Parser (List a)
oneOrMore parser = oneOrMore parser =
P.succeed (::) P.succeed (::)
|= parser |= parser
|= zeroOrMore parser |= zeroOrMore parser
atLeast : Int -> Parser a -> Parser (List a) atLeast : Int -> Parser a -> Parser (List a)
atLeast n parser = atLeast n parser =
P.loop [] P.loop []
@ -26,6 +29,7 @@ atLeast n parser =
if List.length tail < n then if List.length tail < n then
P.succeed (\head -> P.Loop (head :: tail)) P.succeed (\head -> P.Loop (head :: tail))
|= parser |= parser
else else
P.oneOf P.oneOf
[ P.succeed (\head -> P.Loop (head :: tail)) [ P.succeed (\head -> P.Loop (head :: tail))
@ -34,6 +38,7 @@ atLeast n parser =
] ]
) )
atMost : Int -> Parser a -> Parser (List a) atMost : Int -> Parser a -> Parser (List a)
atMost n parser = atMost n parser =
P.loop [] P.loop []
@ -44,33 +49,40 @@ atMost n parser =
|= parser |= parser
, P.succeed (P.Done (List.reverse tail)) , P.succeed (P.Done (List.reverse tail))
] ]
else else
P.succeed (P.Done (List.reverse tail)) P.succeed (P.Done (List.reverse tail))
) )
times : Int -> Int -> Parser a -> Parser (List a) times : Int -> Int -> Parser a -> Parser (List a)
times inf sup parser = times inf sup parser =
let let
low : Int low : Int
low = max 0 (min inf sup) low =
max 0 (min inf sup)
high : Int high : Int
high = max 0 sup high =
max 0 sup
in in
P.loop [] P.loop []
(\tail -> (\tail ->
if List.length tail < low then if List.length tail < low then
P.succeed (\head -> P.Loop (head :: tail)) P.succeed (\head -> P.Loop (head :: tail))
|= parser
else if List.length tail < high then
P.oneOf
[ P.succeed (\head -> P.Loop (head :: tail))
|= parser |= parser
else if List.length tail < high then , P.succeed (P.Done (List.reverse tail))
P.oneOf ]
[ P.succeed (\head -> P.Loop (head :: tail))
|= parser else
, P.succeed (P.Done (List.reverse tail)) P.succeed (P.Done (List.reverse tail))
] )
else
P.succeed (P.Done (List.reverse tail))
)
exactly : Int -> Parser a -> Parser (List a) exactly : Int -> Parser a -> Parser (List a)
exactly n = exactly n =