{-# LANGUAGE OverloadedStrings #-} module Main where import Data.String.Conversions (cs) import Data.Text (replace) import GHC.Generics import qualified GHC.Generics as GHC --import Lima.Converter (Format (..), convertTo, def) import qualified Readme import Relude import Spec (unitTests) import Test.Tasty import Test.Tasty.HUnit import Text.Regex (mkRegex, subRegex) main :: IO () main = do defaultMain tests -- genReadme :: IO () -- genReadme = do -- readmeMd <- readFileBS "README.md" -- readmeHs <- readFileBS "tests/Readme.hs" -- let readmeExample = convertTo Hs Md def (cs readmeHs) -- Readme.main -- readmeOutputRust <- readFileBS "tests/outputs/demo.rs" -- readmeOutputTypeScript <- readFileBS "tests/outputs/demo.ts" -- let readmeMd' = -- cs readmeMd -- & replaceSection "example" readmeExample -- & replaceSection -- "exampleOutRust" -- ("```rust\n" <> cs readmeOutputRust <> "\n```") -- & replaceSection -- "exampleOutTypeScript" -- ("```ts\n" <> cs readmeOutputTypeScript <> "\n```") -- writeFileBS "README.md" (cs readmeMd') tests :: TestTree tests = testGroup "Tests" [unitTests] replaceSection :: Text -> Text -> Text -> Text replaceSection name new doc = let pattern = "(.|\n)*?" replacement = "\n" <> new <> "\n" in regexReplace (cs pattern) replacement doc -- Replace all occurrences of a pattern in a string regexReplace :: Text -> Text -> Text -> Text regexReplace pattern replacement input = let regex = mkRegex $ cs pattern in cs $ subRegex regex (cs input) (cs replacement)