make laantas-script usable as a library
This commit is contained in:
parent
fe209a8aca
commit
3911f5052b
6 changed files with 25 additions and 14 deletions
55
laantas-script/main/Main.hs
Normal file
55
laantas-script/main/Main.hs
Normal file
|
@ -0,0 +1,55 @@
|
|||
import Prelude hiding (getContents, readFile, writeFile, putStrLn)
|
||||
import Svg
|
||||
import Glyphs (doGlyphs, lineHeight')
|
||||
import Split
|
||||
import Options.Applicative
|
||||
import Data.Functor
|
||||
import Data.Text.IO (readFile, getContents)
|
||||
import Data.Text.Lazy.IO (writeFile, putStrLn)
|
||||
|
||||
|
||||
data Options =
|
||||
Opts {
|
||||
width, size, stroke :: {-# UNPACK #-} !Double,
|
||||
inFile, outFile :: Maybe FilePath,
|
||||
text :: Maybe Text,
|
||||
color :: Text
|
||||
}
|
||||
deriving Show
|
||||
|
||||
options :: IO Options
|
||||
options = execParser desc where
|
||||
desc = info (opts <**> helper) $
|
||||
fullDesc <> header "render lántas text as svg"
|
||||
opts =
|
||||
Opts <$> dimOpt 'W' "width" 1000
|
||||
<*> (dimOpt' 'S' "size" "text size" 60 <&> (/ lineHeight'))
|
||||
<*> dimOpt' 'K' "stroke" "line thickness" 2
|
||||
<*> filePath 'i' "input"
|
||||
<*> filePath 'o' "output"
|
||||
<*> text
|
||||
<*> color
|
||||
dimOpt s l d = dimOpt' s l l d
|
||||
dimOpt' s l n d = option auto $ mconcat
|
||||
[short s, long l, help $ n <> " in pixels", metavar "SIZE", value d]
|
||||
filePath s n = optional $ option str $ mconcat
|
||||
[short s, long n, help $ n <> " file", metavar "FILE"]
|
||||
text = optional $ option str $ mconcat
|
||||
[short 't', long "text", help $ "use given text instead of a file",
|
||||
metavar "TEXT"]
|
||||
color = option str $ mconcat
|
||||
[short 'C', long "color", help $ "set stroke color (any css syntax)",
|
||||
metavar "COLOR", value "black"]
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
Opts {..} <- options
|
||||
txt <- split <$> if
|
||||
| Just t <- text -> pure t
|
||||
| Just "-" <- inFile -> getContents
|
||||
| Just i <- inFile -> readFile i
|
||||
| otherwise -> fail "no input given"
|
||||
let res = prettyText $ doGlyphs txt (E {..})
|
||||
case outFile of
|
||||
Just o | o /= "-" -> writeFile o res
|
||||
_ -> putStrLn res
|
Loading…
Add table
Add a link
Reference in a new issue