sammyette 2023-09-02 16:57:48 +00:00 committed by GitHub
commit 688552f029
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 396 additions and 90 deletions

View File

@ -43,6 +43,12 @@ type module struct {
HasTypes bool
}
type param struct{
Name string
Type string
Doc []string
}
type docPiece struct {
Doc []string
FuncSig string
@ -55,6 +61,7 @@ type docPiece struct {
IsType bool
Fields []docPiece
Properties []docPiece
Params []param
}
type tag struct {
@ -215,6 +222,17 @@ start:
fields := docPieceTag("field", tags)
properties := docPieceTag("property", tags)
var params []param
if paramsRaw := tags["param"]; paramsRaw != nil {
params = make([]param, len(paramsRaw))
for i, p := range paramsRaw {
params[i] = param{
Name: p.id,
Type: p.fields[0],
Doc: p.fields[1:],
}
}
}
for _, d := range doc {
if strings.HasPrefix(d, "---") {
@ -252,6 +270,7 @@ start:
ParentModule: parentMod,
Fields: fields,
Properties: properties,
Params: params,
}
if strings.HasSuffix(dps.GoFuncName, strings.ToLower("loader")) {
dps.Doc = parts
@ -412,13 +431,13 @@ func main() {
defer wg.Done()
modOrIface := "Module"
if modu.ParentModule != "" {
modOrIface = "Interface"
modOrIface = "Module"
}
f, _ := os.Create(docPath)
f.WriteString(fmt.Sprintf(header, modOrIface, modname, modu.ShortDescription))
typeTag, _ := regexp.Compile(`@\w+`)
modDescription := typeTag.ReplaceAllStringFunc(strings.Replace(modu.Description, "<", `\<`, -1), func(typ string) string {
modDescription := typeTag.ReplaceAllStringFunc(strings.Replace(strings.Replace(modu.Description, "<", `\<`, -1), "{{\\<", "{{<", -1), func(typ string) string {
typName := typ[1:]
typLookup := typeTable[strings.ToLower(typName)]
ifaces := typLookup[0] + "." + typLookup[1] + "/"
@ -454,7 +473,7 @@ func main() {
if dps.IsMember {
continue
}
htmlSig := typeTag.ReplaceAllStringFunc(strings.Replace(dps.FuncSig, "<", `\<`, -1), func(typ string) string {
htmlSig := typeTag.ReplaceAllStringFunc(strings.Replace(modname + "." + dps.FuncSig, "<", `\<`, -1), func(typ string) string {
typName := typ[1:]
typLookup := typeTable[strings.ToLower(typName)]
ifaces := typLookup[0] + "." + typLookup[1] + "/"
@ -462,7 +481,7 @@ func main() {
ifaces = ""
}
linkedTyp := fmt.Sprintf("/Hilbish/docs/api/%s/%s#%s", typLookup[0], ifaces, strings.ToLower(typName))
return fmt.Sprintf(`<a href="%s" style="text-decoration: none;">%s</a>`, linkedTyp, typName)
return fmt.Sprintf(`<a href="%s" style="text-decoration: none;" id="lol">%s</a>`, linkedTyp, typName)
})
f.WriteString(fmt.Sprintf("### %s\n", htmlSig))
for _, doc := range dps.Doc {
@ -470,6 +489,26 @@ func main() {
f.WriteString(doc + "\n")
}
}
f.WriteString("#### Parameters\n")
if len(dps.Params) == 0 {
f.WriteString("This function has no parameters. \n")
}
for _, p := range dps.Params {
isVariadic := false
typ := p.Type
if strings.HasPrefix(p.Type, "...") {
isVariadic = true
typ = p.Type[3:]
}
f.WriteString(fmt.Sprintf("`%s` **`%s`**", typ, p.Name))
if isVariadic {
f.WriteString(" (This type is variadic. You can pass an infinite amount of parameters with this type.)")
}
f.WriteString(" \n")
f.WriteString(strings.Join(p.Doc, " "))
f.WriteString("\n\n")
}
f.WriteString("\n")
}
}

View File

@ -8,27 +8,62 @@ menu:
---
## Introduction
Bait is the event emitter for Hilbish. Why name it bait? Why not.
It throws hooks that you can catch. This is what you will use if
you want to listen in on hooks to know when certain things have
happened, like when you've changed directory, a command has failed,
etc. To find all available hooks thrown by Hilbish, see doc hooks.
Bait is the event emitter for Hilbish. Much like Node.js and
its `events` system, many actions in Hilbish emit events.
Unlike Node.js, Hilbish events are global. So make sure to
pick a unique name!
Usage of the Bait module consists of userstanding
event-driven architecture, but it's pretty simple:
If you want to act on a certain event, you can `catch` it.
You can act on events via callback functions.
Examples of this are in the Hilbish default config!
Consider this part of it:
```
bait.catch('command.exit', function(code)
running = false
doPrompt(code ~= 0)
doNotifyPrompt()
end)
```
What this does is, whenever the `command.exit` event is thrown,
this function will set the user prompt.
## Functions
### catch(name, cb)
### bait.catch(name, cb)
Catches a hook with `name`. Runs the `cb` when it is thrown
#### Parameters
`string` **`name`**
ummm
### catchOnce(name, cb)
### bait.catchOnce(name, cb)
Same as catch, but only runs the `cb` once and then removes the hook
#### Parameters
This function has no parameters.
### hooks(name) -> table
### bait.hooks(name) -> table
Returns a table with hooks (callback functions) on the event with `name`.
#### Parameters
This function has no parameters.
### release(name, catcher)
### bait.release(name, catcher)
Removes the `catcher` for the event with `name`.
For this to work, `catcher` has to be the same function used to catch
an event, like one saved to a variable.
#### Parameters
This function has no parameters.
### throw(name, ...args)
### bait.throw(name, ...args)
Throws a hook with `name` with the provided `args`
#### Parameters
`string` **`name`**
The name of the hook.
`any` **`args`** (This type is variadic. You can pass an infinite amount of parameters with this type.)
The arguments to pass to the hook.

View File

@ -38,9 +38,13 @@ output should go.
name would suggest.
## Functions
### deregister(name)
### commander.deregister(name)
Deregisters any command registered with `name`
#### Parameters
This function has no parameters.
### register(name, cb)
### commander.register(name, cb)
Register a command with `name` that runs `cb` when ran
#### Parameters
This function has no parameters.

View File

@ -13,39 +13,57 @@ and other things, and acts an addition to the Lua standard library's
I/O and filesystem functions.
## Functions
### abs(path) -> string
### fs.abs(path) -> string
Gives an absolute version of `path`.
#### Parameters
This function has no parameters.
### basename(path) -> string
### fs.basename(path) -> string
Gives the basename of `path`. For the rules,
see Go's filepath.Base
#### Parameters
This function has no parameters.
### cd(dir)
### fs.cd(dir)
Changes directory to `dir`
#### Parameters
This function has no parameters.
### dir(path) -> string
### fs.dir(path) -> string
Returns the directory part of `path`. For the rules, see Go's
filepath.Dir
#### Parameters
This function has no parameters.
### glob(pattern) -> matches (table)
### fs.glob(pattern) -> matches (table)
Glob all files and directories that match the pattern.
For the rules, see Go's filepath.Glob
#### Parameters
This function has no parameters.
### join(...) -> string
### fs.join(...) -> string
Takes paths and joins them together with the OS's
directory separator (forward or backward slash).
#### Parameters
This function has no parameters.
### mkdir(name, recursive)
### fs.mkdir(name, recursive)
Makes a directory called `name`. If `recursive` is true, it will create its parent directories.
#### Parameters
This function has no parameters.
### readdir(dir) -> {}
### fs.readdir(dir) -> {}
Returns a table of files in `dir`.
#### Parameters
This function has no parameters.
### stat(path) -> {}
### fs.stat(path) -> {}
Returns a table of info about the `path`.
It contains the following keys:
name (string) - Name of the path
size (number) - Size of the path
mode (string) - Permission mode in an octal format string (with leading 0)
isDir (boolean) - If the path is a directory
#### Parameters
This function has no parameters.

View File

@ -23,29 +23,41 @@ interfaces and functions which directly relate to shell functionality.
- `exitCode`: xit code of the last executed command
## Functions
### alias(cmd, orig)
### hilbish.alias(cmd, orig)
Sets an alias of `cmd` to `orig`
#### Parameters
This function has no parameters.
### appendPath(dir)
### hilbish.appendPath(dir)
Appends `dir` to $PATH
#### Parameters
This function has no parameters.
### complete(scope, cb)
### hilbish.complete(scope, cb)
Registers a completion handler for `scope`.
A `scope` is currently only expected to be `command.<cmd>`,
replacing <cmd> with the name of the command (for example `command.git`).
`cb` must be a function that returns a table of "completion groups."
Check `doc completions` for more information.
#### Parameters
This function has no parameters.
### cwd() -> string
### hilbish.cwd() -> string
Returns the current directory of the shell
#### Parameters
This function has no parameters.
### exec(cmd)
### hilbish.exec(cmd)
Replaces running hilbish with `cmd`
#### Parameters
This function has no parameters.
### goro(fn)
### hilbish.goro(fn)
Puts `fn` in a goroutine
#### Parameters
This function has no parameters.
### highlighter(line)
### hilbish.highlighter(line)
Line highlighter handler. This is mainly for syntax highlighting, but in
reality could set the input of the prompt to *display* anything. The
callback is passed the current line and is expected to return a line that
@ -58,59 +70,83 @@ function hilbish.highlighter(line)
end
```
This code will highlight all double quoted strings in green.
#### Parameters
This function has no parameters.
### hinter(line, pos)
### hilbish.hinter(line, pos)
The command line hint handler. It gets called on every key insert to
determine what text to use as an inline hint. It is passed the current
line and cursor position. It is expected to return a string which is used
as the text for the hint. This is by default a shim. To set hints,
override this function with your custom handler.
#### Parameters
This function has no parameters.
### inputMode(mode)
### hilbish.inputMode(mode)
Sets the input mode for Hilbish's line reader. Accepts either emacs or vim
#### Parameters
This function has no parameters.
### interval(cb, time) -> <a href="/Hilbish/docs/api/hilbish/hilbish.timers/#timer" style="text-decoration: none;">Timer</a>
### hilbish.interval(cb, time) -> <a href="/Hilbish/docs/api/hilbish/hilbish.timers/#timer" style="text-decoration: none;" id="lol">Timer</a>
Runs the `cb` function every `time` milliseconds.
This creates a timer that starts immediately.
#### Parameters
This function has no parameters.
### multiprompt(str)
### hilbish.multiprompt(str)
Changes the continued line prompt to `str`
#### Parameters
This function has no parameters.
### prependPath(dir)
### hilbish.prependPath(dir)
Prepends `dir` to $PATH
#### Parameters
This function has no parameters.
### prompt(str, typ)
### hilbish.prompt(str, typ)
Changes the shell prompt to `str`
There are a few verbs that can be used in the prompt text.
These will be formatted and replaced with the appropriate values.
`%d` - Current working directory
`%u` - Name of current user
`%h` - Hostname of device
#### Parameters
This function has no parameters.
### read(prompt) -> input (string)
### hilbish.read(prompt) -> input (string)
Read input from the user, using Hilbish's line editor/input reader.
This is a separate instance from the one Hilbish actually uses.
Returns `input`, will be nil if ctrl + d is pressed, or an error occurs (which shouldn't happen)
#### Parameters
This function has no parameters.
### run(cmd, returnOut) -> exitCode (number), stdout (string), stderr (string)
### hilbish.run(cmd, returnOut) -> exitCode (number), stdout (string), stderr (string)
Runs `cmd` in Hilbish's sh interpreter.
If returnOut is true, the outputs of `cmd` will be returned as the 2nd and
3rd values instead of being outputted to the terminal.
#### Parameters
This function has no parameters.
### runnerMode(mode)
### hilbish.runnerMode(mode)
Sets the execution/runner mode for interactive Hilbish. This determines whether
Hilbish wll try to run input as Lua and/or sh or only do one of either.
Accepted values for mode are hybrid (the default), hybridRev (sh first then Lua),
sh, and lua. It also accepts a function, to which if it is passed one
will call it to execute user input instead.
#### Parameters
This function has no parameters.
### timeout(cb, time) -> <a href="/Hilbish/docs/api/hilbish/hilbish.timers/#timer" style="text-decoration: none;">Timer</a>
### hilbish.timeout(cb, time) -> <a href="/Hilbish/docs/api/hilbish/hilbish.timers/#timer" style="text-decoration: none;" id="lol">Timer</a>
Runs the `cb` function after `time` in milliseconds.
This creates a timer that starts immediately.
#### Parameters
This function has no parameters.
### which(name) -> string
### hilbish.which(name) -> string
Checks if `name` is a valid command.
Will return the path of the binary, or a basename if it's a commander.
#### Parameters
This function has no parameters.
## Types
## Sink

View File

@ -1,5 +1,5 @@
---
title: Interface hilbish.aliases
title: Module hilbish.aliases
description: command aliasing
layout: doc
menu:
@ -11,15 +11,23 @@ menu:
The alias interface deals with all command aliases in Hilbish.
## Functions
### add(alias, cmd)
### hilbish.aliases.add(alias, cmd)
This is an alias (ha) for the `hilbish.alias` function.
#### Parameters
This function has no parameters.
### delete(name)
### hilbish.aliases.delete(name)
Removes an alias.
#### Parameters
This function has no parameters.
### list() -> table\<string, string>
### hilbish.aliases.list() -> table\<string, string>
Get a table of all aliases, with string keys as the alias and the value as the command.
#### Parameters
This function has no parameters.
### resolve(alias) -> command (string)
### hilbish.aliases.resolve(alias) -> command (string)
Tries to resolve an alias to its command.
#### Parameters
This function has no parameters.

View File

@ -1,5 +1,5 @@
---
title: Interface hilbish.completions
title: Module hilbish.completions
description: tab completions
layout: doc
menu:
@ -11,19 +11,27 @@ menu:
The completions interface deals with tab completions.
## Functions
### call(name, query, ctx, fields) -> completionGroups (table), prefix (string)
### hilbish.completions.call(name, query, ctx, fields) -> completionGroups (table), prefix (string)
Calls a completer function. This is mainly used to call
a command completer, which will have a `name` in the form
of `command.name`, example: `command.git`.
You can check `doc completions` for info on the `completionGroups` return value.
#### Parameters
This function has no parameters.
### handler(line, pos)
### hilbish.completions.handler(line, pos)
The handler function is the callback for tab completion in Hilbish.
You can check the completions doc for more info.
#### Parameters
This function has no parameters.
### bins(query, ctx, fields) -> entries (table), prefix (string)
### hilbish.completions.bins(query, ctx, fields) -> entries (table), prefix (string)
Returns binary/executale completion candidates based on the provided query.
#### Parameters
This function has no parameters.
### files(query, ctx, fields) -> entries (table), prefix (string)
### hilbish.completions.files(query, ctx, fields) -> entries (table), prefix (string)
Returns file completion candidates based on the provided query.
#### Parameters
This function has no parameters.

View File

@ -1,5 +1,5 @@
---
title: Interface hilbish.editor
title: Module hilbish.editor
description: interactions for Hilbish's line reader
layout: doc
menu:
@ -12,15 +12,23 @@ The hilbish.editor interface provides functions to
directly interact with the line editor in use.
## Functions
### getLine() -> string
### hilbish.editor.getLine() -> string
Returns the current input line.
#### Parameters
This function has no parameters.
### getVimRegister(register) -> string
### hilbish.editor.getVimRegister(register) -> string
Returns the text that is at the register.
#### Parameters
This function has no parameters.
### insert(text)
### hilbish.editor.insert(text)
Inserts text into the line.
#### Parameters
This function has no parameters.
### setVimRegister(register, text)
### hilbish.editor.setVimRegister(register, text)
Sets the vim register at `register` to hold the passed text.
#### Parameters
This function has no parameters.

View File

@ -1,5 +1,5 @@
---
title: Interface hilbish.history
title: Module hilbish.history
description: command history
layout: doc
menu:
@ -13,18 +13,28 @@ This includes the ability to override functions to change the main
method of saving history.
## Functions
### add(cmd)
### hilbish.history.add(cmd)
Adds a command to the history.
#### Parameters
This function has no parameters.
### all() -> table
### hilbish.history.all() -> table
Retrieves all history.
#### Parameters
This function has no parameters.
### clear()
### hilbish.history.clear()
Deletes all commands from the history.
#### Parameters
This function has no parameters.
### get(idx)
### hilbish.history.get(idx)
Retrieves a command from the history based on the `idx`.
#### Parameters
This function has no parameters.
### size() -> number
### hilbish.history.size() -> number
Returns the amount of commands in the history.
#### Parameters
This function has no parameters.

View File

@ -1,5 +1,5 @@
---
title: Interface hilbish.jobs
title: Module hilbish.jobs
description: background job management
layout: doc
menu:
@ -15,20 +15,30 @@ Jobs are the name of background tasks/commands. A job can be started via
interactive usage or with the functions defined below for use in external runners.
## Functions
### add(cmdstr, args, execPath)
### hilbish.jobs.add(cmdstr, args, execPath)
Adds a new job to the job table. Note that this does not immediately run it.
#### Parameters
This function has no parameters.
### all() -> table\<<a href="/Hilbish/docs/api/hilbish/hilbish.jobs/#job" style="text-decoration: none;">Job</a>>
### hilbish.jobs.all() -> table\<<a href="/Hilbish/docs/api/hilbish/hilbish.jobs/#job" style="text-decoration: none;" id="lol">Job</a>>
Returns a table of all job objects.
#### Parameters
This function has no parameters.
### disown(id)
### hilbish.jobs.disown(id)
Disowns a job. This deletes it from the job table.
#### Parameters
This function has no parameters.
### get(id) -> <a href="/Hilbish/docs/api/hilbish/hilbish.jobs/#job" style="text-decoration: none;">Job</a>
### hilbish.jobs.get(id) -> <a href="/Hilbish/docs/api/hilbish/hilbish.jobs/#job" style="text-decoration: none;" id="lol">Job</a>
Get a job object via its ID.
#### Parameters
This function has no parameters.
### last() -> <a href="/Hilbish/docs/api/hilbish/hilbish.jobs/#job" style="text-decoration: none;">Job</a>
### hilbish.jobs.last() -> <a href="/Hilbish/docs/api/hilbish/hilbish.jobs/#job" style="text-decoration: none;" id="lol">Job</a>
Returns the last added job from the table.
#### Parameters
This function has no parameters.
## Types
## Job

View File

@ -1,5 +1,5 @@
---
title: Interface hilbish.os
title: Module hilbish.os
description: OS Info
layout: doc
menu:

View File

@ -1,5 +1,5 @@
---
title: Interface hilbish.runner
title: Module hilbish.runner
description: interactive command runner customization
layout: doc
menu:
@ -15,17 +15,23 @@ language or script of their choosing. A good example is using it to
write command in Fennel.
## Functions
### setMode(cb)
### hilbish.runner.setMode(cb)
This is the same as the `hilbish.runnerMode` function. It takes a callback,
which will be used to execute all interactive input.
In normal cases, neither callbacks should be overrided by the user,
as the higher level functions listed below this will handle it.
#### Parameters
This function has no parameters.
### lua(cmd)
### hilbish.runner.lua(cmd)
Evaluates `cmd` as Lua input. This is the same as using `dofile`
or `load`, but is appropriated for the runner interface.
#### Parameters
This function has no parameters.
### sh(cmd)
### hilbish.runner.sh(cmd)
Runs a command in Hilbish's shell script interpreter.
This is the equivalent of using `source`.
#### Parameters
This function has no parameters.

View File

@ -1,5 +1,5 @@
---
title: Interface hilbish.timers
title: Module hilbish.timers
description: timeout and interval API
layout: doc
menu:
@ -35,12 +35,16 @@ print(t.running) // true
- `TIMEOUT`: Constant for a timeout timer type
## Functions
### create(type, time, callback) -> <a href="/Hilbish/docs/api/hilbish/hilbish.timers/#timer" style="text-decoration: none;">Timer</a>
### hilbish.timers.create(type, time, callback) -> <a href="/Hilbish/docs/api/hilbish/hilbish.timers/#timer" style="text-decoration: none;" id="lol">Timer</a>
Creates a timer that runs based on the specified `time` in milliseconds.
The `type` can either be `hilbish.timers.INTERVAL` or `hilbish.timers.TIMEOUT`
#### Parameters
This function has no parameters.
### get(id) -> <a href="/Hilbish/docs/api/hilbish/hilbish.timers/#timer" style="text-decoration: none;">Timer</a>
### hilbish.timers.get(id) -> <a href="/Hilbish/docs/api/hilbish/hilbish.timers/#timer" style="text-decoration: none;" id="lol">Timer</a>
Retrieves a timer via its ID.
#### Parameters
This function has no parameters.
## Types
## Timer

View File

@ -1,5 +1,5 @@
---
title: Interface hilbish.userDir
title: Module hilbish.userDir
description: user-related directories
layout: doc
menu:

View File

@ -11,16 +11,24 @@ menu:
The terminal library is a simple and lower level library for certain terminal interactions.
## Functions
### restoreState()
### terminal.restoreState()
Restores the last saved state of the terminal
#### Parameters
This function has no parameters.
### saveState()
### terminal.saveState()
Saves the current state of the terminal
#### Parameters
This function has no parameters.
### setRaw()
### terminal.setRaw()
Puts the terminal in raw mode
#### Parameters
This function has no parameters.
### size()
### terminal.size()
Gets the dimensions of the terminal. Returns a table with `width` and `height`
Note: this is not the size in relation to the dimensions of the display
#### Parameters
This function has no parameters.

View File

@ -1,9 +1,28 @@
// the event emitter
// Bait is the event emitter for Hilbish. Why name it bait? Why not.
// It throws hooks that you can catch. This is what you will use if
// you want to listen in on hooks to know when certain things have
// happened, like when you've changed directory, a command has failed,
// etc. To find all available hooks thrown by Hilbish, see doc hooks.
/*
Bait is the event emitter for Hilbish. Much like Node.js and
its `events` system, many actions in Hilbish emit events.
Unlike Node.js, Hilbish events are global. So make sure to
pick a unique name!
Usage of the Bait module consists of userstanding
event-driven architecture, but it's pretty simple:
If you want to act on a certain event, you can `catch` it.
You can act on events via callback functions.
Examples of this are in the Hilbish default config!
Consider this part of it:
```
bait.catch('command.exit', function(code)
running = false
doPrompt(code ~= 0)
doNotifyPrompt()
end)
```
What this does is, whenever the `command.exit` event is thrown,
this function will set the user prompt.
*/
package bait
import (
@ -229,6 +248,8 @@ func handleHook(t *rt.Thread, c *rt.GoCont, name string, catcher *rt.Closure, ar
}
// throw(name, ...args)
// #param name string The name of the hook.
// #param args ...any The arguments to pass to the hook.
// Throws a hook with `name` with the provided `args`
// --- @param name string
// --- @vararg any
@ -251,8 +272,8 @@ func (b *Bait) bthrow(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
// catch(name, cb)
// Catches a hook with `name`. Runs the `cb` when it is thrown
// --- @param name string
// --- @param cb function
// #param name string ummm
// #param cb function ?
func (b *Bait) bcatch(t *rt.Thread, c *rt.GoCont) (rt.Cont, error) {
name, catcher, err := util.HandleStrCallback(t, c)
if err != nil {

View File

@ -29,6 +29,9 @@ enableGitInfo = true
[markup.goldmark.renderer]
unsafe = true
[markup.highlight]
style = 'pastie'
[author]
[author.sammyette]
name = 'sammyette'

View File

@ -0,0 +1,85 @@
/* Background */ .bg { background-color: #ffffff; }
/* PreWrapper */ .chroma { background-color: #ffffff; }
/* Other */ .chroma .x { }
/* Error */ .chroma .err { color: #a61717; background-color: #e3d2d2 }
/* CodeLine */ .chroma .cl { }
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; }
/* LineHighlight */ .chroma .hl { background-color: #ffffcc }
/* LineNumbersTable */ .chroma .lnt { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
/* LineNumbers */ .chroma .ln { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f }
/* Line */ .chroma .line { display: flex; }
/* Keyword */ .chroma .k { color: #008800; font-weight: bold }
/* KeywordConstant */ .chroma .kc { color: #008800; font-weight: bold }
/* KeywordDeclaration */ .chroma .kd { color: #008800; font-weight: bold }
/* KeywordNamespace */ .chroma .kn { color: #008800; font-weight: bold }
/* KeywordPseudo */ .chroma .kp { color: #008800 }
/* KeywordReserved */ .chroma .kr { color: #008800; font-weight: bold }
/* KeywordType */ .chroma .kt { color: #888888; font-weight: bold }
/* Name */ .chroma .n { }
/* NameAttribute */ .chroma .na { color: #336699 }
/* NameBuiltin */ .chroma .nb { color: #003388 }
/* NameBuiltinPseudo */ .chroma .bp { }
/* NameClass */ .chroma .nc { color: #bb0066; font-weight: bold }
/* NameConstant */ .chroma .no { color: #003366; font-weight: bold }
/* NameDecorator */ .chroma .nd { color: #555555 }
/* NameEntity */ .chroma .ni { }
/* NameException */ .chroma .ne { color: #bb0066; font-weight: bold }
/* NameFunction */ .chroma .nf { color: #0066bb; font-weight: bold }
/* NameFunctionMagic */ .chroma .fm { }
/* NameLabel */ .chroma .nl { color: #336699; font-style: italic }
/* NameNamespace */ .chroma .nn { color: #bb0066; font-weight: bold }
/* NameOther */ .chroma .nx { }
/* NameProperty */ .chroma .py { color: #336699; font-weight: bold }
/* NameTag */ .chroma .nt { color: #bb0066; font-weight: bold }
/* NameVariable */ .chroma .nv { color: #336699 }
/* NameVariableClass */ .chroma .vc { color: #336699 }
/* NameVariableGlobal */ .chroma .vg { color: #dd7700 }
/* NameVariableInstance */ .chroma .vi { color: #3333bb }
/* NameVariableMagic */ .chroma .vm { }
/* Literal */ .chroma .l { }
/* LiteralDate */ .chroma .ld { }
/* LiteralString */ .chroma .s { color: #dd2200; background-color: #fff0f0 }
/* LiteralStringAffix */ .chroma .sa { color: #dd2200; background-color: #fff0f0 }
/* LiteralStringBacktick */ .chroma .sb { color: #dd2200; background-color: #fff0f0 }
/* LiteralStringChar */ .chroma .sc { color: #dd2200; background-color: #fff0f0 }
/* LiteralStringDelimiter */ .chroma .dl { color: #dd2200; background-color: #fff0f0 }
/* LiteralStringDoc */ .chroma .sd { color: #dd2200; background-color: #fff0f0 }
/* LiteralStringDouble */ .chroma .s2 { color: #dd2200; background-color: #fff0f0 }
/* LiteralStringEscape */ .chroma .se { color: #0044dd; background-color: #fff0f0 }
/* LiteralStringHeredoc */ .chroma .sh { color: #dd2200; background-color: #fff0f0 }
/* LiteralStringInterpol */ .chroma .si { color: #3333bb; background-color: #fff0f0 }
/* LiteralStringOther */ .chroma .sx { color: #22bb22; background-color: #f0fff0 }
/* LiteralStringRegex */ .chroma .sr { color: #008800; background-color: #fff0ff }
/* LiteralStringSingle */ .chroma .s1 { color: #dd2200; background-color: #fff0f0 }
/* LiteralStringSymbol */ .chroma .ss { color: #aa6600; background-color: #fff0f0 }
/* LiteralNumber */ .chroma .m { color: #0000dd; font-weight: bold }
/* LiteralNumberBin */ .chroma .mb { color: #0000dd; font-weight: bold }
/* LiteralNumberFloat */ .chroma .mf { color: #0000dd; font-weight: bold }
/* LiteralNumberHex */ .chroma .mh { color: #0000dd; font-weight: bold }
/* LiteralNumberInteger */ .chroma .mi { color: #0000dd; font-weight: bold }
/* LiteralNumberIntegerLong */ .chroma .il { color: #0000dd; font-weight: bold }
/* LiteralNumberOct */ .chroma .mo { color: #0000dd; font-weight: bold }
/* Operator */ .chroma .o { }
/* OperatorWord */ .chroma .ow { color: #008800 }
/* Punctuation */ .chroma .p { }
/* Comment */ .chroma .c { color: #888888 }
/* CommentHashbang */ .chroma .ch { color: #888888 }
/* CommentMultiline */ .chroma .cm { color: #888888 }
/* CommentSingle */ .chroma .c1 { color: #888888 }
/* CommentSpecial */ .chroma .cs { color: #cc0000; background-color: #fff0f0; font-weight: bold }
/* CommentPreproc */ .chroma .cp { color: #cc0000; font-weight: bold }
/* CommentPreprocFile */ .chroma .cpf { color: #cc0000; font-weight: bold }
/* Generic */ .chroma .g { }
/* GenericDeleted */ .chroma .gd { color: #000000; background-color: #ffdddd }
/* GenericEmph */ .chroma .ge { font-style: italic }
/* GenericError */ .chroma .gr { color: #aa0000 }
/* GenericHeading */ .chroma .gh { color: #333333 }
/* GenericInserted */ .chroma .gi { color: #000000; background-color: #ddffdd }
/* GenericOutput */ .chroma .go { color: #888888 }
/* GenericPrompt */ .chroma .gp { color: #555555 }
/* GenericStrong */ .chroma .gs { font-weight: bold }
/* GenericSubheading */ .chroma .gu { color: #666666 }
/* GenericTraceback */ .chroma .gt { color: #aa0000 }
/* GenericUnderline */ .chroma .gl { text-decoration: underline }
/* TextWhitespace */ .chroma .w { color: #bbbbbb }

View File

@ -23,7 +23,10 @@
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/js/bootstrap.bundle.min.js" integrity="sha384-pprn3073KE6tl6bjs2QrFaJGz5/SUsLqktiwsUTF55Jfv3qYSDhgCecCxMW52nD2" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css" integrity="sha512-KfkfwYDsLkIlwQp6LFnl8zNdLGxu9YAA1QvwINks4PhcElQSvqcyVLLD9aMhXd13uQjoXtEKNosOWaZqXgel0g==" crossorigin="anonymous" referrerpolicy="no-referrer" />
{{ $syntax := resources.Get "css/syntax.css" | resources.Minify | resources.Fingerprint }}
<link rel="stylesheet" href="{{ $syntax.RelPermalink }}" integrity="{{ $syntax.Data.Integrity }}">
</link>
<style>
.heading > .heading-link {
opacity: 0