mirror of
https://github.com/anoma/juvix.git
synced 2024-12-14 17:32:00 +03:00
c6b3b95db3
This PR adds `--prefix-id`, `--no-path`, and `only-code` flags to the HTML backend to manipulate the hyperlinks on the resulting HTML output and the output itself by only keeping the content of the body in the Html. As a usage case, we can support `juvix-standalone` blocks, as demonstrated in - https://github.com/anoma/juvix-docs/pull/80
72 lines
2.9 KiB
Haskell
72 lines
2.9 KiB
Haskell
module Commands.Html where
|
|
|
|
import Commands.Base
|
|
import Commands.Html.Options
|
|
import Juvix.Compiler.Backend.Html.Translation.FromTyped (JudocArgs (..))
|
|
import Juvix.Compiler.Backend.Html.Translation.FromTyped qualified as Html
|
|
import Juvix.Compiler.Backend.Html.Translation.FromTyped.Source
|
|
( GenSourceHtmlArgs (..),
|
|
)
|
|
import Juvix.Compiler.Concrete.Pretty qualified as Concrete
|
|
import Juvix.Compiler.Concrete.Translation.FromParsed.Analysis.Scoping qualified as Scoper
|
|
import Juvix.Compiler.Concrete.Translation.FromParsed.Analysis.Scoping.Data.Context
|
|
import Juvix.Extra.Process
|
|
import System.Process qualified as Process
|
|
|
|
runGenOnlySourceHtml :: (Members '[Embed IO, App] r) => HtmlOptions -> Sem r ()
|
|
runGenOnlySourceHtml HtmlOptions {..} = do
|
|
res <- runPipeline _htmlInputFile upToScoping
|
|
let m = head (res ^. Scoper.resultModules)
|
|
outputDir <- fromAppPathDir _htmlOutputDir
|
|
embed $
|
|
Html.genSourceHtml
|
|
GenSourceHtmlArgs
|
|
{ _genSourceHtmlArgsAssetsDir = _htmlAssetsPrefix,
|
|
_genSourceHtmlArgsHtmlKind = Html.HtmlOnly,
|
|
_genSourceHtmlArgsOnlyCode = _htmlOnlyCode,
|
|
_genSourceHtmlArgsParamBase = "",
|
|
_genSourceHtmlArgsUrlPrefix = _htmlUrlPrefix,
|
|
_genSourceHtmlArgsIdPrefix = _htmlIdPrefix,
|
|
_genSourceHtmlArgsNoPath = _htmlNoPath,
|
|
_genSourceHtmlArgsConcreteOpts = Concrete.defaultOptions,
|
|
_genSourceHtmlArgsModule = m,
|
|
_genSourceHtmlArgsComments = res ^. comments,
|
|
_genSourceHtmlArgsOutputDir = outputDir,
|
|
_genSourceHtmlArgsNoFooter = _htmlNoFooter,
|
|
_genSourceHtmlArgsNonRecursive = _htmlNonRecursive,
|
|
_genSourceHtmlArgsTheme = _htmlTheme
|
|
}
|
|
|
|
runCommand :: (Members '[Embed IO, App] r) => HtmlOptions -> Sem r ()
|
|
runCommand HtmlOptions {..}
|
|
| _htmlOnlySource = runGenOnlySourceHtml HtmlOptions {..}
|
|
| otherwise = do
|
|
ctx <- runPipeline _htmlInputFile upToInternalTyped
|
|
outputDir <- fromAppPathDir _htmlOutputDir
|
|
Html.genJudocHtml
|
|
JudocArgs
|
|
{ _judocArgsAssetsPrefix = _htmlAssetsPrefix,
|
|
_judocArgsBaseName = "proj",
|
|
_judocArgsCtx = ctx,
|
|
_judocArgsOutputDir = outputDir,
|
|
_judocArgsUrlPrefix = _htmlUrlPrefix,
|
|
_judocArgsIdPrefix = _htmlIdPrefix,
|
|
_judocArgsTheme = _htmlTheme,
|
|
_judocArgsNonRecursive = _htmlNonRecursive,
|
|
_judocArgsNoFooter = _htmlNoFooter,
|
|
_judocArgsNoPath = _htmlNoPath
|
|
}
|
|
when _htmlOpen $ case openCmd of
|
|
Nothing -> say "Could not recognize the 'open' command for your OS"
|
|
Just opencmd ->
|
|
embed
|
|
( void
|
|
( Process.spawnProcess
|
|
opencmd
|
|
[ toFilePath
|
|
( outputDir <//> Html.indexFileName
|
|
)
|
|
]
|
|
)
|
|
)
|