]> Git — Sourcephile - doclang.git/blob - cli/Textphile/CLI.hs
cli: rewrite using new symantic-cli
[doclang.git] / cli / Textphile / CLI.hs
1 {-# LANGUAGE AllowAmbiguousTypes #-}
2 {-# LANGUAGE OverloadedStrings #-}
3 {-# LANGUAGE NoMonomorphismRestriction #-}
4 {-# LANGUAGE TypeApplications #-}
5 {-# LANGUAGE NamedFieldPuns #-}
6 {-# OPTIONS_GHC -Wno-missing-signatures #-}
7 module Textphile.CLI where
8
9 import Control.Monad (Monad(..))
10 import Data.Bool
11 import Data.Function (($))
12 import Data.Semigroup (Semigroup(..))
13 import Data.Text (Text)
14 import Data.Void (Void)
15 import Symantic.CLI as CLI
16 import qualified Data.Text.Lazy.IO as TL
17 import qualified Symantic.Document as Doc
18 import qualified Symantic.RNC.Write as RNC
19 import qualified System.IO as IO
20 import qualified Textphile.DTC.Sym as DTC
21
22 import Textphile.CLI.Lang
23 import Textphile.CLI.Utils
24 import Textphile.CLI.Compile
25 import Textphile.CLI.Source
26
27 parseAPI = parser @Void @Doc api run
28
29 api =
30 program "textphile" $
31 api_commands <!>
32 api_help True <!>
33 api_version
34 run =
35 run_commands :!:
36 run_help api :!:
37 run_version
38
39 api_commands =
40 (api_options <?>) $
41 api_command_compile <!>
42 api_command_source <!>
43 api_command_schema
44 run_commands opts =
45 run_command_compile opts :!:
46 run_command_source opts :!:
47 run_command_schema
48
49 api_version =
50 helps l10n_help_version $
51 tag (TagLong "version") nothing
52 <.> response @Text
53 run_version =
54 return (Doc.from version <> Doc.newline)
55
56 api_command_schema =
57 helps l10n_help_command_schema $
58 command "schema" $
59 response @()
60 run_command_schema =
61 TL.hPutStrLn IO.stdout $
62 RNC.writeRNC DTC.schema DTC.schema