jacinda 2.0.0.0 → 2.0.1.0
raw patch · 8 files changed
+55/−31 lines, 8 filesdep ~optparse-applicativedep ~vector
Dependency ranges changed: optparse-applicative, vector
Files
- CHANGELOG.md +5/−0
- doc/guide.pdf binary
- jacinda.cabal +3/−3
- man/ja.1 +2/−28
- src/A.hs +10/−0
- src/L.x +20/−0
- src/Parser.y +12/−0
- src/Parser/Rw.hs +3/−0
CHANGELOG.md view
@@ -1,3 +1,8 @@+# 2.0.1.0++ * Add `mapMaybe`, `dedup`, `filter`, `fold`, `fold1`, `scan`, `dedupOn`,+ `catMaybes` synonyms.+ # 2.0.0.0 * Scrap `HasField` typeclass; add row types
doc/guide.pdf view
binary file changed (205361 → 205361 bytes)
jacinda.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.0 name: jacinda-version: 2.0.0.0+version: 2.0.1.0 license: AGPL-3 license-file: COPYING maintainer: vamchale@gmail.com@@ -77,7 +77,7 @@ directory, filepath, microlens-mtl >=0.1.8.0,- vector,+ vector >=0.12.2.0, recursion >=1.0.0.0, split @@ -108,7 +108,7 @@ build-depends: base, jacinda-lib,- optparse-applicative >=0.13.0.0,+ optparse-applicative >=0.14.1.0, text if impl(ghc >=8.0)
man/ja.1 view
@@ -1,26 +1,9 @@-.\" Automatically generated by Pandoc 3.1.6.1+.\" Automatically generated by Pandoc 3.1.7 .\"-.\" Define V font for inline verbatim, using C font in formats-.\" that render this, and otherwise B font.-.ie "\f[CB]x\f[]"x" \{\-. ftr V B-. ftr VI BI-. ftr VB B-. ftr VBI BI-.\}-.el \{\-. ftr V CR-. ftr VI CI-. ftr VB CB-. ftr VBI CBI-.\} .TH "ja (1)" "" "" "" ""-.hy .SH NAME-.PP ja - Jacinda: data filtering, processing, reporting .SH SYNOPSIS-.PP ja run src.jac -i data.txt .PP cat FILE1 FILE2 | ja \[aq]#\[dq]$0\[cq]@@ -29,10 +12,8 @@ .PP ja e \[aq]11.67*1.2\[cq] .SH DESCRIPTION-.PP \f[B]Jacinda\f[R] is a data stream processing language à la AWK. .SH SUBCOMMANDS-.PP \f[B]run\f[R] - Run a program from file .PP \f[B]tc\f[R] - Typecheck a program@@ -50,11 +31,9 @@ Include directory for imports .SH LANGUAGE .SS REGEX-.PP Regular expressions follow Rust\[cq]s regex library: https://docs.rs/regex/ .SS BUILTINS-.PP \f[B]:i\f[R] Postfix operator: parse integer .PP \f[B]:f\f[R] Postfix operator: parse float@@ -159,7 +138,6 @@ .PP \f[B]nf\f[R] Number of fields .SS SYNTAX-.PP \f[B]\[ga]n\f[R] nth field .PP \f[B]\[ga]*\f[R] last field@@ -187,13 +165,11 @@ .PP \f[B]\[at]include\[aq]/path/file.jac\[cq]\f[R] File include .SS DECLARATIONS-.PP \f[B]:set fs=/REGEX/;\f[R] Set field separator .PP \f[B]:flush;\f[R] Flush stdout for every line .SH INFLUENTIAL ENVIRONMENT VARIABLES-.PP-\f[V]JAC_PATH\f[R] - colon-separated list of directories to search+\f[CR]JAC_PATH\f[R] - colon-separated list of directories to search .SH EXAMPLES .TP [#x>72] #. $0@@ -238,11 +214,9 @@ \&.?{|\[ga]1 \[ti]* 1 /([\[ha]\[rs]?]*)/} Trim URL .SH BUGS-.PP Please report any bugs you may come across to https://github.com/vmchale/jacinda/issues .SH COPYRIGHT-.PP Copyright 2021-2022. Vanessa McHale. All Rights Reserved.
src/A.hs view
@@ -237,6 +237,7 @@ | OptionVal { eLoc :: a, eMaybe :: Maybe (E a) } | Cond { eLoc :: a, eIf :: E a, eThen :: E a, eElse :: E a } | In { oop :: E a, ip :: Maybe (E a), mm :: Maybe (E a), istream :: E a }+ | RwB { eLoc :: a, eBin :: BBin } | RwT { eLoc :: a, eTer :: BTer } deriving (Functor, Generic) instance Recursive (E a) where@@ -276,6 +277,7 @@ | OptionValF a (Maybe x) | CondF a x x x | InF x (Maybe x) (Maybe x) x+ | RwBF a BBin | RwTF a BTer deriving (Generic, Functor, Foldable, Traversable) type instance Base (E a) = (EF a)@@ -340,6 +342,12 @@ pretty (OptionVal _ (Just e)) = "Some" <+> pretty e pretty (OptionVal _ Nothing) = "None" pretty (Cond _ e0 e1 e2) = "if" <+> pretty e0 <+> "then" <+> pretty e1 <+> "else" <+> pretty e2+ pretty (RwB _ MapMaybe) = "mapMaybe"+ pretty (RwB _ DedupOn) = "dedupOn"+ pretty (RwB _ Filter) = "filter"+ pretty (RwT _ Fold) = "fold"+ pretty (RwT _ Scan) = "scan"+ pretty (RwB _ Fold1) = "fold1" instance Show (E a) where show=show.pretty @@ -374,6 +382,8 @@ (==) _ RC{} = error "Cannot compare compiled regex!" (==) (Paren _ e) e' = e == e' (==) e (Paren _ e') = e == e'+ (==) (RwB _ b) (RwB _ b') = b == b'+ (==) (RwT _ b) (RwT _ b') = b == b' (==) _ _ = False data C = IsNum | IsEq | IsOrd
src/L.x view
@@ -116,8 +116,10 @@ "|." { mkSym FloorSym } ⌊ { mkSym FloorSym } "~." { mkSym DedupTok }+ dedup { mkSym DedupTok } "~.*" { mkSym DedupOnTok } ".?" { mkSym CatMaybesTok }+ catMaybes { mkSym CatMaybesTok } ":?" { mkSym MapMaybeTok } "~*" { mkSym CapTok } "-." { mkSym NegTok }@@ -155,6 +157,12 @@ Some { mkBuiltin BuiltinSome } None { mkBuiltin BuiltinNone } fp { mkBuiltin BuiltinFp }+ mapMaybe { mkBuiltin BuiltinMapMaybe }+ dedupOn { mkBuiltin BuiltinDedupOn }+ filter { mkBuiltin BuiltinFilt }+ fold { mkBuiltin BuiltinFold }+ fold1 { mkBuiltin BuiltinFold1 }+ scan { mkBuiltin BuiltinScan } ":i" { mkBuiltin BuiltinIParse } ":f" { mkBuiltin BuiltinFParse }@@ -394,6 +402,12 @@ | BuiltinSome | BuiltinNone | BuiltinFp+ | BuiltinMapMaybe+ | BuiltinDedupOn+ | BuiltinFilt+ | BuiltinFold+ | BuiltinFold1+ | BuiltinScan instance Pretty Builtin where pretty BuiltinIParse = ":i"@@ -410,6 +424,12 @@ pretty BuiltinNone = "None" pretty BuiltinFp = "fp" pretty BuiltinCaptures = "captures"+ pretty BuiltinMapMaybe = "mapMaybe"+ pretty BuiltinDedupOn = "dedupOn"+ pretty BuiltinFilt = "filter"+ pretty BuiltinFold = "fold"+ pretty BuiltinFold1 = "fold1"+ pretty BuiltinScan = "scan" data Token a = EOF { loc :: a } | TokSym { loc :: a, _sym :: Sym }
src/Parser.y view
@@ -137,6 +137,12 @@ none { TokBuiltin $$ BuiltinNone } fp { TokBuiltin $$ BuiltinFp } captures { TokBuiltin $$ BuiltinCaptures }+ mapMaybeL { TokBuiltin $$ BuiltinMapMaybe }+ dedupOnL { TokBuiltin $$ BuiltinDedupOn }+ filterL { TokBuiltin $$ BuiltinFilt }+ foldL { TokBuiltin $$ BuiltinFold }+ fold1L { TokBuiltin $$ BuiltinFold1 }+ scanL { TokBuiltin $$ BuiltinScan } iParse { TokBuiltin $$ BuiltinIParse } fParse { TokBuiltin $$ BuiltinFParse }@@ -273,6 +279,12 @@ | rr { RegexLit (loc $1) (encodeUtf8 $ rr $1) } | min { BB $1 Min } | max { BB $1 Max }+ | mapMaybeL { RwB $1 MapMaybe }+ | dedupOnL { RwB $1 DedupOn }+ | filterL { RwB $1 Filter }+ | foldL { RwT $1 Fold }+ | fold1L { RwB $1 Fold1 }+ | scanL { RwT $1 Scan } | split { BB $1 Split } | match { BB $1 Match } | splitc { BB $1 Splitc }
src/Parser/Rw.hs view
@@ -56,4 +56,7 @@ a (EAppF l e0@(TB _ Option) (EApp lϵ e1 e2)) = EApp l (EApp lϵ e0 e1) e2 a (EAppF l e0@(TB _ AllCaptures) (EApp lϵ (EApp lϵϵ e1 e2) e3)) = EApp l (EApp lϵ (EApp lϵϵ e0 e1) e2) e3 a (EAppF l e0@(TB _ AllCaptures) (EApp lϵ e1 (EApp lϵϵ e2 e3))) = EApp l (EApp lϵ (EApp lϵϵ e0 e1) e2) e3+ a (EAppF l (RwB l0 b) (EApp lϵ e1 e2)) = EApp l (EApp lϵ (BB l0 b) e1) e2+ a (EAppF l (RwT l0 t) (EApp lϵ (EApp lϵϵ e1 e2) e3)) = EApp l (EApp lϵ (EApp lϵϵ (TB l0 t) e1) e2) e3+ a (EAppF l (RwT l0 t) (EApp lϵ e1 (EApp lϵϵ e2 e3))) = EApp l (EApp lϵ (EApp lϵϵ (TB l0 t) e1) e2) e3 a x = embed x