regen.mde 0.7.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/LICENSE +16 -16
  2. package/README.md +2 -1
  3. package/bin/build-corpus-editor.js +83 -83
  4. package/bin/build-corpus.js +41 -41
  5. package/bin/regen-mdeditor-install.js +27 -27
  6. package/bin/regen-mdeditor-uninstall.js +19 -19
  7. package/bin/validate-katex.js +93 -93
  8. package/desktop/BuildCorpusEditor/BuildCorpusEditor.csproj +22 -22
  9. package/desktop/BuildCorpusEditor/EditorForm.cs +58 -10
  10. package/desktop/BuildCorpusEditor/app.manifest +16 -16
  11. package/dist/release/{regen-mde-0.7.0-win-x64.zip → regen-mde-0.8.0-win-x64.zip} +0 -0
  12. package/dist/release/regen-mde-0.8.1-win-x64.zip +0 -0
  13. package/dist/windows-editor/BuildCorpusEditor.dll +0 -0
  14. package/dist/windows-editor/BuildCorpusEditor.exe +0 -0
  15. package/dist/windows-editor/BuildCorpusEditor.pdb +0 -0
  16. package/dist/windows-editor/BuildCorpusEditor.runtimeconfig.json +1 -1
  17. package/dist/windows-editor/wwwroot/assets/{index-C_VxJk4k.js → index-BB0sbZaD.js} +107 -107
  18. package/dist/windows-editor/wwwroot/assets/index-CtOv7qsC.css +1 -0
  19. package/dist/windows-editor/wwwroot/index.html +22 -22
  20. package/editor-web/index.html +21 -21
  21. package/editor-web/src/main.jsx +107 -69
  22. package/editor-web/src/styles.css +99 -35
  23. package/editor-web/vite.config.js +13 -13
  24. package/examples/build-corpus.config.example.json +21 -21
  25. package/installer/install-regen-mde.ps1 +214 -214
  26. package/installer/regen-mde.nsi +81 -81
  27. package/package.json +90 -90
  28. package/pyproject.toml +34 -35
  29. package/requirements.txt +0 -1
  30. package/scripts/build-windows-editor.ps1 +47 -47
  31. package/scripts/package-windows-editor.ps1 +90 -90
  32. package/scripts/run-corpus.ps1 +28 -28
  33. package/scripts/run-editor-implementation-plane.ps1 +226 -226
  34. package/scripts/run-required-tests.ps1 +98 -98
  35. package/scripts/run-smoke.ps1 +28 -28
  36. package/src/build_corpus/__init__.py +1 -1
  37. package/src/build_corpus/equations.py +1345 -80
  38. package/src/build_corpus/templates/__init__.py +1 -1
  39. package/src/build_corpus/validate_assets.py +46 -46
  40. package/tools/audit_corpus.py +203 -203
  41. package/tools/collect_microsoft_word_templates.py +228 -228
  42. package/tools/collect_online_docx_corpus.py +272 -272
  43. package/tools/collect_online_pptx_corpus.py +252 -252
  44. package/tools/compare_pptx_inputs_outputs.py +87 -87
  45. package/tools/roundtrip_docx_corpus.py +171 -171
  46. package/dist/release/regen-mde-0.3.0-win-x64-setup.exe +0 -0
  47. package/dist/release/regen-mde-0.3.0-win-x64.zip +0 -0
  48. package/dist/release/regen-mde-0.7.0-win-x64-setup.exe +0 -0
  49. package/dist/windows-editor/wwwroot/assets/index-Wt9zSjIw.css +0 -1
package/package.json CHANGED
@@ -1,90 +1,90 @@
1
- {
2
- "name": "regen.mde",
3
- "version": "0.7.0",
4
- "description": "Convert between DOCX/PPTX and Markdown — Word OMML equations to KaTeX TeX on the way in, LaTeX to native OMML on the way out.",
5
- "bin": {
6
- "build-corpus": "bin/build-corpus.js",
7
- "build-corpus-editor": "bin/build-corpus-editor.js",
8
- "mdeditor": "bin/build-corpus-editor.js",
9
- "regen-mde": "bin/build-corpus-editor.js",
10
- "regen-mdeditor": "bin/build-corpus-editor.js",
11
- "regen-mdeditor-install": "bin/regen-mdeditor-install.js",
12
- "regen-mdeditor-uninstall": "bin/regen-mdeditor-uninstall.js",
13
- "build-corpus-katex": "bin/validate-katex.js"
14
- },
15
- "files": [
16
- "bin/",
17
- "desktop/BuildCorpusEditor/*.cs",
18
- "desktop/BuildCorpusEditor/*.csproj",
19
- "desktop/BuildCorpusEditor/*.manifest",
20
- "dist/release/regen-mde-*-win-x64-setup.exe",
21
- "dist/release/regen-mde-*-win-x64.zip",
22
- "dist/windows-editor/",
23
- "editor-web/",
24
- "installer/",
25
- "src/build_corpus/*.py",
26
- "src/build_corpus/templates/*.py",
27
- "src/build_corpus/templates/*.dotx",
28
- "examples/",
29
- "scripts/",
30
- "tools/*.py",
31
- "pyproject.toml",
32
- "requirements.txt",
33
- "README.md",
34
- "LICENSE"
35
- ],
36
- "scripts": {
37
- "editor:build": "vite build --config editor-web/vite.config.js",
38
- "editor:windows": "powershell.exe -ExecutionPolicy Bypass -File scripts/build-windows-editor.ps1",
39
- "editor:package": "powershell.exe -ExecutionPolicy Bypass -File scripts/package-windows-editor.ps1",
40
- "test:conversion": "powershell.exe -NoProfile -ExecutionPolicy Bypass -File scripts/run-required-tests.ps1 -Suite Conversion",
41
- "test:editor": "powershell.exe -NoProfile -ExecutionPolicy Bypass -File scripts/run-required-tests.ps1 -Suite Editor",
42
- "test:required": "powershell.exe -NoProfile -ExecutionPolicy Bypass -File scripts/run-required-tests.ps1 -Suite Auto",
43
- "test:all": "powershell.exe -NoProfile -ExecutionPolicy Bypass -File scripts/run-required-tests.ps1 -Suite All",
44
- "release": "node scripts/release-dual.mjs",
45
- "prepack": "npm run editor:windows && npm run editor:package",
46
- "postinstall": "node bin/postinstall.js",
47
- "preuninstall": "node bin/postinstall.js --uninstall",
48
- "test": "node bin/build-corpus.js --help && node bin/validate-katex.js README.md"
49
- },
50
- "dependencies": {
51
- "@codemirror/lang-markdown": "^6.5.0",
52
- "@codemirror/theme-one-dark": "^6.1.3",
53
- "@tiptap/extension-bubble-menu": "^3.23.1",
54
- "@tiptap/extension-floating-menu": "^3.23.1",
55
- "@tiptap/extension-image": "^3.23.1",
56
- "@tiptap/extension-link": "^3.23.1",
57
- "@tiptap/extension-placeholder": "^3.23.1",
58
- "@tiptap/extension-table": "^3.23.1",
59
- "@tiptap/extension-table-cell": "^3.23.1",
60
- "@tiptap/extension-table-header": "^3.23.1",
61
- "@tiptap/extension-table-row": "^3.23.1",
62
- "@tiptap/extension-task-item": "^3.23.1",
63
- "@tiptap/extension-task-list": "^3.23.1",
64
- "@tiptap/react": "^3.23.1",
65
- "@tiptap/starter-kit": "^3.23.1",
66
- "@uiw/react-codemirror": "^4.25.9",
67
- "katex": "^0.16.22",
68
- "marked": "^15.0.12",
69
- "react": "^19.2.6",
70
- "react-dom": "^19.2.6",
71
- "turndown": "^7.2.4"
72
- },
73
- "keywords": [
74
- "docx",
75
- "markdown",
76
- "word",
77
- "omml",
78
- "katex",
79
- "converter"
80
- ],
81
- "author": "LIFE AI",
82
- "license": "Apache-2.0",
83
- "engines": {
84
- "node": ">=18"
85
- },
86
- "devDependencies": {
87
- "@vitejs/plugin-react": "^4.7.0",
88
- "vite": "^6.4.2"
89
- }
90
- }
1
+ {
2
+ "name": "regen.mde",
3
+ "version": "0.8.1",
4
+ "description": "Convert between DOCX/PPTX and Markdown — Word OMML equations to KaTeX TeX on the way in, LaTeX to native OMML on the way out.",
5
+ "bin": {
6
+ "build-corpus": "bin/build-corpus.js",
7
+ "build-corpus-editor": "bin/build-corpus-editor.js",
8
+ "mdeditor": "bin/build-corpus-editor.js",
9
+ "regen-mde": "bin/build-corpus-editor.js",
10
+ "regen-mdeditor": "bin/build-corpus-editor.js",
11
+ "regen-mdeditor-install": "bin/regen-mdeditor-install.js",
12
+ "regen-mdeditor-uninstall": "bin/regen-mdeditor-uninstall.js",
13
+ "build-corpus-katex": "bin/validate-katex.js"
14
+ },
15
+ "files": [
16
+ "bin/",
17
+ "desktop/BuildCorpusEditor/*.cs",
18
+ "desktop/BuildCorpusEditor/*.csproj",
19
+ "desktop/BuildCorpusEditor/*.manifest",
20
+ "dist/release/regen-mde-*-win-x64-setup.exe",
21
+ "dist/release/regen-mde-*-win-x64.zip",
22
+ "dist/windows-editor/",
23
+ "editor-web/",
24
+ "installer/",
25
+ "src/build_corpus/*.py",
26
+ "src/build_corpus/templates/*.py",
27
+ "src/build_corpus/templates/*.dotx",
28
+ "examples/",
29
+ "scripts/",
30
+ "tools/*.py",
31
+ "pyproject.toml",
32
+ "requirements.txt",
33
+ "README.md",
34
+ "LICENSE"
35
+ ],
36
+ "scripts": {
37
+ "editor:build": "vite build --config editor-web/vite.config.js",
38
+ "editor:windows": "powershell.exe -ExecutionPolicy Bypass -File scripts/build-windows-editor.ps1",
39
+ "editor:package": "powershell.exe -ExecutionPolicy Bypass -File scripts/package-windows-editor.ps1",
40
+ "test:conversion": "powershell.exe -NoProfile -ExecutionPolicy Bypass -File scripts/run-required-tests.ps1 -Suite Conversion",
41
+ "test:editor": "powershell.exe -NoProfile -ExecutionPolicy Bypass -File scripts/run-required-tests.ps1 -Suite Editor",
42
+ "test:required": "powershell.exe -NoProfile -ExecutionPolicy Bypass -File scripts/run-required-tests.ps1 -Suite Auto",
43
+ "test:all": "powershell.exe -NoProfile -ExecutionPolicy Bypass -File scripts/run-required-tests.ps1 -Suite All",
44
+ "release": "node scripts/release-dual.mjs",
45
+ "prepack": "npm run editor:windows && npm run editor:package",
46
+ "postinstall": "node bin/postinstall.js",
47
+ "preuninstall": "node bin/postinstall.js --uninstall",
48
+ "test": "node bin/build-corpus.js --help && node bin/validate-katex.js README.md"
49
+ },
50
+ "dependencies": {
51
+ "@codemirror/lang-markdown": "^6.5.0",
52
+ "@codemirror/theme-one-dark": "^6.1.3",
53
+ "@tiptap/extension-bubble-menu": "^3.23.1",
54
+ "@tiptap/extension-floating-menu": "^3.23.1",
55
+ "@tiptap/extension-image": "^3.23.1",
56
+ "@tiptap/extension-link": "^3.23.1",
57
+ "@tiptap/extension-placeholder": "^3.23.1",
58
+ "@tiptap/extension-table": "^3.23.1",
59
+ "@tiptap/extension-table-cell": "^3.23.1",
60
+ "@tiptap/extension-table-header": "^3.23.1",
61
+ "@tiptap/extension-table-row": "^3.23.1",
62
+ "@tiptap/extension-task-item": "^3.23.1",
63
+ "@tiptap/extension-task-list": "^3.23.1",
64
+ "@tiptap/react": "^3.23.1",
65
+ "@tiptap/starter-kit": "^3.23.1",
66
+ "@uiw/react-codemirror": "^4.25.9",
67
+ "katex": "^0.16.22",
68
+ "marked": "^15.0.12",
69
+ "react": "^19.2.6",
70
+ "react-dom": "^19.2.6",
71
+ "turndown": "^7.2.4"
72
+ },
73
+ "keywords": [
74
+ "docx",
75
+ "markdown",
76
+ "word",
77
+ "omml",
78
+ "katex",
79
+ "converter"
80
+ ],
81
+ "author": "LIFE AI",
82
+ "license": "Apache-2.0",
83
+ "engines": {
84
+ "node": ">=18"
85
+ },
86
+ "devDependencies": {
87
+ "@vitejs/plugin-react": "^4.7.0",
88
+ "vite": "^6.4.2"
89
+ }
90
+ }
package/pyproject.toml CHANGED
@@ -1,35 +1,34 @@
1
- [build-system]
2
- requires = ["setuptools>=69", "wheel"]
3
- build-backend = "setuptools.build_meta"
4
-
5
- [project]
6
- name = "build-corpus"
7
- version = "0.7.0"
8
- description = "Convert between DOCX/PPTX and Markdown — Word OMML equations to KaTeX TeX inbound, LaTeX to native OMML outbound."
9
- readme = "README.md"
10
- requires-python = ">=3.10"
11
- license = "Apache-2.0"
12
- authors = [
13
- { name = "LIFE AI" }
14
- ]
15
- keywords = ["docx", "markdown", "omml", "katex", "word", "converter"]
16
- dependencies = [
17
- "omml2latex>=0.1.1",
18
- "Pillow>=10.0.0",
19
- "python-docx>=1.1.2",
20
- "latex2mathml>=3.77",
21
- "mathml2omml>=0.0.2"
22
- ]
23
-
24
- [project.optional-dependencies]
25
- s3 = ["boto3>=1.34"]
26
- dev = ["build>=1.2", "twine>=5.0"]
27
-
28
- [project.scripts]
29
- "build-corpus" = "build_corpus.exporter:main"
30
-
31
- [tool.setuptools.packages.find]
32
- where = ["src"]
33
-
34
- [tool.setuptools.package-data]
35
- build_corpus = ["templates/*.dotx"]
1
+ [build-system]
2
+ requires = ["setuptools>=69", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "build-corpus"
7
+ version = "0.8.1"
8
+ description = "Convert between DOCX/PPTX and Markdown — Word OMML equations to KaTeX TeX inbound, LaTeX to native OMML outbound."
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ license = "Apache-2.0"
12
+ authors = [
13
+ { name = "LIFE AI" }
14
+ ]
15
+ keywords = ["docx", "markdown", "omml", "katex", "word", "converter"]
16
+ dependencies = [
17
+ "omml2latex>=0.1.1",
18
+ "Pillow>=10.0.0",
19
+ "python-docx>=1.1.2",
20
+ "latex2mathml>=3.77"
21
+ ]
22
+
23
+ [project.optional-dependencies]
24
+ s3 = ["boto3>=1.34"]
25
+ dev = ["build>=1.2", "twine>=5.0"]
26
+
27
+ [project.scripts]
28
+ "build-corpus" = "build_corpus.exporter:main"
29
+
30
+ [tool.setuptools.packages.find]
31
+ where = ["src"]
32
+
33
+ [tool.setuptools.package-data]
34
+ build_corpus = ["templates/*.dotx"]
package/requirements.txt CHANGED
@@ -3,4 +3,3 @@ boto3>=1.34
3
3
  Pillow>=10.0.0
4
4
  python-docx>=1.1.2
5
5
  latex2mathml>=3.77
6
- mathml2omml>=0.0.2
@@ -1,47 +1,47 @@
1
- [CmdletBinding()]
2
- param(
3
- [string]$Root = ""
4
- )
5
-
6
- $ErrorActionPreference = "Stop"
7
-
8
- if ([string]::IsNullOrWhiteSpace($Root)) {
9
- $Root = (Resolve-Path (Join-Path $PSScriptRoot "..")).Path
10
- }
11
-
12
- function Invoke-Checked {
13
- param([string]$FilePath, [string[]]$Arguments)
14
- Write-Host "+ $FilePath $($Arguments -join ' ')" -ForegroundColor DarkGray
15
- Push-Location $Root
16
- try {
17
- & $FilePath @Arguments
18
- $exitCode = if ($LASTEXITCODE -is [int]) { $LASTEXITCODE } else { 0 }
19
- } finally {
20
- Pop-Location
21
- }
22
- if ($exitCode -ne 0) {
23
- throw "Command failed with exit code ${exitCode}: $FilePath $($Arguments -join ' ')"
24
- }
25
- }
26
-
27
- Invoke-Checked "npm" @("run", "editor:build")
28
-
29
- Get-Process BuildCorpusEditor -ErrorAction SilentlyContinue | Stop-Process -Force
30
-
31
- Invoke-Checked "dotnet" @(
32
- "publish",
33
- "desktop\BuildCorpusEditor\BuildCorpusEditor.csproj",
34
- "-c", "Release",
35
- "-r", "win-x64",
36
- "--self-contained", "false",
37
- "-o", "dist\windows-editor"
38
- )
39
-
40
- $exe = Join-Path $Root "dist\windows-editor\BuildCorpusEditor.exe"
41
- if (-not (Test-Path -LiteralPath $exe)) {
42
- throw "Expected executable missing: $exe"
43
- }
44
-
45
- Remove-Item -LiteralPath (Join-Path $Root "dist\windows-editor\BuildCorpusEditor.exe.WebView2") -Recurse -Force -ErrorAction SilentlyContinue
46
-
47
- Write-Host "Built $exe" -ForegroundColor Green
1
+ [CmdletBinding()]
2
+ param(
3
+ [string]$Root = ""
4
+ )
5
+
6
+ $ErrorActionPreference = "Stop"
7
+
8
+ if ([string]::IsNullOrWhiteSpace($Root)) {
9
+ $Root = (Resolve-Path (Join-Path $PSScriptRoot "..")).Path
10
+ }
11
+
12
+ function Invoke-Checked {
13
+ param([string]$FilePath, [string[]]$Arguments)
14
+ Write-Host "+ $FilePath $($Arguments -join ' ')" -ForegroundColor DarkGray
15
+ Push-Location $Root
16
+ try {
17
+ & $FilePath @Arguments
18
+ $exitCode = if ($LASTEXITCODE -is [int]) { $LASTEXITCODE } else { 0 }
19
+ } finally {
20
+ Pop-Location
21
+ }
22
+ if ($exitCode -ne 0) {
23
+ throw "Command failed with exit code ${exitCode}: $FilePath $($Arguments -join ' ')"
24
+ }
25
+ }
26
+
27
+ Invoke-Checked "npm" @("run", "editor:build")
28
+
29
+ Get-Process BuildCorpusEditor -ErrorAction SilentlyContinue | Stop-Process -Force
30
+
31
+ Invoke-Checked "dotnet" @(
32
+ "publish",
33
+ "desktop\BuildCorpusEditor\BuildCorpusEditor.csproj",
34
+ "-c", "Release",
35
+ "-r", "win-x64",
36
+ "--self-contained", "false",
37
+ "-o", "dist\windows-editor"
38
+ )
39
+
40
+ $exe = Join-Path $Root "dist\windows-editor\BuildCorpusEditor.exe"
41
+ if (-not (Test-Path -LiteralPath $exe)) {
42
+ throw "Expected executable missing: $exe"
43
+ }
44
+
45
+ Remove-Item -LiteralPath (Join-Path $Root "dist\windows-editor\BuildCorpusEditor.exe.WebView2") -Recurse -Force -ErrorAction SilentlyContinue
46
+
47
+ Write-Host "Built $exe" -ForegroundColor Green
@@ -1,90 +1,90 @@
1
- [CmdletBinding()]
2
- param(
3
- [string]$Root = "",
4
- [string]$Version = ""
5
- )
6
-
7
- $ErrorActionPreference = "Stop"
8
-
9
- if ([string]::IsNullOrWhiteSpace($Root)) {
10
- $Root = (Resolve-Path (Join-Path $PSScriptRoot "..")).Path
11
- }
12
-
13
- if ([string]::IsNullOrWhiteSpace($Version)) {
14
- $pkg = Get-Content -Raw -LiteralPath (Join-Path $Root "package.json") | ConvertFrom-Json
15
- $Version = $pkg.version
16
- }
17
-
18
- $releaseRoot = Join-Path $Root "dist\release"
19
- $stage = Join-Path $releaseRoot "regen-mde-$Version-win-x64"
20
- $app = Join-Path $stage "app"
21
- $zip = Join-Path $releaseRoot "regen-mde-$Version-win-x64.zip"
22
- $setupExe = Join-Path $releaseRoot "regen-mde-$Version-win-x64-setup.exe"
23
-
24
- Remove-Item -LiteralPath $stage -Recurse -Force -ErrorAction SilentlyContinue
25
- Remove-Item -LiteralPath $zip -Force -ErrorAction SilentlyContinue
26
- Remove-Item -LiteralPath $setupExe -Force -ErrorAction SilentlyContinue
27
- New-Item -ItemType Directory -Force -Path $app | Out-Null
28
-
29
- Copy-Item -Path (Join-Path $Root "dist\windows-editor\*") -Destination $app -Recurse -Force
30
- Remove-Item -LiteralPath (Join-Path $app "BuildCorpusEditor.exe.WebView2") -Recurse -Force -ErrorAction SilentlyContinue
31
- Copy-Item -LiteralPath (Join-Path $Root "bin") -Destination $app -Recurse -Force
32
- Copy-Item -LiteralPath (Join-Path $Root "src") -Destination $app -Recurse -Force
33
- Copy-Item -LiteralPath (Join-Path $Root "requirements.txt") -Destination $app -Force
34
- Copy-Item -LiteralPath (Join-Path $Root "pyproject.toml") -Destination $app -Force
35
- Copy-Item -LiteralPath (Join-Path $Root "package.json") -Destination $app -Force
36
- Copy-Item -LiteralPath (Join-Path $Root "package-lock.json") -Destination $app -Force
37
-
38
- Copy-Item -LiteralPath (Join-Path $Root "installer\install-regen-mde.ps1") -Destination $stage -Force
39
-
40
- $readme = @"
41
- regen-mde for Windows
42
- =====================
43
-
44
- Install:
45
- Right-click install-regen-mde.ps1 and choose "Run with PowerShell"
46
-
47
- After install:
48
- Open the Windows Start menu and search for "regen-mde".
49
- Right-click .md or .docx files and choose "Open in regen-mde".
50
- Use "Uninstall regen-mde" from the Start menu to remove the app and shell verbs.
51
-
52
- Requirements:
53
- Windows with Microsoft Edge WebView2 runtime
54
- Node.js on PATH
55
- Python 3 on PATH with the Build Corpus Python requirements installed
56
-
57
- The installer copies the app to:
58
- %LOCALAPPDATA%\Programs\regen-mde
59
- "@
60
- Set-Content -LiteralPath (Join-Path $stage "README-INSTALL.txt") -Value $readme -Encoding UTF8
61
-
62
- Compress-Archive -Path (Join-Path $stage "*") -DestinationPath $zip -Force
63
-
64
- if (-not (Test-Path -LiteralPath $zip)) {
65
- throw "Package zip was not created: $zip"
66
- }
67
-
68
- $makensis = @(
69
- "C:\Program Files (x86)\NSIS\makensis.exe",
70
- "C:\Program Files (x86)\NSIS\Bin\makensis.exe"
71
- ) | Where-Object { Test-Path -LiteralPath $_ } | Select-Object -First 1
72
-
73
- if ($makensis) {
74
- & $makensis `
75
- "/DVERSION=$Version" `
76
- "/DAPP_SOURCE=$app" `
77
- "/DOUT_FILE=$setupExe" `
78
- (Join-Path $Root "installer\regen-mde.nsi")
79
- if ($LASTEXITCODE -ne 0) {
80
- throw "NSIS installer build failed with exit code $LASTEXITCODE"
81
- }
82
- if (-not (Test-Path -LiteralPath $setupExe)) {
83
- throw "Installer exe was not created: $setupExe"
84
- }
85
- Write-Host "Packaged $setupExe"
86
- } else {
87
- Write-Warning "NSIS makensis.exe was not found; skipped setup EXE package."
88
- }
89
-
90
- Write-Host "Packaged $zip"
1
+ [CmdletBinding()]
2
+ param(
3
+ [string]$Root = "",
4
+ [string]$Version = ""
5
+ )
6
+
7
+ $ErrorActionPreference = "Stop"
8
+
9
+ if ([string]::IsNullOrWhiteSpace($Root)) {
10
+ $Root = (Resolve-Path (Join-Path $PSScriptRoot "..")).Path
11
+ }
12
+
13
+ if ([string]::IsNullOrWhiteSpace($Version)) {
14
+ $pkg = Get-Content -Raw -LiteralPath (Join-Path $Root "package.json") | ConvertFrom-Json
15
+ $Version = $pkg.version
16
+ }
17
+
18
+ $releaseRoot = Join-Path $Root "dist\release"
19
+ $stage = Join-Path $releaseRoot "regen-mde-$Version-win-x64"
20
+ $app = Join-Path $stage "app"
21
+ $zip = Join-Path $releaseRoot "regen-mde-$Version-win-x64.zip"
22
+ $setupExe = Join-Path $releaseRoot "regen-mde-$Version-win-x64-setup.exe"
23
+
24
+ Remove-Item -LiteralPath $stage -Recurse -Force -ErrorAction SilentlyContinue
25
+ Remove-Item -LiteralPath $zip -Force -ErrorAction SilentlyContinue
26
+ Remove-Item -LiteralPath $setupExe -Force -ErrorAction SilentlyContinue
27
+ New-Item -ItemType Directory -Force -Path $app | Out-Null
28
+
29
+ Copy-Item -Path (Join-Path $Root "dist\windows-editor\*") -Destination $app -Recurse -Force
30
+ Remove-Item -LiteralPath (Join-Path $app "BuildCorpusEditor.exe.WebView2") -Recurse -Force -ErrorAction SilentlyContinue
31
+ Copy-Item -LiteralPath (Join-Path $Root "bin") -Destination $app -Recurse -Force
32
+ Copy-Item -LiteralPath (Join-Path $Root "src") -Destination $app -Recurse -Force
33
+ Copy-Item -LiteralPath (Join-Path $Root "requirements.txt") -Destination $app -Force
34
+ Copy-Item -LiteralPath (Join-Path $Root "pyproject.toml") -Destination $app -Force
35
+ Copy-Item -LiteralPath (Join-Path $Root "package.json") -Destination $app -Force
36
+ Copy-Item -LiteralPath (Join-Path $Root "package-lock.json") -Destination $app -Force
37
+
38
+ Copy-Item -LiteralPath (Join-Path $Root "installer\install-regen-mde.ps1") -Destination $stage -Force
39
+
40
+ $readme = @"
41
+ regen-mde for Windows
42
+ =====================
43
+
44
+ Install:
45
+ Right-click install-regen-mde.ps1 and choose "Run with PowerShell"
46
+
47
+ After install:
48
+ Open the Windows Start menu and search for "regen-mde".
49
+ Right-click .md or .docx files and choose "Open in regen-mde".
50
+ Use "Uninstall regen-mde" from the Start menu to remove the app and shell verbs.
51
+
52
+ Requirements:
53
+ Windows with Microsoft Edge WebView2 runtime
54
+ Node.js on PATH
55
+ Python 3 on PATH with the Build Corpus Python requirements installed
56
+
57
+ The installer copies the app to:
58
+ %LOCALAPPDATA%\Programs\regen-mde
59
+ "@
60
+ Set-Content -LiteralPath (Join-Path $stage "README-INSTALL.txt") -Value $readme -Encoding UTF8
61
+
62
+ Compress-Archive -Path (Join-Path $stage "*") -DestinationPath $zip -Force
63
+
64
+ if (-not (Test-Path -LiteralPath $zip)) {
65
+ throw "Package zip was not created: $zip"
66
+ }
67
+
68
+ $makensis = @(
69
+ "C:\Program Files (x86)\NSIS\makensis.exe",
70
+ "C:\Program Files (x86)\NSIS\Bin\makensis.exe"
71
+ ) | Where-Object { Test-Path -LiteralPath $_ } | Select-Object -First 1
72
+
73
+ if ($makensis) {
74
+ & $makensis `
75
+ "/DVERSION=$Version" `
76
+ "/DAPP_SOURCE=$app" `
77
+ "/DOUT_FILE=$setupExe" `
78
+ (Join-Path $Root "installer\regen-mde.nsi")
79
+ if ($LASTEXITCODE -ne 0) {
80
+ throw "NSIS installer build failed with exit code $LASTEXITCODE"
81
+ }
82
+ if (-not (Test-Path -LiteralPath $setupExe)) {
83
+ throw "Installer exe was not created: $setupExe"
84
+ }
85
+ Write-Host "Packaged $setupExe"
86
+ } else {
87
+ Write-Warning "NSIS makensis.exe was not found; skipped setup EXE package."
88
+ }
89
+
90
+ Write-Host "Packaged $zip"
@@ -1,28 +1,28 @@
1
- param(
2
- [Parameter(Mandatory=$true)]
3
- [string]$Source,
4
-
5
- [string]$Out = ".tmp\corpus",
6
-
7
- [ValidateSet("assets", "base64", "s3")]
8
- [string]$Images = "assets",
9
-
10
- [string]$Config = ""
11
- )
12
-
13
- $ErrorActionPreference = "Stop"
14
- $root = Split-Path -Parent $PSScriptRoot
15
- $buildCorpus = Join-Path $root "bin\build-corpus.js"
16
- $katex = Join-Path $root "bin\validate-katex.js"
17
- $assetValidator = Join-Path $root "src\build_corpus\validate_assets.py"
18
-
19
- $args = @($buildCorpus, $Source, "--out", $Out, "--images", $Images)
20
- if ($Config) {
21
- $args += @("--config", $Config)
22
- }
23
-
24
- node @args
25
- node $katex $Out | Set-Content -Path (Join-Path $Out "katex-report.json") -Encoding UTF8
26
- py -3 $assetValidator $Out | Set-Content -Path (Join-Path $Out "asset-report.json") -Encoding UTF8
27
-
28
- Write-Host "Corpus test passed: $Out"
1
+ param(
2
+ [Parameter(Mandatory=$true)]
3
+ [string]$Source,
4
+
5
+ [string]$Out = ".tmp\corpus",
6
+
7
+ [ValidateSet("assets", "base64", "s3")]
8
+ [string]$Images = "assets",
9
+
10
+ [string]$Config = ""
11
+ )
12
+
13
+ $ErrorActionPreference = "Stop"
14
+ $root = Split-Path -Parent $PSScriptRoot
15
+ $buildCorpus = Join-Path $root "bin\build-corpus.js"
16
+ $katex = Join-Path $root "bin\validate-katex.js"
17
+ $assetValidator = Join-Path $root "src\build_corpus\validate_assets.py"
18
+
19
+ $args = @($buildCorpus, $Source, "--out", $Out, "--images", $Images)
20
+ if ($Config) {
21
+ $args += @("--config", $Config)
22
+ }
23
+
24
+ node @args
25
+ node $katex $Out | Set-Content -Path (Join-Path $Out "katex-report.json") -Encoding UTF8
26
+ py -3 $assetValidator $Out | Set-Content -Path (Join-Path $Out "asset-report.json") -Encoding UTF8
27
+
28
+ Write-Host "Corpus test passed: $Out"