Compare commits

..

4 commits

Author SHA1 Message Date
Yaotian-Liu
5ace9075db
new release 1.6.5 2026-05-05 18:00:30 -07:00
Yaotian-Liu
6adbd70bef
new release 1.6.4 2026-01-15 15:49:00 -07:00
Yaotian-Liu
935403182e
new release 1.6.3 2026-01-01 16:25:20 -05:00
Yaotian-Liu
91df3ded05
chore: Add CLAUDE.md and update the pseudocode.js 2026-01-01 16:24:15 -05:00
5 changed files with 108 additions and 11 deletions

94
CLAUDE.md Normal file
View file

@ -0,0 +1,94 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
Obsidian-Pseudocode is an Obsidian plugin that renders LaTeX-style pseudocode inside code blocks. It uses pseudocode.js to convert LaTeX algorithmic constructs to HTML, with support for math formulas via KaTeX.
## Build and Development Commands
```bash
# Development mode with file watching
npm run dev
# Production build (includes TypeScript type checking)
npm run build
# Version bump
npm run version
```
## Architecture
### Plugin Entry Point
- `main.ts`: Core plugin class (`PseudocodePlugin`)
- Registers markdown code block processor for `pseudo` language
- Manages settings and preamble loading
- Handles theme observer lifecycle
### Core Processing Flow
1. User creates a code block with `pseudo` language specifier
2. `pseudocodeHandler()` in main.ts processes the block:
- Extracts inline macros (before `\begin{algorithm}`)
- Combines with global preamble if enabled
- Injects preamble into all math expressions (`$...$`)
- Renders using pseudocode.js library
- Adds export button and applies theme
### Key Modules
**src/inline_macro.ts**
- Separates inline macro definitions from algorithm content
- Macros before `\begin{algorithm}` are treated as preamble
**src/latex_translator.ts**
- Converts unsupported LaTeX macros to KaTeX-compatible commands
- Handles `\DeclarePairedDelimiter`, `\DeclareMathOperator*`, `\DeclareMathOperator`
- Validates macros using KaTeX parser and converts `\newcommand` to `\renewcommand` when redefining
**src/export_button.ts**
- Creates "Export to clipboard" button for each pseudocode block
- Generates compilable LaTeX document with required packages (algorithm, algpseudocodex, amsmath)
- Includes both global and inline macros
**src/theme.ts**
- MutationObserver watches document.body for theme changes
- Applies Obsidian theme colors (--background-primary, --text-normal) to pseudocode blocks
- Updates .ps-root, .ps-algorithm, and border colors dynamically
**src/setting_tab.ts**
- UI for plugin settings (block size, preamble path, line numbers, theme following, etc.)
**src/auto_complete.ts**
- EditorSuggestor for autocomplete within `pseudo` code blocks
### Build System
- Uses esbuild (config in `esbuild.config.mjs`)
- Bundles to CommonJS format targeting ES2018
- Main entry: `main.ts``main.js`
- External: Obsidian API, CodeMirror 6, Electron
## Important Implementation Details
### Preamble System
- Global preamble: loaded from file (default `preamble.sty`)
- Inline preamble: defined per-block before `\begin{algorithm}`
- Preamble is injected into every math expression in the pseudocode
- Must reload plugin after changing global preamble file
### Theme Integration
- When `followSystemTheme` is enabled, plugin observes Obsidian theme changes
- CSS custom properties are read from document.body and applied to rendered pseudocode
- Observer must be detached on plugin unload to prevent memory leaks
### Error Handling
- Pseudocode rendering errors display in-block with ✖ symbol
- Preamble loading failures show Notice to user
- Invalid LaTeX in preamble is caught and logged to console
## Dependencies
- `pseudocode`: Uses forked version from ytliu74/pseudocode.js#master
- `katex`: Fixed at 0.11.1 for macro rendering
- `obsidian`: Latest API
- TypeScript 4.7.4 with strict null checks enabled

View file

@ -1,7 +1,7 @@
{
"id": "pseudocode-in-obs",
"name": "Pseudocode",
"version": "1.6.2",
"version": "1.6.5",
"minAppVersion": "0.15.0",
"description": "This is an obsidian plugin that helps to render a LaTeX-style pseudocode inside a code block.",
"author": "Yaotian Liu",

8
package-lock.json generated
View file

@ -1,16 +1,16 @@
{
"name": "pseudocode-in-obs",
"version": "1.5.4",
"version": "1.6.4",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "pseudocode-in-obs",
"version": "1.5.4",
"version": "1.6.4",
"license": "MIT",
"dependencies": {
"katex": "0.11.1",
"pseudocode": "ytliu74/pseudocode.js#master"
"pseudocode": "github:ytliu74/pseudocode.js#master"
},
"devDependencies": {
"@types/katex": "0.11.1",
@ -1888,7 +1888,7 @@
},
"node_modules/pseudocode": {
"version": "2.3.0",
"resolved": "git+ssh://git@github.com/ytliu74/pseudocode.js.git#4ac293a977b191d66b3cba640804814651c95aaf",
"resolved": "git+ssh://git@github.com/ytliu74/pseudocode.js.git#db17188d06528b12b3279f4f1025c1a978519d1e",
"license": "MIT"
},
"node_modules/punycode": {

View file

@ -1,6 +1,6 @@
{
"name": "pseudocode-in-obs",
"version": "1.6.2",
"version": "1.6.5",
"description": "This is an obsidian plugin that helps to render a LaTeX-style pseudocode inside a code block.",
"main": "main.js",
"scripts": {
@ -12,6 +12,7 @@
"author": "",
"license": "MIT",
"devDependencies": {
"@types/katex": "0.11.1",
"@types/node": "^16.11.6",
"@typescript-eslint/eslint-plugin": "5.29.0",
"@typescript-eslint/parser": "5.29.0",
@ -19,11 +20,10 @@
"esbuild": "0.17.3",
"obsidian": "latest",
"tslib": "2.4.0",
"typescript": "4.7.4",
"@types/katex": "0.11.1"
"typescript": "4.7.4"
},
"dependencies": {
"pseudocode": "ytliu74/pseudocode.js#master",
"katex": "0.11.1"
"katex": "0.11.1",
"pseudocode": "github:ytliu74/pseudocode.js#master"
}
}

View file

@ -34,5 +34,8 @@
"1.5.8": "0.15.0",
"1.6.0": "0.15.0",
"1.6.1": "0.15.0",
"1.6.2": "0.15.0"
"1.6.2": "0.15.0",
"1.6.3": "0.15.0",
"1.6.4": "0.15.0",
"1.6.5": "0.15.0"
}