Add local search and documentation guide for docs site (#1221)

* docs: add local full-text search and a contributor README

Add @easyops-cn/docusaurus-search-local to the Docusaurus site so the
docs get an offline search bar (index built at build time, no external
service). English and zh-CN pages are both indexed, and matched terms
are highlighted on the target page.

Add docs/README.md describing the Docusaurus setup, local dev/build
commands, search behavior, directory layout, and gotchas; exclude it
from the published site alongside CLAUDE.md. Point the root README's
docs/ entry at it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSzcESzU9947zkGzQ6SMmE

* docs: remove dead framework leftovers, fix index generation, complete the nav

Delete the VitePress (.vitepress/) and Jekyll (_layouts/, css/) leftovers,
the one-shot migration scripts (fix_md_header.py, fix_seealso.py), and the
stale keywords.json snapshot; prune the matching .gitignore entries and
docusaurus exclude patterns.

Rewrite gen_index.py for Docusaurus: it emitted dead .html links and
legacy 'layout: doc' frontmatter, choked on non-markdown entries, and
dropped nested categories — regenerating an index would have broken it.
It now emits the extension-less links the site actually uses, links
nested category indexes (restoring apply/* on the zh-CN index), and
refuses to run on the docs root. Fix update_index.sh's copy-paste titles
(zh-CN efun/build were titled 'APPLY'), stop it clobbering the
hand-written lpc/index.md, and cover cli/. Regenerated indexes pick up
the missing driver/ffi-plan entry. add_missing_efuns.py now takes the
keywords.json path as an argument instead of requiring a stale copy.

Move CNAME and the Google site-verification file into static/ so they
actually reach the published build output.

Complete the sidebar: link the CLI category to cli/index and add the
missing portbind/symbol/generate_keywords pages, and expose the
previously orphaned stdlib section under Reference.

Promote onBrokenLinks to 'throw' now the build is warning-free, and drop
the empty Demo section from the landing page.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSzcESzU9947zkGzQ6SMmE

* docs: strip legacy 'layout: doc' frontmatter from all pages

Mechanical sweep removing the Jekyll-era 'layout: doc' line from every
doc page's frontmatter (Docusaurus ignores it), and the matching line
from the templates in docs/CLAUDE.md so new pages don't reintroduce it.
No content changes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSzcESzU9947zkGzQ6SMmE

---------

Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
Yucong Sun 2026-07-09 22:09:55 -04:00 committed by GitHub
parent 319b5ef300
commit c914f03d66
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
1011 changed files with 837 additions and 6848 deletions

View file

@ -159,7 +159,7 @@ The FluffOS documentation site lives in the `docs/` directory and is built with
### Framework & Build
* **Framework**: Docusaurus 3 (`@docusaurus/preset-classic`). Do **not** confuse with VitePress — the site was migrated from VitePress and `.vitepress/` is a dead directory that can be ignored.
* **Framework**: Docusaurus 3 (`@docusaurus/preset-classic`). Do **not** confuse with VitePress or Jekyll — the site was migrated from those frameworks and their leftover directories (`.vitepress/`, `_layouts/`, `css/`) have been removed.
* **Node**: Use NVM. The active version is managed via `~/.nvm`. Always `source "$NVM_DIR/nvm.sh"` before running npm commands.
* **Key config files**:
- `docs/docusaurus.config.ts` — site config, navbar, footer, docs plugin path

View file

@ -303,7 +303,7 @@ cd testsuite
- **`src/compiler/`**: LPC parsing engine (`grammar.y`, `lex.cc`, `generate.cc`).
- **`src/packages/`**: Modular efun features (math, db, crypto, sockets, etc.).
- **`testsuite/`**: Official testsuite containing LPC tests and configurations.
- **`docs/`**: Markdown documentation.
- **`docs/`**: Documentation site (Markdown, built with Docusaurus — see [docs/README.md](docs/README.md)).
---

5
docs/.gitignore vendored
View file

@ -1,8 +1,3 @@
/vendor
/Gemfile.lock
/_site
/node_modules
/.vitepress/cache
/.vitepress/dist
/build
/.docusaurus

View file

@ -1,53 +0,0 @@
import { defineConfig } from 'vitepress'
import SIDEBAR from "./sidebar";
// https://vitepress.dev/reference/site-config
export default defineConfig({
lang: 'en-US',
title: "FluffOS Docs",
description: "Docs for FluffOS Project",
lastUpdated: true,
sitemap: {
hostname: 'https://www.fluffos.info'
},
themeConfig: {
// https://vitepress.dev/reference/default-theme-config
nav: [
{ text: 'Github', link: 'https://github.com/fluffos/fluffos' }
],
sidebar: SIDEBAR,
search: {
provider: 'local',
options: {
miniSearch: {
/**
* @type {Pick<import('minisearch').Options, 'extractField' | 'tokenize' | 'processTerm'>}
*/
options: {
},
/**
* @type {import('minisearch').SearchOptions}
* @default
* { fuzzy: 0.2, prefix: true, boost: { title: 4, text: 2, titles: 1 } }
*/
searchOptions: {
fuzzy: 0.1,
prefix: true,
fields: [ 'relativePath', 'title' ],
boost: {
title: 4,
text: 2,
titles: 1
}
}
}
}
},
socialLinks: [
{ icon: 'github', link: 'https://github.com/fluffos/fluffos' }
],
editLink: {
pattern: 'https://github.com/fluffos/fluffos/edit/master/docs/:path'
},
}
})

View file

@ -1,68 +0,0 @@
const SIDEBAR = [
{
text: 'Introduction',
collapsed: false,
items: [
{text: 'FluffOS', link: '/'},
{text: 'Getting Started', link: '/build.html'},
{text: 'Troubleshooting', link: '/bug.html'}
]
},
{
text: 'CLI',
collapsed: false,
items: [
{text: 'driver', link: '/cli/driver.html'},
{text: 'lpcc', link: '/cli/lpcc.html'},
{text: 'o2json', link: '/cli/o2json.html'},
{text: 'json2o', link: '/cli/json2o.html'}
]
},
{
text: 'LPC',
items: [
{text: 'LPC Language', link: '/lpc/'},
{text: 'Driver', link: '/driver/'},
]
},
{
text: 'Reference',
items: [
{
text: 'Apply',
link: '/apply/',
collapsed: true,
items: [
{text: 'Master', link: '/apply/master/'},
{text: 'Interactive', link: '/apply/interactive/'},
{text: 'Object', link: '/apply/object/'},
]
},
{text: 'EFUN', link: '/efun/'},
{text: 'LPC Library', link: '/stdlib/'}
]
},
{
text: 'Driver Internal',
items: [
{text: 'Concepts', link: '/concepts/'},
{text: 'Notes', link: '/driver/'},
]
},
{
text: '中文文档',
items: [
{text: '编译文档', link: '/zh-CN/build/'},
{text: 'Apply 文档', link: '/zh-CN/apply/'},
{text: 'EFUN 文档', link: '/zh-CN/efun/'},
]
},
{
text: 'Historical',
items: [
{text: 'Build (v2017)', link: '/build_v2017.html'}
]
},
]
export default SIDEBAR;

View file

@ -1,17 +0,0 @@
// https://vitepress.dev/guide/custom-theme
import { h } from 'vue'
import type { Theme } from 'vitepress'
import DefaultTheme from 'vitepress/theme'
import './style.css'
export default {
extends: DefaultTheme,
Layout: () => {
return h(DefaultTheme.Layout, null, {
// https://vitepress.dev/guide/extending-default-theme#layout-slots
})
},
enhanceApp({ app, router, siteData }) {
// ...
}
} satisfies Theme

View file

@ -1,139 +0,0 @@
/**
* Customize default theme styling by overriding CSS variables:
* https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css
*/
/**
* Colors
*
* Each colors have exact same color scale system with 3 levels of solid
* colors with different brightness, and 1 soft color.
*
* - `XXX-1`: The most solid color used mainly for colored text. It must
* satisfy the contrast ratio against when used on top of `XXX-soft`.
*
* - `XXX-2`: The color used mainly for hover state of the button.
*
* - `XXX-3`: The color for solid background, such as bg color of the button.
* It must satisfy the contrast ratio with pure white (#ffffff) text on
* top of it.
*
* - `XXX-soft`: The color used for subtle background such as custom container
* or badges. It must satisfy the contrast ratio when putting `XXX-1` colors
* on top of it.
*
* The soft color must be semi transparent alpha channel. This is crucial
* because it allows adding multiple "soft" colors on top of each other
* to create a accent, such as when having inline code block inside
* custom containers.
*
* - `default`: The color used purely for subtle indication without any
* special meanings attched to it such as bg color for menu hover state.
*
* - `brand`: Used for primary brand colors, such as link text, button with
* brand theme, etc.
*
* - `tip`: Used to indicate useful information. The default theme uses the
* brand color for this by default.
*
* - `warning`: Used to indicate warning to the users. Used in custom
* container, badges, etc.
*
* - `danger`: Used to show error, or dangerous message to the users. Used
* in custom container, badges, etc.
* -------------------------------------------------------------------------- */
:root {
--vp-c-default-1: var(--vp-c-gray-1);
--vp-c-default-2: var(--vp-c-gray-2);
--vp-c-default-3: var(--vp-c-gray-3);
--vp-c-default-soft: var(--vp-c-gray-soft);
--vp-c-brand-1: var(--vp-c-indigo-1);
--vp-c-brand-2: var(--vp-c-indigo-2);
--vp-c-brand-3: var(--vp-c-indigo-3);
--vp-c-brand-soft: var(--vp-c-indigo-soft);
--vp-c-tip-1: var(--vp-c-brand-1);
--vp-c-tip-2: var(--vp-c-brand-2);
--vp-c-tip-3: var(--vp-c-brand-3);
--vp-c-tip-soft: var(--vp-c-brand-soft);
--vp-c-warning-1: var(--vp-c-yellow-1);
--vp-c-warning-2: var(--vp-c-yellow-2);
--vp-c-warning-3: var(--vp-c-yellow-3);
--vp-c-warning-soft: var(--vp-c-yellow-soft);
--vp-c-danger-1: var(--vp-c-red-1);
--vp-c-danger-2: var(--vp-c-red-2);
--vp-c-danger-3: var(--vp-c-red-3);
--vp-c-danger-soft: var(--vp-c-red-soft);
}
/**
* Component: Button
* -------------------------------------------------------------------------- */
:root {
--vp-button-brand-border: transparent;
--vp-button-brand-text: var(--vp-c-white);
--vp-button-brand-bg: var(--vp-c-brand-3);
--vp-button-brand-hover-border: transparent;
--vp-button-brand-hover-text: var(--vp-c-white);
--vp-button-brand-hover-bg: var(--vp-c-brand-2);
--vp-button-brand-active-border: transparent;
--vp-button-brand-active-text: var(--vp-c-white);
--vp-button-brand-active-bg: var(--vp-c-brand-1);
}
/**
* Component: Home
* -------------------------------------------------------------------------- */
:root {
--vp-home-hero-name-color: transparent;
--vp-home-hero-name-background: -webkit-linear-gradient(
120deg,
#bd34fe 30%,
#41d1ff
);
--vp-home-hero-image-background-image: linear-gradient(
-45deg,
#bd34fe 50%,
#47caff 50%
);
--vp-home-hero-image-filter: blur(44px);
}
@media (min-width: 640px) {
:root {
--vp-home-hero-image-filter: blur(56px);
}
}
@media (min-width: 960px) {
:root {
--vp-home-hero-image-filter: blur(68px);
}
}
/**
* Component: Custom Block
* -------------------------------------------------------------------------- */
:root {
--vp-custom-block-tip-border: transparent;
--vp-custom-block-tip-text: var(--vp-c-text-1);
--vp-custom-block-tip-bg: var(--vp-c-brand-soft);
--vp-custom-block-tip-code-bg: var(--vp-c-brand-soft);
}
/**
* Component: Algolia
* -------------------------------------------------------------------------- */
.DocSearch {
--docsearch-primary-color: var(--vp-c-brand-1) !important;
}

View file

@ -40,7 +40,6 @@ Applies are callback functions that the driver calls on LPC objects in response
**Apply Documentation Template:**
```markdown
---
layout: doc
title: category / apply_name
---
# apply_name
@ -116,7 +115,6 @@ Efuns (external functions) are built-in C/C++ functions callable from LPC code.
**Efun Documentation Template:**
```markdown
---
layout: doc
title: category / efun_name
---
# efun_name
@ -183,7 +181,6 @@ Command-line tools included with FluffOS.
**CLI Documentation Template:**
```markdown
---
layout: doc
title: cli / tool_name
---
# cli / tool_name
@ -371,7 +368,6 @@ done
**Front Matter:**
```yaml
---
layout: doc
title: category / name
---
```
@ -512,7 +508,7 @@ npm run dev
# Visit http://localhost:3000
```
> **Note**: The `.vitepress/` directory is a leftover from a previous framework and can be ignored.
> **Note**: Leftovers from previous frameworks (VitePress `.vitepress/`, Jekyll `_layouts/` and `css/`) have been removed — everything is Docusaurus now.
### Sidebar Format

89
docs/README.md Normal file
View file

@ -0,0 +1,89 @@
# FluffOS Documentation
This directory contains the source for the FluffOS documentation site, published at
[https://www.fluffos.info](https://www.fluffos.info).
The site is built with **[Docusaurus 3](https://docusaurus.io/)** (`@docusaurus/preset-classic`).
Markdown files live directly in this directory (the docs plugin is configured with
`path: '.'` and `routeBasePath: '/'`), so `docs/efun/strings/explode.md` becomes
`/efun/strings/explode` on the site.
> This README is for contributors and is excluded from the published site
> (see `exclude` in `docusaurus.config.ts`).
## Local Development
Requires Node.js 18+ (Node 22 recommended).
```bash
cd docs
npm install
npm run dev # dev server on http://localhost:3000
```
Other scripts:
```bash
npm run build # production build → docs/build/
npm run preview # serve the production build locally
npm run clear # clear the Docusaurus cache
```
## Search
Full-text search is provided by
[`@easyops-cn/docusaurus-search-local`](https://github.com/easyops-cn/docusaurus-search-local),
an offline/local search theme — the index is generated at build time and shipped with the
site, so no external search service (e.g. Algolia) is needed.
Notes:
- The search index is only generated by `npm run build`. In the dev server
(`npm run dev`) the search bar shows a hint instead of results; use
`npm run build && npm run preview` to test search locally.
- Both English and Chinese (`zh-CN/`) pages are indexed (`language: ['en', 'zh']`).
- Search options live in the `themes` section of `docusaurus.config.ts`.
## Layout
| Path | Contents |
|------|----------|
| `docusaurus.config.ts` | Site config: navbar, footer, docs plugin, search theme |
| `sidebars.ts` | Sidebar navigation tree (Docusaurus `SidebarsConfig` format) |
| `src/css/custom.css` | Infima CSS variable overrides |
| `static/` | Files copied verbatim to the site root (`CNAME`, Google site verification) |
| `apply/` | Driver-to-LPC callback (apply) reference |
| `efun/` | Built-in function (efun) reference, by category |
| `stdlib/` | LPC standard-library reference |
| `driver/` | Driver internals & configuration |
| `lpc/` | LPC language reference |
| `concepts/` | High-level LPC / MUD concepts |
| `cli/` | Command-line tool docs |
| `zh-CN/` | Chinese documentation |
| `archive/` | Historical MudOS-era documents (not published) |
### Maintenance scripts
| Script | Purpose |
|--------|---------|
| `update_index.sh` | Regenerates all generated `index.md` listing pages (calls `gen_index.py`) |
| `gen_index.py` | Writes an `index.md` for one doc tree (e.g. `./gen_index.py efun EFUN`) |
| `gen_config_docs.py` | Regenerates `driver/config.md` from `src/base/internal/rc.cc` |
| `add_missing_efuns.py` | Creates stub pages under `efun/general/` for undocumented efuns (needs a `keywords.json` from the `generate_keywords` tool) |
## Conventions & Gotchas
- **`driver/config.md` is auto-generated** from `src/base/internal/rc.cc` — never edit it
by hand. Regenerate with `python3 docs/gen_config_docs.py`; CI fails if it is stale.
- `.md` files are treated as standard CommonMark (`markdown.format: 'detect'`), but bare
`{...}` in prose is still parsed as a JSX expression and breaks the build — escape it as
`\{...\}` outside fenced code blocks.
- Sidebar entries in `sidebars.ts` use doc IDs (relative path without extension), not URLs.
- Generated `index.md` listing pages (efun/apply/stdlib/cli/concepts/driver/zh-CN) are
rewritten by `./update_index.sh` — regenerate rather than hand-edit them.
`lpc/index.md` is hand-written and deliberately not regenerated.
- `onBrokenLinks` is set to `'throw'`: a broken internal link fails the build (and the
Pages deploy) instead of shipping a 404.
See [`CLAUDE.md`](CLAUDE.md) for detailed documentation templates (applies, efuns, CLI
tools) and the full contribution workflow.

View file

@ -1,137 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<title>FluffOS - {{ page.title }}</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
<link rel="stylesheet" href={{ "/css/default.css" | relative_url }}>
<link rel="stylesheet" href={{ "/css/rouge.css" | relative_url }}>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-2912700-7"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'UA-2912700-7');
</script>
{% seo %}
</head>
<body>
<div class="container col-12 col-md-10 col-lg-8">
<header class="blog-header py-3">
<div class="row flex-nowrap justify-content-between align-items-center">
<div class="col-12 text-center">
<a class="blog-header-logo text-dark"> {{ page.title }}</a>
</div>
</div>
</header>
<nav class="navbar navbar-expand-md navbar-light bg-light">
<div class="navbar-header">
<a class="navbar-brand" href="/">FluffOS</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent"
aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
</div>
<div class="collapse navbar-collapse justify-content-center" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
<li>
<a class="nav-link" href="/build.html">BUILD</a>
</li>
<li>
<div class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown1" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
References
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown1">
<a class="dropdown-item" href="/efun">EFUN</a>
<a class="dropdown-item" href="/apply">APPLY</a>
<a class="dropdown-item" href="/stdlib">STDLIB</a>
</div>
</div>
</li>
<a class="nav-link text-nowrap" href="/bug.html">Bug</a>
</li>
<li>
<div class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown2" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Other
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown2">
<a class="dropdown-item" href="/build_v2017.html">Build (v2017)</a>
<a class="dropdown-item" href="/lpc">LPC Language</a>
<a class="dropdown-item" href="/concepts">Concept</a>
<a class="dropdown-item" href="/driver">Hack Notes</a>
</div>
</div>
</li>
<li>
<a class="nav-link text-nowrap" href="/zh-CN">中文文档</a>
</li>
</ul>
<div>
<div class="gcse-search"></div>
</div>
</div>
</nav>
<div id="content" class="text-justify px-2 py-2">
{{ content }}
</div>
<div class="container">
<div id='discourse-comments'></div>
<script type="text/javascript">
if (location.pathname.match(/\/(lpc|concepts|driver|apply|efun)\/.+/)) {
DiscourseEmbed = {
discourseUrl: 'https://forum.fluffos.info/',
discourseEmbedUrl: location.href
};
(function () {
const d = document.createElement('script');
d.type = 'text/javascript';
d.async = true;
d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
})();
}
</script>
</div>
<footer class="pt-md-4 my-2 border-top">
<div class="card">
<div class="card-header">
<img src="https://cdnjs.cloudflare.com/ajax/libs/octicons/8.5.0/svg/star.svg" /> Improve this page
</div>
<div class="card-body">
<p class="card-text">Every page on this site is maintained by user like you!</p>
<a href="{% github_edit_link %}" class="my-2"><img src="https://cdnjs.cloudflare.com/ajax/libs/octicons/8.5.0/svg/pencil.svg" /> Edit On Github</a>
</div>
</div>
</footer>
</div>
<!-- GCSE -->
<script>
(function () {
var cx = '015880077353261870029:ujn3ynk194o';
var gcse = document.createElement('script');
gcse.type = 'text/javascript';
gcse.async = true;
gcse.src = 'https://cse.google.com/cse.js?cx=' + cx;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(gcse, s);
})();
</script>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ho+j7jyWK8fNQe+A12Hb8AhRq26LrZ/JpcUGGOn+Y7RsweNrtN/tE3MoK7ZeZDyx" crossorigin="anonymous"></script>
</body>
</html>

View file

@ -1,11 +1,15 @@
#!/usr/bin/env python3
"""Generate stub docs under efun/general/ for efuns that have no doc page.
# find all existing efuns through keywords.json, then generate doc under efun/general/
Usage: add_missing_efuns.py path/to/keywords.json
keywords.json is produced by the generate_keywords tool from a compiled
driver (run it in your build directory). Run this script from docs/.
"""
import os
import json
EFUNS_DOCS = set()
import os
import sys
def generate_signature(efun):
@ -17,7 +21,6 @@ def generate_signature(efun):
def generate_doc(efun):
return f"""---
layout: doc
title: general / {efun["name"]}
---
# {efun["name"]}
@ -38,27 +41,26 @@ title: general / {efun["name"]}
def main():
if len(sys.argv) != 2 or not os.path.isfile(sys.argv[1]):
sys.exit(__doc__.strip().splitlines()[2]) # the Usage line
documented = set()
for root, dirs, files in os.walk("./efun"):
for file in files:
if file.endswith(".md"):
if file == "index.md":
continue
EFUNS_DOCS.add(file[:-3])
print("EFUNS with docs: " + str(len(EFUNS_DOCS)))
if file.endswith(".md") and file != "index.md":
documented.add(file[:-3])
print(f"EFUNS with docs: {len(documented)}")
keywords = json.load(open("./keywords.json"))
keywords = json.load(open(sys.argv[1]))
all_efuns = {keyword["name"]: keyword for keyword in keywords}
print("ALL EFUNS: " + str(len(all_efuns)))
print(f"ALL EFUNS: {len(all_efuns)}")
for efun in all_efuns:
if efun.startswith("_"):
for name, efun in all_efuns.items():
if name.startswith("_") or name in documented:
continue
if efun in EFUNS_DOCS:
continue
print(f"Generating doc for {efun}")
content = generate_doc(all_efuns[efun])
with open(f"./efun/general/{efun}.md", "w") as f:
f.write(content)
print(f"Generating doc for {name}")
with open(f"./efun/general/{name}.md", "w") as f:
f.write(generate_doc(efun))
if __name__ == "__main__":

View file

@ -1,5 +1,4 @@
---
layout: doc
title: APPLY
---
## interactive

View file

@ -1,5 +1,4 @@
---
layout: doc
title: interactive / catch_tell
---
# catch_tell

View file

@ -1,5 +1,4 @@
---
layout: doc
title: interactive / gmcp
---
# gmcp

View file

@ -1,5 +1,4 @@
---
layout: doc
title: interactive / gmcp_enable
---
# gmcp_enable

View file

@ -1,5 +1,4 @@
---
layout: doc
title: interactive
---
* [catch_tell](catch_tell)

View file

@ -1,5 +1,4 @@
---
layout: doc
title: interactive / logon
---
# logon

View file

@ -1,5 +1,4 @@
---
layout: doc
title: interactive / msdp
---
# gmcp

View file

@ -1,5 +1,4 @@
---
layout: doc
title: interactive / msdp_enable
---
# msdp_enable

View file

@ -1,5 +1,4 @@
---
layout: doc
title: interactive / msp_enable
---
# msp_enable

View file

@ -1,5 +1,4 @@
---
layout: doc
title: interactive / mxp_enable
---
# mxp_enable

View file

@ -1,5 +1,4 @@
---
layout: doc
title: interactive / mxp_tag
---
# mxp_tag

View file

@ -1,5 +1,4 @@
---
layout: doc
title: interactive / net_dead
---
# net_dead

View file

@ -1,5 +1,4 @@
---
layout: doc
title: interactive / process_input
---
# process_input

View file

@ -1,5 +1,4 @@
---
layout: doc
title: interactive / receive_ed
---
# receive_ed

View file

@ -1,5 +1,4 @@
---
layout: doc
title: apply / interactive / receive_environ
---
# receive_environ

View file

@ -1,5 +1,4 @@
---
layout: doc
title: apply / interactive / receive_message
---
# receive_message

View file

@ -1,5 +1,4 @@
---
layout: doc
title: interactive / receive_snoop
---
# receive_snoop

View file

@ -1,5 +1,4 @@
---
layout: doc
title: interactive / telnet_suboption
---
# telnet_suboption

View file

@ -1,5 +1,4 @@
---
layout: doc
title: interactive / terminal_colour_replace
---
# terminal_colour_replace

View file

@ -1,5 +1,4 @@
---
layout: doc
title: interactive / terminal_type
---
# terminal_type

View file

@ -1,5 +1,4 @@
---
layout: doc
title: interactive / window_size
---
# window_size

View file

@ -1,5 +1,4 @@
---
layout: doc
title: interactive / write_prompt
---
# write_prompt

View file

@ -1,5 +1,4 @@
---
layout: doc
title: interactive / zmp
---
# zmp_command

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / author_file
---
# author_file

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / compile_object
---
# compile_object

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / connect
---
# connect

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / crash
---
# crash

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / creator_file
---
# creator_file

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / domain_file
---
# domain_file

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / epilog
---
# epilog

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / error_handler
---
# error_handler

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / flag
---
# flag

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / get_bb_uid
---
# get_bb_uid

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / get_include_path
---
# get_include_path

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / get_mud_stats
---
# get_mud_stats

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / get_root_uid
---
# get_root_uid

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / get_save_file_name
---
# get_save_file_name

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master
---
* [author_file](author_file)

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / log_error
---
# log_error

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / make_path_absolute
---
# make_path_absolute

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / object_name
---
# object_name

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / parser_error_message
---
# parser_error_message

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / preload
---
# preload

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / privs_file
---
# privs_file

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / retrieve_ed_setup
---
# retrieve_ed_setup

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / save_ed_setup
---
# save_ed_setup

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / valid_bind
---
# valid_bind

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / valid_database
---
# valid_database

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / valid_hide
---
# valid_hide

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / valid_link
---
# valid_link

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / valid_object
---
# valid_object

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / valid_override
---
# valid_override

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / valid_read
---
# valid_read

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / valid_save_binary
---
# valid_save_binary

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / valid_seteuid
---
# valid_seteuid

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / valid_shadow
---
# valid_shadow

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / valid_socket
---
# valid_socket

View file

@ -1,5 +1,4 @@
---
layout: doc
title: master / valid_write
---
# valid_write

View file

@ -1,5 +1,4 @@
---
layout: doc
title: object / __INIT
---
# __INIT

View file

@ -1,5 +1,4 @@
---
layout: doc
title: object / clean_up
---
# clean_up

View file

@ -1,5 +1,4 @@
---
layout: doc
title: object / create
---
# create

View file

@ -1,5 +1,4 @@
---
layout: doc
title: object / heart_beat
---
# heart_beat

View file

@ -1,5 +1,4 @@
---
layout: doc
title: object / id
---
# id

View file

@ -1,5 +1,4 @@
---
layout: doc
title: object
---
* [__INIT](__INIT)

View file

@ -1,5 +1,4 @@
---
layout: doc
title: object / init
---
# init

View file

@ -1,5 +1,4 @@
---
layout: doc
title: object / is_living
---
# is_living

View file

@ -1,5 +1,4 @@
---
layout: doc
title: object / move_or_destruct
---
# move_or_destruct

View file

@ -1,5 +1,4 @@
---
layout: doc
title: object / on_destruct
---
# on_destruct

View file

@ -1,5 +1,4 @@
---
layout: doc
title: object / reset
---
# reset

View file

@ -1,5 +1,4 @@
---
layout: doc
title: object / virtual_start
---
# virtual_start

View file

@ -1,5 +1,4 @@
---
layout: doc
title: Troubleshooting
---
# Troubleshooting

View file

@ -1,5 +1,4 @@
---
layout: doc
title: Build
---

View file

@ -1,5 +1,4 @@
---
layout: doc
title: Build (v2017)
---
# build_v2017

View file

@ -1,5 +1,4 @@
---
layout: doc
title: cli / driver
---
# cli / driver

View file

@ -1,5 +1,4 @@
---
layout: doc
title: cli / generate_keywords
---
# cli / generate_keywords

View file

@ -1,5 +1,4 @@
---
layout: doc
title: cli
---
* [driver](driver)

View file

@ -1,5 +1,4 @@
---
layout: doc
title: cli / json2o
---

View file

@ -1,5 +1,4 @@
---
layout: doc
title: cli / lpcc
---

View file

@ -1,5 +1,4 @@
---
layout: doc
title: cli / o2json
---

View file

@ -1,5 +1,4 @@
---
layout: doc
title: cli / portbind
---
# cli / portbind

View file

@ -1,5 +1,4 @@
---
layout: doc
title: cli / symbol
---
# cli / symbol

View file

@ -1,5 +1,4 @@
---
layout: doc
title: general / FluffOS driver
---
# The FluffOS driver

View file

@ -1,5 +1,4 @@
---
layout: doc
title: general / global_include_file
---
# global_include_file

View file

@ -1,5 +1,4 @@
---
layout: doc
title: general
---
* [fluffos_driver](fluffos_driver)

View file

@ -1,5 +1,4 @@
---
layout: doc
title: general / lpc
---
# lpc

View file

@ -1,5 +1,4 @@
---
layout: doc
title: general / message_doc
---
# message_doc

View file

@ -1,5 +1,4 @@
---
layout: doc
title: general / objects
---
# objects

View file

@ -1,5 +1,4 @@
---
layout: doc
title: general / oop
---
# oop

View file

@ -1,5 +1,4 @@
---
layout: doc
title: general / preprocessor
---
# preprocessor

Some files were not shown because too many files have changed in this diff Show more