Skip to content

Commit e6bba74

Browse files
committed
feat: 升级至 v0.021,修复跳转 404 及导入交互,提升编译引擎人性化
1 parent 322e85e commit e6bba74

52 files changed

Lines changed: 3535 additions & 47 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,15 @@ HiCode(简称 **HC**)的诞生源于一个朴素的愿望:**让编程真
3030

3131
## 当前版本
3232

33-
- **v0.02(网页端在线开发)**:支持 `it` 变量(含中文名)、`in` 分级展示(`t / s / b / link / p`)、`if / orif / noif` 条件、四则运算表达式、`to / fr` 页面跳转,可实时转译为网页并导出 `.hc` / `.html` / `.zip`
34-
- **历史版本**:v0.01 已归档至仓库 `old/v0.01/`,用户仍可访问旧版预览版
33+
- **v0.021(网页端在线开发)**:支持 `it` 变量(含中文名)、`in` 分级展示(`t / s / b / link / p`)、`if / orif / noif` 条件、四则运算表达式、`to / fr` 页面跳转,可实时转译为网页并导出 `.hc` / `.html` / `.zip`。v0.021 进一步支持单等号 `=` 比较与全角/数学运算符(+ - × ÷ ≥ ≤ ≠ 等),并修复项目内页面跳转与导入交互
34+
- **历史版本**:v0.01、v0.02 均已归档至 `old/`,可在 [历史版本索引](https://HiCodeHC.github.io/old/) 中集中访问
3535

3636
## 官网
3737

3838
- 官网地址:**[https://HiCodeHC.github.io](https://HiCodeHC.github.io)**
3939
- 网页端体验:**[https://HiCodeHC.github.io/ide/](https://HiCodeHC.github.io/ide/)**
4040
- 学习中心:**[https://HiCodeHC.github.io/learn/](https://HiCodeHC.github.io/learn/)**
41-
- 历史版本 v0.01**[https://HiCodeHC.github.io/old/v0.01/](https://HiCodeHC.github.io/old/v0.01/)**
41+
- 历史版本索引**[https://HiCodeHC.github.io/old/](https://HiCodeHC.github.io/old/)**
4242

4343
## 联系与建议
4444

ide/css/style.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* ============================================================
2-
* HC v0.02 在线 IDE 样式 —— 浅色液态玻璃风格
2+
* HC v0.021 在线 IDE 样式 —— 浅色液态玻璃风格
33
* ============================================================ */
44
:root {
55
--bg: #f3eee6;

ide/index.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<head>
44
<meta charset="UTF-8" />
55
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
6-
<title>HiCode · 在线开发环境 v0.02</title>
6+
<title>HiCode · 在线开发环境 v0.021</title>
77
<link rel="icon" href="../assets/hicode-logo.jpg" type="image/jpeg" />
88
<link rel="stylesheet" href="css/style.css" />
99
</head>
@@ -13,7 +13,7 @@
1313
<div class="brand" id="btnHome" title="返回首页">
1414
<span class="logo-dot"></span>
1515
<span class="brand-name">HiCode</span>
16-
<span class="ver">v0.02 · 网页端</span>
16+
<span class="ver">v0.021 · 网页端</span>
1717
</div>
1818
<div class="crumb" id="crumb" title="当前文件"></div>
1919
<div class="actions">
@@ -99,7 +99,7 @@
9999
<div class="home-logo"><span class="logo-dot lg"></span></div>
100100
<h1>HiCode <span class="dim">· HIC 语言在线开发</span></h1>
101101
<p class="home-sub">自研 HIC 语言一键转译为 HTML,零基础也能搭建网页项目。</p>
102-
<p class="home-sub small">v0.02 为代码开发版本,新增中文变量名、四则运算、展示样式分级与链接;支持项目 / 页面管理、条件、导向、实时转译与导出。</p>
102+
<p class="home-sub small">v0.021 为代码开发版本,新增中文变量名、四则运算、展示样式分级与链接;支持项目 / 页面管理、条件、导向、实时转译与导出。</p>
103103
<div class="home-actions">
104104
<button id="homeNew" class="btn solid big">新建项目</button>
105105
<button id="homeImport" class="btn ghost big">导入项目 .hc</button>

ide/js/app.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* ============================================================
2-
* HC v0.02 在线 IDE —— 界面逻辑 app.js
2+
* HC v0.021 在线 IDE —— 界面逻辑 app.js
33
* 依赖:Store (store.js) + HC (hic.js)
44
* 职责:首页引导、项目/页面 CRUD、代码编辑、实时转译预览、
55
* 变量面板(含 p 图片上传)、导出菜单。
@@ -57,6 +57,7 @@
5757
el.modalBody.innerHTML = body;
5858
$("modalCancel").textContent = "确定";
5959
$("modalOk").classList.add("hidden");
60+
$("modalCancel").onclick = function () { el.modal.classList.add("hidden"); };
6061
el.modal.classList.remove("hidden");
6162
}
6263
// 通用确认/输入弹窗,返回 Promise
@@ -193,9 +194,9 @@
193194

194195
/* ---- 实时转译 ---- */
195196
function liveHtml() {
196-
const proj = currentProj(); const pg = currentPage();
197-
if (!proj || !pg) return "<p>请先打开一个页面</p>";
198-
try { return HC.buildSinglePageHtml(proj, pg); }
197+
const proj = currentProj();
198+
if (!proj) return "<p>请先打开一个页面</p>";
199+
try { return HC.buildProjectMergedHtml(proj, {}); }
199200
catch (e) { return "<pre>转译出错:" + esc(e.message) + "</pre>"; }
200201
}
201202
function doLive() {

ide/js/hic.js

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* ============================================================
2-
* HC v0.02 —— HIC 语言引擎
2+
* HC v0.021 —— HIC 语言引擎
33
* 负责:HIC 词法/语法解析、HIC→HTML 转译、轻量 ZIP 写入、下载
44
* 说明:本文件为纯逻辑,不依赖 DOM(localStorage/document),
55
* 唯一例外是 download()(仅浏览器调用);可用 Node 单元测试。
@@ -11,7 +11,7 @@
1111
})(typeof self !== 'undefined' ? self : null, function () {
1212
"use strict";
1313

14-
const APP = { version: "v0.02", name: "HiCode", lang: "HIC" };
14+
const APP = { version: "v0.021", name: "HiCode", lang: "HIC" };
1515

1616
/* ---------------- 工具 ---------------- */
1717
function esc(s) {
@@ -25,19 +25,28 @@
2525
const NAME_RE = new RegExp("^[" + ID_START + "][" + ID_CHAR + "]*$");
2626
function isName(s) { return NAME_RE.test(String(s || "")); }
2727
const PY_TYPES = ["int", "float", "str", "bool", "list", "dict", "tuple"];
28+
// 全角/数学符号运算符 → 半角等价(人性化编译:兼容中文输入法全角符号、≥ ≤ ≠ 等)
29+
const FULLWIDTH_OPS = {
30+
"\uFF0B": "+", "\uFF0D": "-", "\u2212": "-", "\u00D7": "*", "\u00F7": "/", "\uFF05": "%", // + - − × ÷ %
31+
"\uFF1D": "==", "\uFF1C": "<", "\uFF1E": ">", // = < >
32+
"\u2265": ">=", "\u2264": "<=", "\u2260": "!=", // ≥ ≤ ≠
33+
"\uFF08": "(", "\uFF09": ")" // ( )
34+
};
2835

2936
/* ---------------- 词法:表达式求值(安全,无 eval) ---------------- */
3037
function tokenize(expr) {
3138
const out = []; let i = 0; const n = expr.length;
3239
while (i < n) {
3340
const c = expr[i];
34-
if (c === " " || c === "\t") { i++; continue; }
41+
if (c === " " || c === "\t" || c === "\u3000") { i++; continue; }
42+
if (FULLWIDTH_OPS[c]) { out.push({ t: FULLWIDTH_OPS[c], v: FULLWIDTH_OPS[c] }); i++; continue; }
3543
if (c === "(") { out.push({ t: "(", v: c }); i++; continue; }
3644
if (c === ")") { out.push({ t: ")", v: c }); i++; continue; }
3745
if ("+-*/%".indexOf(c) >= 0) { out.push({ t: c, v: c }); i++; continue; }
3846
const two = expr.substr(i, 2);
3947
if (two === "==" || two === "!=" || two === "<=" || two === ">=") { out.push({ t: two, v: two }); i += 2; continue; }
4048
if (c === "<" || c === ">") { out.push({ t: c, v: c }); i++; continue; }
49+
if (c === "=") { out.push({ t: "==", v: "==" }); i++; continue; }
4150
if (c === '"' || c === "'") {
4251
const q = c; let j = i + 1, s = "";
4352
while (j < n && expr[j] !== q) { s += expr[j]; j++; }
@@ -409,10 +418,14 @@
409418
if (!it.cross) {
410419
// 同项目内:目标页面在同项目
411420
const targetPage = it.toPage;
412-
if (ctx.mode === "zip" || ctx.mode === "singlepage") {
421+
if (ctx.mode === "zip") {
413422
const fn = ctx.projSlug + "-" + slugify(targetPage) + ".html";
414423
return { href: fn, label: targetPage };
415424
}
425+
if (ctx.mode === "singlepage") {
426+
// 单页导出不含其它页面,禁用跳转,避免生成不存在的 .html 造成 404
427+
return { kind: "disabled" };
428+
}
416429
// 合并单 html:跳转同文档内区块
417430
const key = ctx.projSlug + "::" + targetPage;
418431
return { href: "#" + key, sameDoc: true, pageKey: key, label: targetPage };

ide/js/store.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* ============================================================
2-
* HC v0.02 —— 数据层 store.js
2+
* HC v0.021 —— 数据层 store.js
33
* 职责:
44
* 1) 项目 / 页面 CRUD,localStorage 本地持久化
55
* 2) 首次零项目引导判定(hasAnyProject / lastActive)
@@ -21,7 +21,7 @@
2121
"use strict";
2222

2323
const KEY = "HICODE_DATA";
24-
const STORE_VERSION = "v0.02";
24+
const STORE_VERSION = "v0.021";
2525

2626
function uuid() {
2727
return "h" + Date.now().toString(36) + Math.random().toString(36).slice(2, 8);

ide/test/hic.test.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ ok(/<!DOCTYPE html>/i.test(merged), "含 HTML 骨架");
7676

7777
const single = HC.buildSinglePageHtml({ name: "我的项目" }, page);
7878
ok(single.indexOf("你好,HiCode") >= 0 || single.indexOf("简单上手") >= 0, "单页html含内容");
79+
ok(single.indexOf("我的项目-about.html") < 0 && single.indexOf("导出包内暂未包含") >= 0, "单页导出禁用跳转避免404");
7980

8081
// ---- 8. ZIP ----
8182
const entries = HC.buildZipEntries([proj]);
@@ -134,5 +135,20 @@ const built = HC.buildSinglePageHtml({ name: "demo" }, p2);
134135
ok(built.indexOf('class="hic-href"') >= 0, "链接渲染含 hic-href");
135136
ok(built.indexOf("hic-sub") >= 0, "副标题渲染含 hic-sub");
136137

138+
// ---- 12. v0.021 人性化编译:单等号 + 全角/数学运算符 ----
139+
ok(HC.evalExpr("age = 18", { age: { value: 18 } }) === true, "单等号 = 当作 == 比较");
140+
ok(HC.evalExpr("age = 19", { age: { value: 18 } }) === false, "单等号 = 比较为假");
141+
ok(HC.evalExpr("2 \uFF0B 3", {}) === 5, "全角加 +");
142+
ok(HC.evalExpr("6 \u00F7 2", {}) === 3, "除号 ÷");
143+
ok(HC.evalExpr("3 \u00D7 4", {}) === 12, "乘号 ×");
144+
ok(HC.evalExpr("10 \uFF0D 4", {}) === 6, "全角减 -");
145+
ok(HC.evalExpr("10 \u2212 4", {}) === 6, "数学减号 −");
146+
ok(HC.evalExpr("10 \uFF05 3", {}) === 1, "全角百分号 %");
147+
ok(HC.evalExpr("3 \u2265 3", {}) === true, "≥ 当作 >=");
148+
ok(HC.evalExpr("2 \u2264 3", {}) === true, "≤ 当作 <=");
149+
ok(HC.evalExpr("2 \u2260 3", {}) === true, "≠ 当作 !=");
150+
ok(HC.evalExpr("\uFF082 \uFF0B 3\uFF09\u00D7 4", {}) === 20, "全角括号与混合运算符");
151+
ok(HC.evalExpr("年龄 = 18", { "年龄": { value: 18 } }) === true, "中文变量 + 单等号");
152+
137153
console.log("\n通过 " + pass + " 项,失败 " + fail + " 项");
138154
process.exit(fail ? 1 : 0);

ide/test/runner.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<html lang="zh-CN">
33
<head><meta charset="UTF-8"><title>HC 引擎浏览器测试</title></head>
44
<body style="font-family:monospace;background:#14110d;color:#e8ddc8;padding:20px;line-height:1.7">
5-
<h3 style="color:#d9ae6b">HC v0.02 引擎浏览器测试</h3>
5+
<h3 style="color:#d9ae6b">HC v0.021 引擎浏览器测试</h3>
66
<pre id="out">运行中...</pre>
77
<script src="../js/hic.js"></script>
88
<script>

index.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ <h1 data-reveal>打造属于每个人的<br /><span class="accent">一站式编
216216
<a class="btn secondary" href="ide/">网页端体验</a>
217217
<a class="btn secondary" href="learn/">学习中心</a>
218218
</div>
219-
<div class="hint" data-reveal>网页端 v0.02 已开放 · 学习中心已同步 · 下载即将上线 · 项目开源可用 · <a href="old/v0.01/">历史版本 v0.01</a></div>
219+
<div class="hint" data-reveal>网页端 v0.021 已开放 · 学习中心已同步 · 下载即将上线 · 项目开源可用 · <a href="old/">历史版本</a></div>
220220
</div>
221221
</section>
222222

@@ -303,7 +303,7 @@ <h2>常见问题</h2>
303303
<p>关于 HiCode 你可能有这些疑问。</p>
304304
</div>
305305
<div class="faq-list stagger-box">
306-
<details class="faq glass"><summary>HiCode 现在可以下载使用吗?<span class="pl">+</span></summary><div class="a">网页端 v0.02 已开放,可直接在线编写 HIC 代码、实时转译为网页并导出;桌面 / 移动端下载渠道仍在规划中,正式发布后我们会第一时间公布。你也可前往 <a href="old/v0.01/">历史版本 v0.01</a> 查看此前的预览版。</div></details>
306+
<details class="faq glass"><summary>HiCode 现在可以下载使用吗?<span class="pl">+</span></summary><div class="a">网页端 v0.021 已开放,可直接在线编写 HIC 代码、实时转译为网页并导出;桌面 / 移动端下载渠道仍在规划中,正式发布后我们会第一时间公布。你也可前往 <a href="old/">历史版本</a> 查看此前的预览版。</div></details>
307307
<details class="faq glass"><summary>完全没有编程基础,真的能上手吗?<span class="pl">+</span></summary><div class="a">这正是 HiCode 的设计目标:用图形化界面创建前端、用接近自然的简易代码编写后端,尽量降低技术门槛,让小白也能迈出第一步。</div></details>
308308
<details class="faq glass"><summary>HiCode 是免费使用的吗?是否开源?<span class="pl">+</span></summary><div class="a">是的,HiCode 以开源方式发布,遵循相应的开源许可协议。我们会坚持开放、可自由使用与二次开发的原则。</div></details>
309309
<details class="faq glass"><summary>支持哪些开发平台?<span class="pl">+</span></summary><div class="a">我们规划支持网页、安卓(WebView)与 Windows 三大平台,一次编写、多端运行。具体支持程度以最终发布为准。</div></details>
@@ -335,7 +335,7 @@ <h4>项目</h4>
335335
<ul>
336336
<li><a href="https://github.com/HiCodeHC/HiCodeHC.github.io" target="_blank" rel="noopener">GitHub 仓库</a></li>
337337
<li><a href="#">开源许可证</a></li>
338-
<li><a href="old/v0.01/">历史版本 v0.01</a></li>
338+
<li><a href="old/">历史版本</a></li>
339339
<li><a href="#">参与共建</a></li>
340340
</ul>
341341
</div>

learn/examples/ch01-overview.hc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"app": "HiCode",
33
"language": "HIC",
44
"format": "hc-project",
5-
"version": "v0.02",
5+
"version": "v0.021",
66
"project": {
77
"id": "ch01-overview.hc",
88
"name": "第01章 认识 HIC",
@@ -12,7 +12,7 @@
1212
"p1": {
1313
"id": "p1",
1414
"name": "首页",
15-
"code": "it 标题 t 你好,欢迎来到 HIC\nit 副标题 t 这是 v0.02 新增的副标题样式\nit 正文 t 这是正文样式,适合写较长的说明文字,会自动左对齐并换行。\n\n标题 in t\n副标题 in s\n正文 in b",
15+
"code": "it 标题 t 你好,欢迎来到 HIC\nit 副标题 t 这是 v0.021 新增的副标题样式\nit 正文 t 这是正文样式,适合写较长的说明文字,会自动左对齐并换行。\n\n标题 in t\n副标题 in s\n正文 in b",
1616
"images": {}
1717
}
1818
}

0 commit comments

Comments
 (0)