|
| 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