{-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE NoMonomorphismRestriction #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE NamedFieldPuns #-} {-# OPTIONS_GHC -Wno-missing-signatures #-} module Textphile.CLI where import Control.Monad (Monad(..)) import Data.Bool import Data.Function (($)) import Data.Semigroup (Semigroup(..)) import Data.Text (Text) import Data.Void (Void) import Symantic.CLI as CLI import qualified Data.Text.Lazy.IO as TL import qualified Symantic.Document as Doc import qualified Symantic.RNC.Write as RNC import qualified System.IO as IO import qualified Textphile.DTC.Sym as DTC import Textphile.CLI.Lang import Textphile.CLI.Utils import Textphile.CLI.Compile import Textphile.CLI.Source parseAPI = parser @Void @Doc api run api = program "textphile" $ api_commands api_help True api_version run = run_commands :!: run_help api :!: run_version api_commands = (api_options ) $ api_command_compile api_command_source api_command_schema run_commands opts = run_command_compile opts :!: run_command_source opts :!: run_command_schema api_version = helps l10n_help_version $ tag (TagLong "version") nothing <.> response @Text run_version = return (Doc.from version <> Doc.newline) api_command_schema = helps l10n_help_command_schema $ command "schema" $ response @() run_command_schema = TL.hPutStrLn IO.stdout $ RNC.writeRNC DTC.schema DTC.schema