Skip to content

Commit 07f8450

Browse files
committed
Script to generate the compiler docs
1 parent fdc9469 commit 07f8450

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed

app/nirum-docs.hs

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
#!/usr/bin/env stack runghc
2+
{-# LANGUAGE OverloadedLists #-}
3+
{-# LANGUAGE OverloadedStrings #-}
4+
{-# LANGUAGE QuasiQuotes #-}
5+
import Control.Monad
6+
import Data.List (isPrefixOf)
7+
import System.Environment
8+
9+
import Data.Map.Strict
10+
import Data.Set
11+
import Data.Text hiding (isPrefixOf)
12+
import System.FilePath (pathSeparator)
13+
import Text.InterpolatedString.Perl6 (q)
14+
15+
import Nirum.Cli (writeFiles)
16+
import Nirum.Constructs.Module
17+
import Nirum.Package
18+
import Nirum.Targets
19+
import Nirum.Targets.Docs (Docs (..))
20+
import Nirum.Package.Metadata
21+
import Nirum.Package.ModuleSet
22+
import qualified Nirum.Version
23+
24+
packageMetadata :: Metadata Docs
25+
packageMetadata = Metadata
26+
{ version = Nirum.Version.version
27+
, description = Just
28+
"IDL compiler and RPC/distributed object framework for microservices"
29+
, license = Just "GPL-3"
30+
, keywords = ["IDL", "microservices", "SOA", "RPC"]
31+
, authors = [Author "Nirum team" Nothing Nothing]
32+
, Nirum.Package.Metadata.target = Docs
33+
{ docsTitle = "Nirum"
34+
, docsStyle = style
35+
, docsHeader = ""
36+
, docsFooter = footer
37+
}
38+
}
39+
40+
loadPackage :: FilePath -> IO (Either (Set ImportError) (Package Docs))
41+
loadPackage path = do
42+
documents <- filterWithKey ignores <$> scanDocuments path
43+
return $ case fromMap [(coreModulePath, coreModule)] of
44+
Left importErrors -> Left importErrors
45+
Right ms -> Right $ Package packageMetadata ms documents
46+
where
47+
ignores :: FilePath -> d -> Bool
48+
ignores filePath _ =
49+
not $ ("examples" ++ [pathSeparator]) `isPrefixOf` filePath
50+
51+
main :: IO ()
52+
main = do
53+
args <- getArgs
54+
outputDir <- case args of
55+
o : _ -> return o
56+
[] -> fail "missing output path"
57+
packageR <- loadPackage "."
58+
package <- case packageR of
59+
Left errors -> fail (show errors)
60+
Right p -> return p
61+
case buildPackage package of
62+
Right buildResult -> writeFiles outputDir buildResult
63+
Left e -> print e
64+
65+
style :: Text
66+
style = [q|
67+
.github-corner:hover .octo-arm {
68+
animation: octocat-wave 560ms ease-in-out;
69+
}
70+
@keyframes octocat-wave {
71+
0%, 100% { transform:rotate(0) }
72+
20%, 60% { transform:rotate(-25deg) }
73+
40%, 80% { transform:rotate(10deg) }
74+
}
75+
@media (max-width:500px) {
76+
.github-corner:hover .octo-arm {
77+
animation: none;
78+
}
79+
.github-corner .octo-arm {
80+
animation: octocat-wave 560ms ease-in-out;
81+
}
82+
}
83+
|]
84+
85+
footer :: Text
86+
footer = [q|
87+
<div class="github"><a href="https://github.com/spoqa/nirum/tree/master/examples" class="github-corner" aria-label="View source on GitHub"><svg width="80" height="80" viewBox="0 0 250 250" style="fill:#151513; color:#fff; position: absolute; top: 0; border: 0; right: 0;" aria-hidden="true"><path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path></svg></a></div>
88+
|]

0 commit comments

Comments
 (0)