diff --git a/Makefile b/Makefile index 3689efd..da29f56 100644 --- a/Makefile +++ b/Makefile @@ -55,7 +55,7 @@ define copy cp $< $@ endef -$(LANGFILTER): langfilter/*.hs langfilter/langfilter.cabal +$(LANGFILTER): langfilter/lib/*.hs langfilter/main/*.hs langfilter/langfilter.cabal $(cabal-exe) $(LAANTAS_SCRIPT): laantas-script/* diff --git a/langfilter/langfilter.cabal b/langfilter/langfilter.cabal index bde2dee..1ac2656 100644 --- a/langfilter/langfilter.cabal +++ b/langfilter/langfilter.cabal @@ -7,15 +7,7 @@ license: AGPL-3.0-or-later author: Rhiannon Morris maintainer: Rhiannon Morris -executable langfilter - hs-source-dirs: . - main-is: Main.hs - other-modules: - Lang, - Ebnf, - Spans, - LaantasImage, - Glosses +common base ghc-options: -Wall -Wno-missing-signatures -Wno-missing-pattern-synonym-signatures -Wno-name-shadowing @@ -31,6 +23,7 @@ executable langfilter OverloadedStrings, PatternSynonyms, RecordWildCards, + TupleSections, ViewPatterns build-depends: base >= 4.14.0.0 && < 4.21, @@ -42,3 +35,20 @@ executable langfilter text ^>= 2.1, pretty-show ^>= 1.10, laantas-script + +library + import: base + hs-source-dirs: lib + exposed-modules: + Lang, + Ebnf, + Spans, + LaantasImage, + Glosses, + LangFilter + +executable langfilter + import: base + hs-source-dirs: main + main-is: Main.hs + build-depends: langfilter diff --git a/langfilter/Ebnf.hs b/langfilter/lib/Ebnf.hs similarity index 100% rename from langfilter/Ebnf.hs rename to langfilter/lib/Ebnf.hs diff --git a/langfilter/Glosses.hs b/langfilter/lib/Glosses.hs similarity index 100% rename from langfilter/Glosses.hs rename to langfilter/lib/Glosses.hs diff --git a/langfilter/LaantasImage.hs b/langfilter/lib/LaantasImage.hs similarity index 100% rename from langfilter/LaantasImage.hs rename to langfilter/lib/LaantasImage.hs diff --git a/langfilter/Lang.hs b/langfilter/lib/Lang.hs similarity index 100% rename from langfilter/Lang.hs rename to langfilter/lib/Lang.hs diff --git a/langfilter/Main.hs b/langfilter/lib/LangFilter.hs similarity index 84% rename from langfilter/Main.hs rename to langfilter/lib/LangFilter.hs index f4ae468..b411594 100644 --- a/langfilter/Main.hs +++ b/langfilter/lib/LangFilter.hs @@ -1,4 +1,4 @@ -{-# LANGUAGE TupleSections #-} +module LangFilter where import Lang import Ebnf @@ -6,7 +6,6 @@ import Spans import Glosses import Text.Pandoc.Definition -import Text.Pandoc.JSON import Text.Pandoc.Walk import Data.Maybe import Data.Map (Map) @@ -18,17 +17,16 @@ import Control.Monad import System.Environment -main :: IO () -main = toJSONFilter filter where - filter p@(Pandoc (Meta m) _) = do - lang <- toLang $ Map.lookup "conlang" m - defColor <- getDefColor m - let ?lang = lang - let ?defColor = defColor - let f = map (walk spans . fixFigureClass . makeEbnf . - makeQuotes . letterList) . - concatMap (makeBlocks <=< glosses) - pure $ walk f p +langFilter :: Pandoc -> IO Pandoc +langFilter p@(Pandoc (Meta m) _) = do + lang <- toLang $ Map.lookup "conlang" m + defColor <- getDefColor m + let ?lang = lang + let ?defColor = defColor + let f = map (walk spans . fixFigureClass . makeEbnf . + makeQuotes . letterList) . + concatMap (makeBlocks <=< glosses) + pure $ walk f p getDefColor :: Map Text MetaValue -> IO Text getDefColor m = do diff --git a/langfilter/Spans.hs b/langfilter/lib/Spans.hs similarity index 100% rename from langfilter/Spans.hs rename to langfilter/lib/Spans.hs diff --git a/langfilter/main/Main.hs b/langfilter/main/Main.hs new file mode 100644 index 0000000..549f38b --- /dev/null +++ b/langfilter/main/Main.hs @@ -0,0 +1,4 @@ +import LangFilter +import Text.Pandoc.JSON + +main = toJSONFilter langFilter