diff --git a/README.md b/README.md index 3ec940a..dc634e4 100644 --- a/README.md +++ b/README.md @@ -6,10 +6,10 @@ Wikidot markup parser and renderer. | Package | Description | |---------|-------------| -| [@wdprlib/ast](./packages/ast) | AST type definitions | -| [@wdprlib/parser](./packages/parser) | Wikidot markup parser | -| [@wdprlib/render](./packages/render) | HTML renderer | -| [@wdprlib/runtime](./packages/runtime) | Client-side runtime for interactive elements | +| [@wdprlib/ast](./packages/ast) | AST types for Wikidot markup | +| [@wdprlib/parser](./packages/parser) | Parser for Wikidot markup | +| [@wdprlib/render](./packages/render) | HTML renderer for Wikidot markup | +| [@wdprlib/runtime](./packages/runtime) | Client-side runtime for Wikidot markup | ## Installation diff --git a/packages/ast/README.md b/packages/ast/README.md new file mode 100644 index 0000000..f735379 --- /dev/null +++ b/packages/ast/README.md @@ -0,0 +1,37 @@ +# @wdprlib/ast + +AST type definitions for Wikidot markup. + +## Installation + +```bash +bun add @wdprlib/ast +``` + +## Usage + +```ts +import type { SyntaxTree, Element } from "@wdprlib/ast"; +import { text, paragraph, bold } from "@wdprlib/ast"; + +// Create AST nodes +const tree: SyntaxTree = { + elements: [paragraph([bold([text("Hello")]), text(" world")])], +}; +``` + +## Exports + +Types: `SyntaxTree`, `Element`, `ElementName`, `ContainerType`, `AttributeMap`, `LinkType`, `ListType`, `Module`, etc. + +Helpers: `text`, `paragraph`, `bold`, `italics`, `heading`, `link`, `list`, `lineBreak`, `horizontalRule` + +## Related Packages + +- [@wdprlib/parser](https://www.npmjs.com/package/@wdprlib/parser) - Wikidot markup parser +- [@wdprlib/render](https://www.npmjs.com/package/@wdprlib/render) - HTML renderer +- [@wdprlib/runtime](https://www.npmjs.com/package/@wdprlib/runtime) - Client-side runtime + +## License + +AGPL-3.0 - See [LICENSE](https://github.com/r74tech/wdpr/blob/develop/LICENSE) diff --git a/packages/ast/package.json b/packages/ast/package.json index c3a66cc..88481fb 100644 --- a/packages/ast/package.json +++ b/packages/ast/package.json @@ -1,6 +1,6 @@ { "name": "@wdprlib/ast", - "version": "0.1.5", + "version": "1.0.0-rc.0", "description": "AST types for Wikidot markup", "keywords": [ "ast", diff --git a/packages/parser/README.md b/packages/parser/README.md new file mode 100644 index 0000000..bf0fa48 --- /dev/null +++ b/packages/parser/README.md @@ -0,0 +1,63 @@ +# @wdprlib/parser + +Wikidot markup parser. + +## Installation + +```bash +bun add @wdprlib/parser +``` + +## Usage + +```ts +import { parse, resolveIncludes, extractDataRequirements, resolveModules } from '@wdprlib/parser' +import type { SyntaxTree, PageRef } from '@wdprlib/parser' + +// Basic parsing +const tree: SyntaxTree = parse('**Hello** world') + +// Full pipeline with includes and modules +const source = '[[include component:box]]\n[[module ListPages]]\n%%title%%\n[[/module]]' + +// 1. Resolve includes +const expanded = resolveIncludes(source, (ref: PageRef) => { + return getPageSource(ref.page) // your function to fetch page source +}) + +// 2. Parse +const ast = parse(expanded) + +// 3. Extract data requirements for modules +const { requirements, compiledListPagesTemplates } = extractDataRequirements(ast) + +// 4. Resolve modules with external data +const resolved = await resolveModules(ast, { + fetchListPages: async (query) => { + // Fetch pages matching query from your database + return { pages: [...], totalCount: 100, site: { name: 'mysite' } } + }, + getPageTags: () => ['tag1', 'tag2'], +}, { + parse, + compiledListPagesTemplates, + requirements, +}) +``` + +## Features + +- Wikidot markup parsing (bold, italic, links, images, tables, etc.) +- Include resolution (`[[include page]]`) +- Module support (ListPages, ListUsers, IfTags, etc.) +- Data extraction for server-side rendering + +## Related Packages + +- [@wdprlib/ast](https://www.npmjs.com/package/@wdprlib/ast) - AST type definitions +- [@wdprlib/render](https://www.npmjs.com/package/@wdprlib/render) - HTML renderer +- [@wdprlib/runtime](https://www.npmjs.com/package/@wdprlib/runtime) - Client-side runtime + +## License + +AGPL-3.0 - See [LICENSE](https://github.com/r74tech/wdpr/blob/develop/LICENSE) diff --git a/packages/parser/package.json b/packages/parser/package.json index 2067260..3fb614f 100644 --- a/packages/parser/package.json +++ b/packages/parser/package.json @@ -1,6 +1,6 @@ { "name": "@wdprlib/parser", - "version": "0.1.5", + "version": "1.0.0-rc.0", "description": "Parser for Wikidot markup", "keywords": [ "ast", diff --git a/packages/render/README.md b/packages/render/README.md new file mode 100644 index 0000000..04e5b1d --- /dev/null +++ b/packages/render/README.md @@ -0,0 +1,58 @@ +# @wdprlib/render + +HTML renderer for Wikidot markup. + +## Installation + +```bash +bun add @wdprlib/render +``` + +## Usage + +```ts +import { parse } from "@wdprlib/parser"; +import { renderToHtml } from "@wdprlib/render"; +import type { PageContext, RenderOptions } from "@wdprlib/render"; + +const ast = parse("**Hello** world"); + +// Basic rendering +const html = renderToHtml(ast); + +// With page context and resolvers +const pageContext: PageContext = { + pageName: "main", + site: "mysite", + domain: "mysite.example.com", + pageExists: (name) => checkPageExists(name), +}; + +const html = renderToHtml(ast, { + page: pageContext, + footnotes: ast.footnotes, + resolvers: { + user: (username) => ({ name: username, displayName: "Display Name" }), + htmlBlockUrl: (index) => `/local--html/page/${index}`, + }, +}); +``` + +## Features + +- HTML generation from AST +- Footnote and bibliography rendering +- User link resolution +- Embed block with configurable allowlist +- Math rendering (via Temml) +- XSS protection (via DOMPurify) + +## Related Packages + +- [@wdprlib/ast](https://www.npmjs.com/package/@wdprlib/ast) - AST type definitions +- [@wdprlib/parser](https://www.npmjs.com/package/@wdprlib/parser) - Wikidot markup parser +- [@wdprlib/runtime](https://www.npmjs.com/package/@wdprlib/runtime) - Client-side runtime + +## License + +AGPL-3.0 - See [LICENSE](https://github.com/r74tech/wdpr/blob/develop/LICENSE) diff --git a/packages/render/package.json b/packages/render/package.json index c2fae23..22eeb36 100644 --- a/packages/render/package.json +++ b/packages/render/package.json @@ -1,6 +1,6 @@ { "name": "@wdprlib/render", - "version": "0.1.5", + "version": "1.0.0-rc.0", "description": "HTML renderer for Wikidot markup", "keywords": [ "html", diff --git a/packages/runtime/README.md b/packages/runtime/README.md new file mode 100644 index 0000000..44d4c51 --- /dev/null +++ b/packages/runtime/README.md @@ -0,0 +1,54 @@ +# @wdprlib/runtime + +Client-side runtime for interactive Wikidot elements. + +## Installation + +```bash +bun add @wdprlib/runtime +``` + +## Usage + +```ts +import { initWdprRuntime } from "@wdprlib/runtime"; +import type { WdprRuntime, RuntimeOptions } from "@wdprlib/runtime"; + +// Initialize after DOM is ready +const runtime: WdprRuntime = initWdprRuntime({ + root: document.getElementById("page-content") as HTMLElement, + onRate: async (pageId, points) => { + const res = await fetch("/api/rate", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ page_id: pageId, points }), + }); + return res.json(); + }, +}); + +// Cleanup when navigating away or re-rendering +runtime.destroy(); +``` + +## Features + +- Tabview tab switching +- Collapsible block toggle +- Table of contents navigation +- Footnote / bibliography interactions +- Foldable list toggle +- Math rendering (MathML with SVG polyfill via hfmath) +- Rating module callbacks +- Date formatting (odate) +- Email obfuscation reveal + +## Related Packages + +- [@wdprlib/ast](https://www.npmjs.com/package/@wdprlib/ast) - AST type definitions +- [@wdprlib/parser](https://www.npmjs.com/package/@wdprlib/parser) - Wikidot markup parser +- [@wdprlib/render](https://www.npmjs.com/package/@wdprlib/render) - HTML renderer + +## License + +AGPL-3.0 - See [LICENSE](https://github.com/r74tech/wdpr/blob/develop/LICENSE) diff --git a/packages/runtime/package.json b/packages/runtime/package.json index 70d5a18..3b37329 100644 --- a/packages/runtime/package.json +++ b/packages/runtime/package.json @@ -1,6 +1,6 @@ { "name": "@wdprlib/runtime", - "version": "0.1.5", + "version": "1.0.0-rc.0", "description": "Client-side runtime for Wikidot markup", "keywords": [ "markup",