{"id":40006537,"url":"https://github.com/jyjeanne/ditacraft","last_synced_at":"2026-03-17T23:23:05.970Z","repository":{"id":321133390,"uuid":"1082035919","full_name":"jyjeanne/ditacraft","owner":"jyjeanne","description":"DitaCraft is a comprehensive Visual Studio Code extension for editing and publishing DITA (Darwin Information Typing Architecture) content","archived":false,"fork":false,"pushed_at":"2026-02-08T01:23:23.000Z","size":3803,"stargazers_count":7,"open_issues_count":0,"forks_count":5,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-02-08T09:52:42.676Z","etag":null,"topics":["dita","dita-ot","visual-studio-code","xml"],"latest_commit_sha":null,"homepage":"https://marketplace.visualstudio.com/items?itemName=JeremyJeanne.ditacraft","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jyjeanne.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-23T16:33:03.000Z","updated_at":"2026-02-08T01:15:25.000Z","dependencies_parsed_at":"2025-10-28T01:34:37.945Z","dependency_job_id":null,"html_url":"https://github.com/jyjeanne/ditacraft","commit_stats":null,"previous_names":["jyjeanne/ditacraft"],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/jyjeanne/ditacraft","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jyjeanne%2Fditacraft","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jyjeanne%2Fditacraft/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jyjeanne%2Fditacraft/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jyjeanne%2Fditacraft/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jyjeanne","download_url":"https://codeload.github.com/jyjeanne/ditacraft/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jyjeanne%2Fditacraft/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29704400,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T23:35:04.139Z","status":"online","status_checked_at":"2026-02-22T02:00:08.193Z","response_time":110,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dita","dita-ot","visual-studio-code","xml"],"created_at":"2026-01-19T02:06:33.022Z","updated_at":"2026-03-11T02:04:19.527Z","avatar_url":"https://github.com/jyjeanne.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DitaCraft\n\n**The easiest way to edit and publish your DITA files**\n\n[![VS Code](https://img.shields.io/badge/VS%20Code-1.80+-blue.svg)](https://code.visualstudio.com/)\n[![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)\n[![CI](https://github.com/jyjeanne/ditacraft/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/jyjeanne/ditacraft/actions/workflows/ci.yml)\n\nDitaCraft is a comprehensive Visual Studio Code extension for editing and publishing DITA (Darwin Information Typing Architecture) content. It provides syntax highlighting, validation, and seamless integration with DITA-OT for multi-format publishing.\n\n## Highlights\n\n🔗 **Smart Navigation** - Ctrl+Click on `href`, `conref`, `keyref`, and `conkeyref` attributes with full key space resolution\n🔑 **Key Space Resolution** - Automatic or explicit root map selection with key scope support\n✅ **Multi-Layer Validation** - DTD (TypesXML) + optional RelaxNG (salve-annos) + 35 DITA rules with DITA 1.2/1.3/2.0 support\n🌍 **Localized Diagnostics** - All 76+ diagnostic messages translatable (English + French included)\n⚡ **Real-time Validation** - Smart debouncing (300ms topics, 1000ms maps) with per-document cancellation\n🔒 **Enterprise Security** - Path traversal protection, XXE neutralization, and command injection prevention\n🚀 **One-Click Publishing** - Direct DITA-OT integration for HTML5, PDF, EPUB, and more\n👁️ **Live Preview** - Side-by-side HTML5 preview with auto-refresh and bidirectional scroll sync\n🗺️ **Map Visualizer** - Interactive tree view of DITA map hierarchies with navigation\n📂 **Activity Bar Views** - DITA Explorer, Key Space, and Diagnostics views in dedicated sidebar\n📝 **21 Smart Snippets** - Comprehensive DITA code snippets for rapid editing\n🛡️ **Rate Limiting** - Built-in DoS protection for validation operations\n🧪 **1087+ Tests** - Extensively tested with comprehensive integration, security, and LSP server tests\n📚 **DITA User Guide** - Comprehensive documentation written in DITA (55 files, bookmap structure)\n\n## Features\n\n### 🖥️ **Language Server Protocol (LSP)**\n- Full-featured DITA Language Server running in a separate process for performance\n- **IntelliSense**: Context-aware element, attribute, and value completions with subject scheme hierarchy grouping\n- **Hover**: Element documentation tooltips from DITA schema with conref content preview\n- **Document Symbols**: Hierarchical outline view (Ctrl+Shift+O)\n- **Workspace Symbols**: Cross-file symbol search (Ctrl+T)\n- **Go to Definition**: Navigate to href/conref/keyref targets with key space resolution\n- **Find References**: Locate all usages of an element ID across files\n- **Rename**: Rename IDs with automatic reference updates across workspace\n- **Formatting**: XML document formatting with inline/block/preformatted handling\n- **Code Actions**: Quick fixes for missing DOCTYPE, missing ID, missing title, empty elements, duplicate IDs, missing otherrole, deprecated indextermref, alt attribute conversion, missing alt text\n- **Linked Editing**: Simultaneous open/close XML tag name editing\n- **Folding Ranges**: Collapse XML elements, comments, and CDATA blocks\n- **Document Links**: Clickable href/conref/keyref links with key resolution\n- **Diagnostics**: XML well-formedness, DITA structure, ID, cross-reference, scope consistency, circular reference detection, DITA rules (35 Schematron-equivalent rules including DITA 2.0), profiling/subject scheme, DTD (OASIS catalog with DITA 1.2/1.3/2.0), optional RelaxNG, workspace-level analysis, and DITAVAL validation\n- **Localization**: All diagnostic messages translatable via i18n system (English + French)\n\n### 📝 **DITA Editing**\n- Syntax highlighting for `.dita`, `.ditamap`, `.bookmap`, and `.ditaval` files\n- Intelligent code snippets and auto-completion (21 comprehensive snippets)\n- Support for all DITA topic types (concept, task, reference, topic, glossentry, troubleshooting)\n\n### 🔗 **Smart Navigation**\n- **Ctrl+Click navigation** in DITA maps, bookmaps, and topics\n  - Click on `href` attributes in `\u003ctopicref\u003e` elements to open referenced files\n  - Click on `conref` attributes to navigate to content references\n  - Click on `keyref` and `conkeyref` to navigate to key-defined targets\n  - Works with relative paths and handles fragment identifiers (e.g., `file.dita#topic_id`)\n  - Visual link indicators (underlined references when you hover)\n  - Hover tooltip showing target filename and reference type\n  - Automatically resolves paths relative to the map file location\n  - Skips external URLs (http://, https://) - they won't be underlined\n- **Full Key Space Resolution** (NEW in v0.2.0)\n  - Automatically discovers root maps in your workspace\n  - Builds and caches key space from map hierarchies\n  - Resolves `@keyref`, `@conkeyref`, and key-based references\n  - Handles submaps, nested maps, and complex key definitions\n  - 1-minute cache TTL with intelligent invalidation\n- Navigate seamlessly between maps and topics in your documentation structure\n- **How to use:**\n  1. Open a `.ditamap`, `.bookmap`, or `.dita` file\n  2. Hover over any `href`, `conref`, `keyref`, or `conkeyref` value - it will be underlined\n  3. Ctrl+Click (Windows/Linux) or Cmd+Click (Mac) to open the target file\n  4. Works with nested topicrefs, key definitions, and complex map structures\n\n### ✅ **Advanced Validation**\n- **Real-time validation** on file open, save, and change with smart debouncing (300ms topics, 1000ms maps)\n- **Full DTD validation** against DITA 1.2, 1.3, and 2.0 specifications using TypesXML\n  - Bundled DTDs for all three DITA versions (topic, concept, task, reference, map, bookmap, learning, etc.)\n  - Master OASIS XML Catalog with `\u003cnextCatalog\u003e` chaining — auto-resolves PUBLIC IDs for any DITA version\n  - Custom XML catalog support (`ditacraft.xmlCatalogPath`) for DTD specializations\n  - Parser pool (3 concurrent instances) for efficient reuse\n  - 100% W3C XML Conformance Test Suite compliance\n- **Optional RelaxNG validation** using salve-annos + saxes\n  - Schema compilation with caching (max 20 grammars, JSON cache files)\n  - Root element to RNG schema auto-mapping (10 DITA element types)\n  - Configurable schema directory path\n- **35 DITA rules** (Schematron-equivalent) with DITA version awareness\n  - 4 mandatory rules, 7 recommendation rules, 2 authoring rules, 8 accessibility rules\n  - 10 DITA 2.0 removal/migration rules (deprecated elements and attributes)\n  - Version-gated: rules apply only to relevant DITA versions\n  - Precise attribute-level diagnostic highlighting\n- **Three validation engines**:\n  - **TypesXML** (default, recommended) - Pure TypeScript DTD validation with no native dependencies\n  - Built-in parser with content model checking (lightweight, no full DTD)\n  - xmllint integration for external validation (requires libxml2 installation)\n- **DITA version detection**: Auto-detects from `@DITAArchVersion` attribute or DOCTYPE declaration\n- **Scope validation**: Validates `scope=\"local|peer|external\"` consistency with href format (DITA-SCOPE-001/002/003)\n- **Circular reference detection**: Detects href/conref/mapref cycles using DFS traversal (DITA-CYCLE-001)\n- **Workspace-level analysis**:\n  - `DITA: Validate Workspace` command with progress reporting\n  - Cross-file duplicate root ID detection (DITA-ID-003)\n  - Unused topic detection — finds topics not referenced by any map (DITA-ORPHAN-001)\n- **Enterprise Security Features**:\n  - XXE (XML External Entity) neutralization to prevent injection attacks\n  - Path traversal protection with workspace bounds validation\n  - Command injection prevention using safe execution methods\n  - Async file operations to prevent UI blocking\n- **Intelligent error highlighting**:\n  - Inline error highlighting with squiggly underlines\n  - Errors appear in Problems panel with severity indicators\n  - Accurate line and column positioning\n  - Source attribution (DTD validator, XML parser, DITA validator, dita-rules)\n- **Auto-detection of DITA files**:\n  - By extension: `.dita`, `.ditamap`, `.bookmap`, `.ditaval`\n  - By DOCTYPE: Recognizes DITA DOCTYPE declarations in `.xml` files\n- **Manual validation command**: `DITA: Validate Current File` (Ctrl+Shift+V / Cmd+Shift+V)\n\n### 🚀 **One-Click Publishing**\n- Publish to multiple formats: HTML5, PDF, EPUB, and more\n- Direct integration with DITA Open Toolkit (DITA-OT)\n- Real-time progress tracking with visual indicators\n- Smart caching for faster preview generation\n\n### 👁️ **Live Preview**\n- Side-by-side HTML5 preview with WebView panel\n- Auto-refresh on save with configurable behavior\n- **Bidirectional scroll sync** - Editor and preview scroll positions stay synchronized\n- **Theme support** - Light, dark, and auto modes (follows VS Code theme)\n- **Custom CSS** - Apply custom stylesheets to preview\n- **Print preview mode** - Print-optimized view with dedicated print button\n- Navigate directly from source to preview\n\n### 📊 **Build Output**\n- **Syntax-highlighted output** - DITA-OT build output with automatic colorization\n- **Log level detection** - Errors, warnings, info, and debug messages color-coded\n- **Error diagnostics** - Build errors parsed and shown in Problems panel\n- **Timestamped builds** - Build start and completion times displayed\n\n### 📂 **Activity Bar Views**\n- **DitaCraft sidebar** in the Activity Bar with three dedicated tree views\n- **DITA Explorer** — All workspace maps with expandable hierarchy, type icons, click-to-open navigation\n- **Key Space View** — Defined, undefined, and unused keys with usage locations and key scope support\n- **Diagnostics View** — Aggregated DITA issues, group by file or severity, click-to-navigate\n- **Root Map Selector** — Status bar indicator with click-to-set, auto-discover or explicit mode\n- **File decorations** — Error/warning badges on tree items from validation diagnostics\n- **Welcome content** — Helpful actions shown when views are empty\n- Auto-refresh on file and diagnostics changes with debouncing\n\n### 🗺️ **Map Visualizer**\n- **Interactive tree view** - Visual hierarchy of DITA maps, bookmaps, and topics\n- **Element type icons** - Different icons for maps, chapters, appendices, parts, topics, keys, and glossrefs\n- **Missing file detection** - Missing referenced files shown with strikethrough styling\n- **Circular reference protection** - Detects and marks circular map references\n- **Double-click navigation** - Open any topic or map directly from the visualizer\n- **Expand/Collapse controls** - Easily navigate large map hierarchies\n- **Real-time refresh** - Update the visualization when map content changes\n\n### 🎯 **Quick File Creation**\n- Create DITA topics from templates (concept, task, reference)\n- Generate DITA maps and bookmaps with proper structure\n- Pre-filled DOCTYPE declarations and valid XML structure\n\n### ⚙️ **Flexible Configuration**\n- Configure DITA-OT installation path\n- Customize output formats and directories\n- Add custom DITA-OT arguments and filters\n- Choose validation engine (xmllint or built-in)\n\n## Installation\n\n### From VS Code Marketplace\n1. Open VS Code\n2. Press `Ctrl+P` / `Cmd+P`\n3. Type `ext install ditacraft`\n4. Press Enter\n\n### From VSIX\n1. Download the latest `.vsix` file from [Releases](https://github.com/jyjeanne/ditacraft/releases)\n2. Open VS Code\n3. Go to Extensions (`Ctrl+Shift+X` / `Cmd+Shift+X`)\n4. Click `...` menu → \"Install from VSIX...\"\n5. Select the downloaded file\n\n### Local Installation for Development\n\nIf you want to install the plugin locally from source code for development or testing:\n\n#### Step 1: Prerequisites\nEnsure you have the following installed:\n- **Node.js** 18.x or 20.x ([Download](https://nodejs.org/))\n- **npm** (comes with Node.js)\n- **VS Code** 1.80 or higher\n- **Git** (optional, for cloning)\n\n#### Step 2: Get the Source Code\n```bash\n# Clone the repository (or download ZIP from GitHub)\ngit clone https://github.com/jyjeanne/ditacraft.git\ncd ditacraft\n\n# OR if you downloaded as ZIP:\n# Extract the ZIP file and navigate to the extracted folder\ncd DitaCraft\n```\n\n#### Step 3: Install Dependencies\n```bash\nnpm install\n```\nThis will install all required npm packages (~429 packages).\n\n#### Step 4: Compile TypeScript\n```bash\nnpm run compile\n```\nThis compiles the TypeScript source code to JavaScript in the `out/` directory.\n\n#### Step 5: Package the Extension\n```bash\nnpm run package\n```\nThis creates a `.vsix` file in the project root (e.g., `ditacraft-0.1.0.vsix`).\n\n**Note:** If you don't have `vsce` installed, install it first:\n```bash\nnpm install -g @vscode/vsce\n```\n\n#### Step 6: Install in VS Code\n**Option A: Install from VSIX**\n1. Open VS Code\n2. Press `Ctrl+Shift+X` (or `Cmd+Shift+X` on macOS) to open Extensions\n3. Click the `...` menu at the top right\n4. Select \"Install from VSIX...\"\n5. Navigate to your project folder\n6. Select the `ditacraft-0.1.0.vsix` file\n7. Click \"Install\"\n8. Reload VS Code when prompted\n\n**Option B: Run in Development Mode** (Recommended for testing)\n1. Open the `ditacraft` folder in VS Code\n2. Press `F5` (or Run → Start Debugging)\n3. A new VS Code window opens with the extension loaded\n4. Test the extension in this window\n5. Make changes to code, save, and press `Ctrl+R` in the Extension Host window to reload\n\n#### Step 7: Verify Installation\n1. Open Command Palette (`Ctrl+Shift+P` / `Cmd+Shift+P`)\n2. Type \"DITA\" - you should see all DitaCraft commands\n3. Try creating a new topic: \"DITA: Create New Topic\"\n\n#### Step 8: Configure DITA-OT (Optional, for publishing)\n1. Download DITA-OT from https://www.dita-ot.org/download\n2. Extract to a location (e.g., `C:\\DITA-OT-4.2.1`)\n3. In VS Code, run \"DITA: Configure DITA-OT Path\"\n4. Select your DITA-OT installation directory\n\n### Troubleshooting Local Installation\n\n#### Issue: `npm install` fails\n**Solution:**\n- Check Node.js version: `node --version` (should be 18.x or 20.x)\n- Clear npm cache: `npm cache clean --force`\n- Delete `node_modules` and `package-lock.json`, then run `npm install` again\n\n#### Issue: Compilation errors\n**Solution:**\n- Ensure TypeScript is installed: `npm install -g typescript`\n- Check for syntax errors in `.ts` files\n- Run `npm run lint` to check for code issues\n\n#### Issue: Extension not appearing in VS Code\n**Solution:**\n- Verify the `.vsix` file was created successfully\n- Check VS Code version is 1.80 or higher\n- Try uninstalling any existing version first\n- Restart VS Code completely\n\n#### Issue: \"Cannot find module\" errors\n**Solution:**\n- Run `npm install` again\n- Check that `node_modules` directory exists\n- Verify `package.json` has all dependencies\n\n### Development Workflow\n\nFor active development on the extension:\n\n```bash\n# Terminal 1: Watch mode (auto-compile on changes)\nnpm run watch\n\n# Terminal 2: Run extension in debug mode\n# Press F5 in VS Code (or Run → Start Debugging)\n```\n\n**Making Changes:**\n1. Edit TypeScript files in `src/`\n2. Watch mode auto-compiles to `out/`\n3. In Extension Host window, press `Ctrl+R` (or `Cmd+R`) to reload\n4. Test your changes\n\n**Running Tests:**\n```bash\nnpm test\n```\n\n**Linting Code:**\n```bash\nnpm run lint\n```\n\n## Prerequisites\n\n### Required\n- **VS Code** 1.80 or higher\n- **Node.js** 18.x or 20.x (for development)\n\n### For Publishing\n- **DITA-OT** 4.2.1 or higher ([Download](https://www.dita-ot.org/download))\n\n### For Alternative Validation (Optional)\n- **xmllint** (libxml2) for external XML validation (TypesXML is the default and recommended engine)\n\n## Quick Start\n\n### 1. Install DITA-OT\nDownload and install DITA-OT from https://www.dita-ot.org/download\n\n### 2. Configure DitaCraft\n1. Open Command Palette (`Ctrl+Shift+P` / `Cmd+Shift+P`)\n2. Type \"DITA: Configure DITA-OT Path\"\n3. Select your DITA-OT installation directory\n\n### 3. Create Your First DITA File\n1. Open Command Palette\n2. Type \"DITA: Create New Topic\"\n3. Select topic type (concept, task, reference)\n4. Enter file name\n\n### 4. Publish\n1. Open your `.dita`, `.ditamap`, or `.bookmap` file\n2. Press `Ctrl+Shift+B` / `Cmd+Shift+B`\n3. Select output format (HTML5, PDF, etc.)\n4. View published content\n\n## Commands\n\nAll commands are accessible via Command Palette (`Ctrl+Shift+P` / `Cmd+Shift+P`):\n\n| Command | Shortcut | Description |\n|---------|----------|-------------|\n| **DITA: Validate Current File** | `Ctrl+Shift+V` | Validate DITA syntax and structure |\n| **DITA: Publish (Select Format)** | `Ctrl+Shift+B` | Publish with format selection |\n| **DITA: Publish to HTML5** | - | Quick publish to HTML5 |\n| **DITA: Preview HTML5** | `Ctrl+Shift+H` | Show live HTML5 preview |\n| **DITA: Show Map Visualizer** | - | Show interactive map hierarchy |\n| **DITA: Create New Topic** | - | Create new DITA topic |\n| **DITA: Create New Map** | - | Create new DITA map |\n| **DITA: Create New Bookmap** | - | Create new bookmap |\n| **DITA: Configure DITA-OT Path** | - | Set DITA-OT installation path |\n| **DITA: Set Root Map** | - | Choose explicit root map for key resolution |\n| **DITA: Clear Root Map** | - | Revert to automatic root map discovery |\n| **DITA: Validate Workspace** | - | Validate all DITA files across workspace |\n| **DITA: Setup cSpell Configuration** | - | Create cSpell config for DITA files |\n\n## Spell Checking with cSpell\n\nDitaCraft includes a pre-configured cSpell configuration with comprehensive DITA vocabulary to prevent false \"unknown word\" errors when using spell checkers.\n\n### Setup cSpell\n\n**Option 1: Automatic Setup (Recommended)**\n1. Open Command Palette (`Ctrl+Shift+P` / `Cmd+Shift+P`)\n2. Type \"DITA: Setup cSpell Configuration\"\n3. Click the command\n4. DitaCraft will create a `.cspellrc.json` file in your workspace root with all DITA terminology pre-configured\n\n**Option 2: Manual Setup**\n1. Copy the template `.cspellrc.json` from the DitaCraft project repository\n2. Place it in your workspace root folder\n3. The configuration includes:\n   - All DITA 1.3 elements (topic, titlealts, topicref, etc.)\n   - Common DITA attributes (href, conref, keyref, format, scope, etc.)\n   - Publishing terms (ditamap, bookmap, ditaval, etc.)\n   - Specialized configurations for `.dita`, `.ditamap`, `.bookmap`, and `.ditaval` files\n\n### Why cSpell Configuration?\n\nDITA includes many technical terms and element names (like `titlealts`, `conref`, `keyref`) that aren't recognized by standard spell checkers. The pre-configured `.cspellrc.json` prevents false \"unknown word\" warnings for these legitimate DITA terms while still catching actual spelling errors in your documentation content.\n\n### What's Included in the Configuration\n\nThe default cSpell configuration includes:\n- **DITA elements**: topic, concept, task, reference, figure, table, section, and 100+ more\n- **DITA attributes**: href, conref, keyref, conkeyref, format, scope, type, and more\n- **Map elements**: ditamap, topicref, mapref, keydef, reltable, and more\n- **Bookmap elements**: chapter, part, appendix, frontmatter, backmatter, and more\n- **Learning elements**: learningBase, learningObject, learningContent, and more\n- **Specialized terms**: ditaarch, xmlns, OASIS standards, and DITA-OT related terms\n\n## Configuration\n\n### Basic Settings\n\n```json\n{\n    \"ditacraft.ditaOtPath\": \"C:\\\\DITA-OT-4.2.1\",\n    \"ditacraft.defaultTranstype\": \"html5\",\n    \"ditacraft.outputDirectory\": \"${workspaceFolder}/out\"\n}\n```\n\n### All Settings\n\n| Setting | Type | Default | Description |\n|---------|------|---------|-------------|\n| `ditacraft.ditaOtPath` | string | `\"\"` | DITA-OT installation path |\n| `ditacraft.defaultTranstype` | string | `\"html5\"` | Default output format |\n| `ditacraft.outputDirectory` | string | `\"${workspaceFolder}/out\"` | Output directory |\n| `ditacraft.autoValidate` | boolean | `true` | Auto-validate on save |\n| `ditacraft.previewAutoRefresh` | boolean | `true` | Auto-refresh preview |\n| `ditacraft.previewScrollSync` | boolean | `true` | Bidirectional scroll sync |\n| `ditacraft.previewTheme` | string | `\"auto\"` | Preview theme (auto/light/dark) |\n| `ditacraft.previewCustomCss` | string | `\"\"` | Custom CSS for preview |\n| `ditacraft.showProgressNotifications` | boolean | `true` | Show progress notifications |\n| `ditacraft.validationEngine` | string | `\"built-in\"` | Validation engine (built-in/typesxml/xmllint) |\n| `ditacraft.ditaOtArgs` | array | `[]` | Custom DITA-OT arguments |\n| `ditacraft.enableSnippets` | boolean | `true` | Enable code snippets |\n| `ditacraft.maxNumberOfProblems` | number | `100` | Maximum diagnostics per file |\n| `ditacraft.ditaRulesEnabled` | boolean | `true` | Enable Schematron-equivalent DITA rules |\n| `ditacraft.ditaRulesCategories` | string[] | all | Rule categories to activate (mandatory, recommendation, authoring, accessibility) |\n| `ditacraft.crossRefValidationEnabled` | boolean | `true` | Validate cross-file references (href, conref, keyref) |\n| `ditacraft.subjectSchemeValidationEnabled` | boolean | `true` | Validate attribute values against subject schemes |\n| `ditacraft.rootMap` | string | `\"\"` | Explicit root map path (relative to workspace). Empty = auto-discover |\n| `ditacraft.xmlCatalogPath` | string | `\"\"` | Path to external XML catalog for custom DTD specializations |\n\n📖 **[Full Configuration Guide](CONFIGURATION.md)**\n\n## Supported Output Formats\n\nDitaCraft supports all DITA-OT transtypes:\n\n- **HTML5** - Modern responsive HTML\n- **PDF** - PDF via Apache FOP\n- **XHTML** - XHTML output\n- **EPUB** - EPUB3 e-books\n- **HTML Help** - Windows CHM files\n- **Markdown** - Markdown conversion\n\nAdditional formats available through DITA-OT plugins.\n\n## Workflows\n\n### Navigating Your Documentation Structure\n\n1. Open a `.ditamap` or `.bookmap` file\n2. **Ctrl+Click** (Cmd+Click on Mac) on any `href` attribute value in `\u003ctopicref\u003e` elements\n3. The referenced topic file opens in a new tab\n4. Navigate back and forth between map and topics seamlessly\n\n**Example:**\n```xml\n\u003cmap\u003e\n    \u003ctopicref href=\"introduction.dita\"/\u003e     \u003c!-- Ctrl+Click opens introduction.dita --\u003e\n    \u003ctopicref href=\"chapters/ch1.dita\"/\u003e     \u003c!-- Works with relative paths --\u003e\n    \u003ctopicref href=\"overview.dita#intro\"/\u003e   \u003c!-- Handles fragment IDs --\u003e\n\u003c/map\u003e\n```\n\n### Publishing a Book\n\n1. Create bookmap: `DITA: Create New Bookmap`\n2. Create chapters: `DITA: Create New Topic` (multiple times)\n3. Edit bookmap to reference chapters\n4. Use **Ctrl+Click navigation** to quickly jump between bookmap and chapter files\n5. Validate: `Ctrl+Shift+V`\n6. Publish: `Ctrl+Shift+B` → Select format\n7. Open output folder\n\n### Previewing Changes\n\n1. Open `.dita` file\n2. Make edits\n3. Press `Ctrl+Shift+H` to preview\n4. Preview auto-refreshes on save\n5. Toggle between source and preview\n\n### Using Filters (DITAVAL)\n\n```json\n{\n    \"ditacraft.ditaOtArgs\": [\n        \"--filter=filters/product-a.ditaval\"\n    ]\n}\n```\n\n## Development\n\n### Building from Source\n\n```bash\n# Clone repository\ngit clone https://github.com/jyjeanne/ditacraft.git\ncd ditacraft\n\n# Install dependencies\nnpm install\n\n# Compile TypeScript\nnpm run compile\n\n# Run tests\nnpm test\n\n# Package extension\nnpm run package\n```\n\n### Project Structure\n\n```\nditacraft/\n├── src/                         # Client-side extension code\n│   ├── extension.ts             # Entry point\n│   ├── commands/                # Command handlers\n│   ├── providers/               # Tree views, validation, link \u0026 decoration providers\n│   ├── utils/                   # Utilities (DITA-OT, key space, map parser, rate limiter)\n│   └── test/                    # Client test suites (620+ tests)\n├── server/                      # LSP Language Server (separate process)\n│   ├── src/\n│   │   ├── server.ts            # Server entry point \u0026 capability registration\n│   │   ├── features/            # LSP feature handlers\n│   │   │   ├── validation.ts    # Diagnostics (XML, DITA structure, IDs)\n│   │   │   ├── completion.ts    # IntelliSense completions\n│   │   │   ├── hover.ts         # Hover documentation\n│   │   │   ├── symbols.ts       # Document \u0026 workspace symbols\n│   │   │   ├── definition.ts    # Go to definition\n│   │   │   ├── references.ts    # Find references\n│   │   │   ├── rename.ts        # Rename with reference updates\n│   │   │   ├── formatting.ts    # XML formatting\n│   │   │   ├── codeActions.ts   # Quick fixes (9 actions)\n│   │   │   ├── linkedEditing.ts # Tag name sync editing\n│   │   │   ├── folding.ts       # Folding ranges\n│   │   │   ├── documentLinks.ts # Clickable links\n│   │   │   ├── crossRefValidation.ts    # Cross-file reference + scope validation\n│   │   │   ├── circularRefDetection.ts  # Circular reference detection (DFS)\n│   │   │   ├── workspaceValidation.ts   # Cross-file duplicate IDs, unused topics\n│   │   │   ├── ditaRulesValidator.ts    # 35 Schematron-equivalent DITA rules (incl. DITA 2.0)\n│   │   │   └── profilingValidation.ts   # Subject scheme controlled values\n│   │   ├── services/            # Key space, subject scheme, catalog \u0026 RNG validation services\n│   │   ├── utils/               # XML tokenizer, reference parser, workspace scanner, version detector, i18n\n│   │   ├── messages/            # Localization bundles (en.json, fr.json — 76+ message keys)\n│   │   └── data/                # DITA schema \u0026 specialization data (@class matching)\n│   └── test/                    # Server test suites (432 tests)\n├── dtds/                        # DITA 1.2, 1.3, and 2.0 DTD files (master catalog)\n├── docs/                        # Documentation\n│   ├── architecture.puml        # Architecture diagram (PlantUML)\n│   └── user-guide/              # DITA user guide (55 files, bookmap structure)\n├── ARCHITECTURE.md\n├── DITA_LSP_ARCHITECTURE.md     # LSP server architecture documentation\n├── ROADMAP.md\n├── TEST_PLAN.md                 # LSP feature test plan\n└── CHANGELOG.md\n```\n\n### Quality \u0026 Testing\n\nDitaCraft includes comprehensive test coverage across client and server:\n\n**Client Tests (620+ tests):**\n- DTD validation, real-time validation, command \u0026 auto-detection\n- Link navigation with key resolution, key space building \u0026 caching\n- Security (path traversal, XXE protection), rate limiting\n- Preview, file creation, configuration integration\n- Activity bar views: DITA Explorer, Key Space, Diagnostics, file decorations\n- Map hierarchy parser (25 tests)\n\n**LSP Server Tests (432 tests):**\n- Reference parser (40 tests) - all 6 exported parsing functions\n- XML tokenizer (18 tests) - state machine, error recovery, CRLF, context detection\n- XML formatting (20 tests) - indentation, inline, preformatted, edge cases\n- Folding ranges (10 tests) - elements, comments, CDATA, CRLF\n- Workspace scanner (8 tests) - offset-to-position conversion\n- Validation diagnostics (30 tests) - XML, DITA structure, IDs, maps, DITAVAL\n- Completions (19 tests) - element, attribute, value, DITAVAL, subject scheme completions\n- Hover (17 tests) - documentation, fallback, non-tag, DITAVAL, conref preview\n- Document symbols (13 tests) - outline, titles, maps, self-closing\n- Workspace symbols (8 tests) - cross-file search, in-memory preference\n- Code actions (14 tests) - all 9 quick fixes + edge cases\n- Linked editing (15 tests) - tag pairing, nesting, boundaries\n- Cross-reference validation - href, conref, keyref target validation\n- DITA rules validator - 35 Schematron-equivalent rules (5 categories incl. DITA 2.0)\n- Profiling validation - subject scheme controlled value checks\n- Subject scheme service - parsing, caching, hierarchy, value constraints\n- DITA specialization - @class matching, topic/map type names, utility functions\n- DITA version detector - version detection from content (1.0-2.0)\n\n**Running Tests:**\n```bash\n# Run client tests (requires VS Code)\nnpm test\n\n# Run server tests (standalone, no VS Code needed)\ncd server \u0026\u0026 npm test\n\n# Compile everything\nnpm run compile\n```\n\n## Known Limitations\n\n### Smart Navigation (v0.2.0)\n\nThe current implementation provides comprehensive navigation support. Minor limitations include:\n\n1. **Same-file Content References (`@conref` with `#`)** - e.g., `\u003cph conref=\"#v4.3/summary\"/\u003e`\n   - References starting with `#` point to elements within the same file\n   - Currently opens the file but doesn't scroll to the specific element\n\n2. **Conditional Key Definitions**\n   - Keys with DITAVAL conditions may not be resolved correctly\n   - The key space builder uses the first definition found\n\n3. **External Key Scopes**\n   - Keys defined in external key scopes are not yet supported\n   - Limited to keys within the workspace\n\n**What now works (NEW in v0.2.0):**\n- ✅ `href=\"path/to/file.dita\"` - Direct file paths\n- ✅ `href=\"file.dita#topic_id\"` - File paths with fragment identifiers\n- ✅ `conref=\"file.dita#element_id\"` - Content references\n- ✅ `keyref=\"key-name\"` - Key references resolved via key space\n- ✅ `conkeyref=\"key-name/element\"` - Content key references\n- ✅ Automatic root map discovery and key space building\n- ✅ Intelligent caching with 1-minute TTL\n- ✅ File watcher debouncing (300ms) for performance\n\n### Contributing\n\nContributions are welcome! Please:\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add amazing feature'`)\n4. Add tests for new features\n5. Ensure all tests pass (`npm test`)\n6. Push to the branch (`git push origin feature/amazing-feature`)\n7. Open a Pull Request\n\n## Troubleshooting\n\n### DITA-OT Not Found\n\n**Problem:** Extension shows \"DITA-OT not found\"\n\n**Solution:**\n1. Verify DITA-OT is installed\n2. Run \"DITA: Configure DITA-OT Path\" command\n3. Select DITA-OT installation directory\n4. Verify with \"DITA: Validate Current File\"\n\n### Validation Errors\n\n**Problem:** Validation shows unexpected errors\n\n**Solution:**\n1. Check XML syntax (closing tags, quotes, etc.)\n2. Verify DOCTYPE declaration\n3. Try switching validation engine: `\"ditacraft.validationEngine\": \"built-in\"`\n\n### Publishing Fails\n\n**Problem:** Publishing fails with error\n\n**Solution:**\n1. Check DITA-OT logs in Output panel\n2. Verify output directory is writable\n3. Check for syntax errors in DITA file\n4. Try publishing with `--verbose` flag:\n   ```json\n   \"ditacraft.ditaOtArgs\": [\"--verbose\"]\n   ```\n\n### Smart Navigation Not Working\n\n**Problem:** Ctrl+Click on href attributes doesn't open files\n\n**Solution:**\n1. Verify you're in a `.ditamap` or `.bookmap` file (check file extension in status bar)\n2. Hover over the href value - it should be underlined if detected as a link\n3. Make sure you're clicking on the href value itself (e.g., `introduction.dita`), not the attribute name `href=`\n4. Check that the referenced file path is correct and file exists\n5. Try reloading VS Code window (`Ctrl+R` / `Cmd+R` in VS Code)\n6. Verify extension is activated (look for \"DitaCraft\" in Extensions)\n\n**Example of correct usage:**\n```xml\n\u003ctopicref href=\"introduction.dita\"/\u003e\n              ^^^^^^^^^^^^^^^^^^^^\n         Ctrl+Click here (on the value)\n```\n\n### Preview Not Showing\n\n**Problem:** Preview panel is blank or shows error\n\n**Solution:**\n1. Verify HTML5 output was generated\n2. Check output directory exists\n3. Look for JavaScript errors in Developer Tools\n4. Try republishing: `Ctrl+Shift+B` → HTML5\n\n## Documentation\n\nDitaCraft includes comprehensive documentation written in DITA format:\n\n### 📖 User Guide (`docs/user-guide/`)\n\nA complete DITA bookmap with 55 files covering:\n\n| Section | Contents |\n|---------|----------|\n| **Part I: Getting Started** | Introduction, Installation \u0026 Setup |\n| **Part II: Using DitaCraft** | Commands (validation, publishing, file creation, navigation), Features (smart navigation, validation, preview, map visualizer, key resolution) |\n| **Part III: Configuration** | Settings (general, validation, publishing, preview) |\n| **Appendix** | Keyboard Shortcuts reference |\n| **Backmatter** | Glossary (28 terms), Index |\n\nThe user guide demonstrates DitaCraft's own capabilities - you can open it in VS Code to test validation, navigation, preview, and publishing features.\n\n## Resources\n\n### DITA Resources\n- [DITA-OT Documentation](https://www.dita-ot.org/dev/)\n- [OASIS DITA Specification](https://www.oasis-open.org/committees/dita/)\n- [DITA Style Guide](http://www.ditastyle.com/)\n\n### VS Code Resources\n- [VS Code Extension API](https://code.visualstudio.com/api)\n- [VS Code Publishing](https://code.visualstudio.com/api/working-with-extensions/publishing-extension)\n\n## Recent Updates\n\n### Version 0.7.0 (Current)\n**Multi-Version DTD, Workspace Analysis, Glossref \u0026 Validation Fixes**\n- **Multi-Version DTD Support** — Bundled DITA 1.2, 1.3, and 2.0 DTDs with OASIS XML Catalog chaining; `ditacraft.xmlCatalogPath` setting for custom specializations\n- **Scope Validation** — Validates `scope=\"local|peer|external\"` consistency with href format (DITA-SCOPE-001/002/003)\n- **Circular Reference Detection** — DFS traversal detects structural map reference cycles; only follows topicref/mapref/chapter/etc. (not keydef/xref/link), excludes `.xml` files\n- **Workspace Validation** — `DITA: Validate Workspace` command with progress, cross-file duplicate ID detection, and unused topic detection\n- **Glossref Element** — Full support across schema, autocompletion, explorer, map visualizer, content model, and hierarchy parser\n- **Glossentry/Troubleshooting Support** — Recognized as valid topic root elements; glossentry validates `\u003cglossterm\u003e` as first child (not `\u003ctitle\u003e`)\n- **Bookmap in .ditamap** — Bookmaps using `.ditamap` extension no longer produce false root element errors\n- **SCH-023 Fix** — Section title rule now uses depth-tracking to count only direct-child titles (ignores titles in nested `\u003cfig\u003e`, `\u003cdiv\u003e`, etc.)\n- **SCH-040 Fix** — Self-closing `\u003cxref/\u003e` no longer triggers false nested-xref error\n- **Bug Fixes** — Bookmap title boundary checks, conditional mainbooktitle warning, single-quote ID handling, error ranges, completion position clamping, XML tokenizer CRLF, openFile command\n- **652 Client Tests + 435 Server Tests** — 1087+ total\n\n### Version 0.6.1\n**Localization, DITA 2.0 Rules, Root Map \u0026 Validation Enhancements**\n- **Localization (i18n)** — All 67 diagnostic messages translatable; English + French bundles included; auto-detects LSP locale\n- **DITA 2.0 Rules** — 10 new version-specific rules (SCH-050 to SCH-059): removed elements (`\u003cboolean\u003e`, `\u003cindextermref\u003e`, `\u003cobject\u003e`, learning specializations), removed attributes (`@print`, `@copy-to`, `@navtitle`, `@query`), `\u003caudio\u003e`/`\u003cvideo\u003e` fallback accessibility checks\n- **35 Total DITA Rules** — Expanded from 18 to 35 Schematron-equivalent rules across 5 categories (mandatory, recommendation, authoring, accessibility, DITA 2.0 removal); version-gated per DITA version\n- **Root Map Feature** — Set/clear explicit root map via command palette or clickable status bar item; workspace-level `rootMap` setting; auto-discover mode by default\n- **DITA Specialization** — `@class` attribute matching for specialization-aware element handling; pre-built matchers for 20+ element types\n- **Catalog Validation Service** — DTD validation with OASIS XML Catalog resolution and parser pool (3 concurrent instances)\n- **RNG Validation Service** — Optional RelaxNG schema validation via salve-annos + saxes; grammar compilation with caching (max 20 schemas)\n- **Subject Scheme Enhancements** — Hierarchy path display in completions, grouping by parent subject, default value preselection\n- **Conref Content Preview** — Hover on `conref`/`conkeyref` shows inline preview of referenced content\n- **Smart Debouncing** — Tiered validation delays (300ms topics, 1000ms maps) with per-document cancellation\n- **Key Scope Support** — `@keyscope` attribute handling with scope-qualified key resolution\n- **New Logo** — Updated extension icon\n- **Bug Fixes** — Code action single-quote ID handling, DITA Explorer error handling, completion position clamping, XML tokenizer CRLF, `openFile` declaration\n\n### Version 0.6.0\n**Project Management, Activity Bar Views \u0026 Advanced LSP**\n- **Activity Bar Views** — DITA Explorer, Key Space, and Diagnostics views in dedicated sidebar\n- **File Decorations** — Error/warning badges on tree items from validation diagnostics\n- **Cross-Reference Validation** — Validates href, conref, keyref, and conkeyref targets across files (6 diagnostic codes)\n- **DITA Rules Engine** — Schematron-equivalent rules in 4 categories (mandatory, recommendation, authoring, accessibility)\n- **Profiling Validation** — Subject scheme controlled value validation with automatic scheme discovery\n- **Subject Scheme Service** — Parses subject scheme maps for controlled vocabularies with caching\n- **Error-Tolerant XML Tokenizer** — State-machine tokenizer with error recovery for malformed XML\n- **DITA Version Detection** — Auto-detects DITA version from `@DITAArchVersion` or DOCTYPE\n- **4 New Code Actions** — Add missing `otherrole`, remove deprecated `\u003cindextermref\u003e`, convert `alt` attribute to element, add missing `\u003calt\u003e` to `\u003cimage\u003e`\n- **5 New Settings** — `maxNumberOfProblems`, `ditaRulesEnabled`, `ditaRulesCategories`, `crossRefValidationEnabled`, `subjectSchemeValidationEnabled`\n- **LSP Architecture Documentation** — Comprehensive `DITA_LSP_ARCHITECTURE.md` describing server internals\n- **1040+ Total Tests** — Client (620) + Server (419)\n\n### Version 0.5.0\n**DITA Language Server with IntelliSense**\n- ✅ **Full LSP Implementation** - 14 language features in a dedicated server process\n- ✅ **IntelliSense** - Context-aware completion for elements, attributes, and values (364 DITA elements)\n- ✅ **DITAVAL Support** - Full IntelliSense, validation, and hover docs for `.ditaval` files\n- ✅ **Hover Documentation** - Element docs from DITA schema with children fallback\n- ✅ **Document \u0026 Workspace Symbols** - Outline view and cross-file symbol search (Ctrl+T)\n- ✅ **Go to Definition** - Navigate href/conref/keyref targets with full key space resolution\n- ✅ **Find References \u0026 Rename** - Cross-file ID references and rename with updates\n- ✅ **Formatting** - XML formatter with inline/block/preformatted element handling\n- ✅ **Code Actions** - 5 quick fixes (DOCTYPE, ID, title, empty element, duplicate ID)\n- ✅ **Linked Editing** - Simultaneous open/close tag name editing\n- ✅ **Folding \u0026 Document Links** - Collapsible ranges and clickable references\n- ✅ **Key Space Resolution Fix** - Improved root map discovery across nested directories\n- ✅ **cSpell Auto-Prompt** - Suggests cSpell setup when extension detected without config\n- ✅ **Server Test Suite** - 190 standalone Mocha tests (no VS Code dependency)\n- ✅ **737+ Total Tests** - Client (547) + Server (190) with CI integration\n\n### Version 0.4.2\n**Architecture, Security \u0026 Documentation**\n- ✅ **Modular Validation Engine** - Refactored validation with pluggable engine architecture\n- ✅ **Rate Limiting** - DoS protection for validation operations (10 req/sec per file)\n- ✅ **Adaptive Cache Cleanup** - Intelligent cache management that skips cleanup when empty\n- ✅ **Architecture Documentation** - Comprehensive ARCHITECTURE.md with data flow diagrams\n- ✅ **DITA User Guide** - Complete user documentation in DITA format (55 files with bookmap, glossary, index)\n- ✅ **Preview Scroll Sync Fix** - Fixed scroll sync for content smaller than viewport\n- ✅ **Preview Print Mode Fix** - Fixed toolbar injection for non-standard HTML structures\n- ✅ **547+ Tests** - Expanded test suite with security and edge case coverage\n\n### Version 0.4.1\n**TypesXML DTD Validation**\n- ✅ **TypesXML DTD Validation** - Pure TypeScript validation with 100% W3C conformance (no native dependencies)\n- ✅ **OASIS XML Catalog Support** - Full DITA public identifier resolution via TypesXML\n- ✅ **Three Validation Engines** - TypesXML (default), built-in, xmllint\n\n### Version 0.4.0\n**Enhanced Preview, Build Output \u0026 Map Visualizer**\n- ✅ **DITA Map Visualizer** - Interactive tree view showing map hierarchies with navigation\n- ✅ **Bidirectional Scroll Sync** - Editor and preview scroll positions stay synchronized\n- ✅ **Print Preview Mode** - Print-optimized view with dedicated print button\n- ✅ **Syntax-Highlighted Build Output** - DITA-OT output with automatic colorization by log level\n- ✅ **Log Level Detection** - Errors, warnings, info, debug messages auto-classified\n- ✅ **Build Timestamps** - Build start and completion times displayed\n- ✅ **Circular Reference Detection** - Map visualizer detects and warns about circular map references\n- ✅ **490+ Tests** - Comprehensive test suite with new feature coverage\n\n### Version 0.3.0\n**Developer Experience \u0026 Quality Milestone**\n- ✅ **Code Coverage with c8** - Switched from nyc to c8 for VS Code extension-compatible coverage\n- ✅ **Coverage Threshold Enforcement** - CI enforces minimum coverage (62% lines, 65% functions, 73% branches)\n- ✅ **CI Security Audit** - Dedicated security audit job with weekly scheduled scans\n- ✅ **Cross-Platform CI** - Tests run on Windows, macOS, and Linux\n- ✅ **Dynamic Configuration** - Centralized ConfigurationManager with real-time change propagation\n- ✅ **Advanced Element Navigation** - Same-file and cross-file element navigation with fragment support\n- ✅ **Configurable Settings** - Validation debounce, key space TTL, DITA-OT timeout, max link matches\n- ✅ **Code Quality** - Removed unused dependencies, consolidated file reading, standardized async patterns\n\n### Version 0.2.4\n- ✅ **Fixed DITA-OT HTML5 Publishing** - Resolved Windows path case sensitivity issue\n- ✅ **Comprehensive Test Suite** - 307+ tests including error handling tests\n- ✅ **Improved Error Handling** - Added `fireAndForget` utility for safe async handling\n\n### Version 0.2.0\n- ✅ **Full Key Space Resolution** - Navigate `@keyref`, `@conkeyref`, and key-based references with automatic key space building\n- ✅ **Enhanced Security** - XXE neutralization, path traversal protection, and command injection prevention\n- ✅ **Performance Optimizations** - Async file operations, intelligent caching (1-min TTL), and file watcher debouncing\n- ✅ **Content Reference Navigation** - Ctrl+Click on `@conref` attributes to navigate to referenced content\n- ✅ **Better UI Responsiveness** - Async operations prevent UI blocking during file operations\n\n### Version 0.1.3 Fixes\n- ✅ **Fixed preview and publishing with paths containing spaces** - File paths with spaces now work correctly\n- ✅ **Fixed DITA validation** - Title element is now correctly validated as required per DTD spec\n- ✅ **Enhanced DTD validation** - Added proper DTD validation support with xmllint\n- ✅ **Improved error messages** - Better, more descriptive validation and publishing error messages\n- ✅ **Fixed file path validation** - Comprehensive checks to ensure files are being processed\n- ✅ **Added verbose logging** - Detailed console logging for easier debugging\n\n## Roadmap\n\nWe have an exciting roadmap planned for DitaCraft! See our detailed [ROADMAP.md](ROADMAP.md) for:\n\n- **v0.3.0** - Developer Experience \u0026 Quality ✅ **COMPLETE**\n- **v0.4.0** - Enhanced Preview, Build Output \u0026 Map Visualizer ✅ **COMPLETE**\n- **v0.5.0** - IntelliSense \u0026 Content Assistance (LSP, DITAVAL, 737+ tests) ✅ **COMPLETE**\n- **v0.6.0** - Project Management, Views \u0026 Advanced LSP (1010+ tests) ✅ **COMPLETE**\n- **v0.7.0** - Advanced Validation (DITA 1.2/2.0 DTDs, workspace-level analysis) **NEXT**\n- **v0.8.0** - Refactoring \u0026 Productivity (rename keys, templates)\n- **v0.9.0** - Publishing Enhancements (profiles, DITAVAL editor)\n\n## Contributing\n\nWe welcome contributions! Here's how you can help:\n\n### Good First Issues\nLook for issues labeled [`good first issue`](https://github.com/jyjeanne/ditacraft/labels/good%20first%20issue) - these are great starting points for new contributors.\n\n### Development Setup\n```bash\ngit clone https://github.com/jyjeanne/ditacraft.git\ncd ditacraft\nnpm install\nnpm run compile\n# Press F5 in VS Code to run in debug mode\n```\n\n### Areas Needing Help\n| Area | Difficulty | Description |\n|------|------------|-------------|\n| Test Coverage | Easy-Medium | Add tests for commands and providers |\n| Documentation | Easy | Improve README, add tutorials |\n| DITAVAL Editor | Medium | Visual condition editing |\n| DTD Support | Hard | Add DITA 1.2/2.0 support |\n| DITAVAL Editor | Medium | Visual condition editing |\n\nSee [ROADMAP.md](ROADMAP.md) for detailed feature breakdown and contribution opportunities.\n\n## Changelog\n\nSee [CHANGELOG.md](CHANGELOG.md) for release history.\n\n## Third-Party Licenses \u0026 Attributions\n\nDitaCraft includes third-party components with the following licenses:\n\n### OASIS DITA 1.3 Grammar Files\n\nThis extension bundles DITA 1.3 DTD files for validation purposes.\n\n- **Copyright:** OASIS Open 2005, 2015. All rights reserved.\n- **Source:** [OASIS DITA Technical Committee](https://www.oasis-open.org/committees/dita/)\n- **License:** [OASIS IPR Policy](https://www.oasis-open.org/policies-guidelines/ipr/) (RF on Limited Terms)\n\nThese grammar files are included to enable DTD-based validation of DITA documents, as permitted under the OASIS IPR Policy for implementing the standard.\n\n### NPM Dependencies\n\n| Package | License | Purpose |\n|---------|---------|---------|\n| `typesxml` | EPL-1.0 | Full DTD validation with OASIS catalog support |\n| `@xmldom/xmldom` | MIT | XML DOM parsing for fallback validation |\n| `fast-xml-parser` | MIT | Fast XML validation and parsing |\n\nFor complete license texts, see [THIRD-PARTY-NOTICES.md](THIRD-PARTY-NOTICES.md).\n\n## License\n\nThis project is licensed under the MIT License - see [LICENSE](LICENSE) file for details.\n\n## Support\n\n- 🐛 **Bug Reports:** [GitHub Issues](https://github.com/jyjeanne/ditacraft/issues)\n- 💡 **Feature Requests:** [GitHub Issues](https://github.com/jyjeanne/ditacraft/issues)\n- 💬 **Discussions:** [GitHub Discussions](https://github.com/jyjeanne/ditacraft/discussions)\n- 📧 **Email:** jyjeanne@gmail.com\n\n## Acknowledgments\n\n- DITA Open Toolkit team for the excellent DITA-OT\n- OASIS DITA Technical Committee\n- VS Code extension development community\n- All contributors and users\n\n---\n\n**Made with ❤️ for technical writers and documentation teams**\n\n[⭐ Star this project on GitHub](https://github.com/jyjeanne/ditacraft)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjyjeanne%2Fditacraft","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjyjeanne%2Fditacraft","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjyjeanne%2Fditacraft/lists"}