packages feed

wyvern-diagrams-0.3.2.0: src/app/Main.hs

module Main where

import Blocks (render)
import Constants (svgOptions)
import Diagrams.Backend.SVG (renderSVG')
import InputArguments (inputPath, outputPath, parseInput)
-- import Lexer (alexScanTokens)
-- import LexerV2 (alexScanTokens)
import LexerV3 (lexAll, runAlex)
import Options.Applicative (execParser, fullDesc, header, helper, info, (<**>))
import Parser (ParseResult (..), diagram)

main :: IO ()
main = do
  input <- execParser options
  print input
  fileContent <- readFile $ inputPath input

  -- lexer v1/v2
  -- let tokens = alexScanTokens fileContent

  -- putStrLn "tokens:"
  -- print tokens

  -- lexer v3
  let lexingResult = runAlex fileContent lexAll

  case lexingResult of
    Left lexingError -> do
      putStrLn $ "Wyvern failed with the following error: " <> lexingError
    Right tokens -> do
      -- print tokens
      case diagram tokens 1 of
        ParseOk d -> renderSVG' (outputPath input) svgOptions (Blocks.render d)
        ParseFail s -> error s
  where
    options =
      info
        (parseInput <**> helper)
        (fullDesc <> header "Wyvern")