# 易承语言 ycIDE - 每日更新日志

## 2026年3月5日 - ycIDE开发测试V0.0.0.23

- **编译器核心功能实现**：
  - 实现易语言 `.关键字` 语法格式支持（`.子程序`, `.变量`, `.程序集`, `.版本` 等）
  - 生成窗口按钮点击事件处理代码（WM_COMMAND + BN_CLICKED）
  - 使用 TCC 弱符号机制，用户代码可覆盖默认空事件处理函数

- **修复词法分析器（Lexer）**：
  - 添加 `ScanDotKeyword()` 方法处理 `.子程序`, `.变量` 等带点前缀的关键字
  - `.版本` 和 `.程序集` 声明自动跳过（当作注释处理）
  - 修复零宽字符和冒号的过滤逻辑

- **修复语法分析器（Parser）**：
  - `ParseStatement()` 现在直接返回函数调用表达式节点，不再丢失数据
  - 支持空参数的函数调用（如 `信息框("内容", , , )`）

- **修复编辑器与编译器的文件读取冲突**：
  - 从编辑器读取源文件时，调用 `ConvertInternalToEPL()` 转换回 EPL 格式
  - 使用 `CreateFileW` + `FILE_SHARE_READ | FILE_SHARE_WRITE` 共享读取模式
  - 添加 `NormalizePath()` 统一路径分隔符（`\` 和 `/`）
  
- **完善了部分核心支持库**：


---

## 2026年3月4日 - ycIDE开发测试V0.0.0.22

- **可视化设计器双击跳转源代码功能**：
  - 双击窗口空白区域或控件，自动跳转到对应的 `.eyc` 源代码文件
  - 若 `.eyc` 文件不存在，自动创建并注册到项目，包含初始程序集和事件子程序
  - 控件类型自动推断默认事件名：普通控件为 `_被单击`，输入框为 `_内容改变`，列表框/组合框为 `_被选中`，双击窗体为 `_创建完毕`
  - 若目标子程序不存在，以表格格式追加到文件末尾，避免产生普通文本行

- **修复可视化设计器双击事件未响应**：
  - `VisualDesignerWndProc` 缺少 `WM_LBUTTONDBLCLK` 消息处理，导致双击消息直接落入 `DefWindowProc` 丢弃
  - 新增 `WM_LBUTTONDBLCLK` 分支，转发给 `pDesigner->OnLButtonDblClk()` 处理
  - 修复 修改窗口尺寸后运行时窗口尺寸没有变化和有控件运行后没看到控件的BUG

- **修复资源管理器拖动条悬停残留问题**：
  - 鼠标从资源管理器右侧拖动边框区域移出到编辑器后，蓝色高亮条不消失
  - 添加 `TrackMouseEvent(TME_LEAVE)` 鼠标追踪，监听 `WM_MOUSELEAVE` 事件
  - 鼠标离开资源管理器区域后自动清除 `isBorderHover` 状态并刷新绘制

---

## 2026年1月28日 - ycIDE开发测试V0.0.0.19

- **优化可视化设计器和组件箱的状态保存与恢复**：
  - 优化组件箱和可视化设计器的主题应用不立即刷新问题
  - 修复组件箱的保存状态

  ---

## 2026年1月27日 - ycIDE开发测试V0.0.0.18

- **改进新建项目向导**：
  - 支持选择项目模板（空项目、控制台应用、GUI应用）
  - 支持设置项目名称和保存路径
  - 创建项目时自动生成基本目录结构和初始文件

- **嵌套流程控制功能完善**：
  - 修复嵌套 `.如果()``.如果真()` 命令的流程线绘制，现在多层嵌套能正确显示
  - 优化嵌套标记格式：深度1使用 `\u200C`，深度2使用 `\u200C\u200B\u200C`，依此类推
  - 修正深度计算逻辑：通过统计 `\u200C/\u200D` 字符数量确定嵌套层级
  - 修复 `BuildNestingMarker()` 函数，生成正确格式的嵌套标记

- **Enter键行为修复**：
  - 修复在嵌套流程控制中按 Enter 键导致结构异常的问题
  - Enter 键和鼠标点击现在产生一致的格式化结果
  - 检测下一行是否已存在，避免重复创建行

- **嵌套缩进优化**：
  - 增加嵌套偏移量从 15 像素到 20 像素
  - 嵌套命令和流程线更加清晰地向右缩进
  - 每层嵌套偏移：深度1=20px，深度2=40px，深度3=60px...

- **代码质量改进**：
  - 添加调试日志功能 `LogFlowLine()` 便于问题追踪
  - 优化 `IsFlowControlLine()` 函数，正确跳过嵌套标记字符
  - 重构 `GetNestingDepth()` 函数，简化嵌套深度计算逻辑

---

## 2026年1月27日 - ycIDE开发测试V0.0.0.17

- **编译器模块初步实现**：
  - 新增 `Compiler.h` 和 `Compiler.cpp` 文件
  - 实现基础的编译器类 `Compiler`，包含编译入口函数 `Compile()` 和错误处理机制
  - 支持将源代码转换为中间表示（IR），为后续生成目标代码做准备
  - 实现简单的语义分析，检查变量声明和类型匹配


---

## 2026年1月26日 - ycIDE开发测试V0.0.0.16

### 面板边框拖动调整宽度功能

- 支持AI聊天窗口和资源管理器窗口左右交换
- 优化主题和支持主题文件加载

- **AI聊天面板边框拖动**：
  - 支持拖动边框调整AI面板宽度
  - 正常模式下拖动左边框，交换模式下拖动右边框
  - 鼠标悬停时显示蓝色高亮提示
  - 边缘5像素区域支持穿透到主窗口进行窗口缩放

- **资源管理器边框拖动**：
  - 支持拖动边框调整资源管理器宽度
  - 正常模式下拖动右边框，交换模式下拖动左边框
  - 鼠标悬停时显示蓝色高亮提示和调整光标

- **性能优化 - 消除拖动闪烁**：
  - 主窗口添加 `WS_CLIPCHILDREN` 样式，避免子窗口区域重绘
  - 新增 `WM_UPDATE_PANEL_LAYOUT` 自定义消息，面板拖动时只更新相关窗口
  - 标签栏添加 `WM_ERASEBKGND` 处理，阻止背景擦除闪烁
  - 使用 `LockWindowUpdate` 和 `SWP_NOCOPYBITS` 避免中间状态显示
  - 添加节流机制（约120fps）和 `PostMessage` 异步更新
  - 消息队列合并，丢弃重复的布局更新消息

- **其他改进**：
  - 修复坐标处理使用 `GET_X_LPARAM`/`GET_Y_LPARAM` 替代 `LOWORD`/`HIWORD`，解决负坐标溢出问题
  - 移除标签栏"没有打开的文件"提示
  - 面板交换按钮点击后正确刷新AI窗口显示

- **表格编辑器主题色支持**：
  - DllEditor（DLL命令编辑器）使用主题色替代硬编码RGB颜色
  - DataTypeEditor（数据类型编辑器）使用主题色替代硬编码RGB颜色
  - GlobalVarEditor（全局变量编辑器）使用主题色替代硬编码RGB颜色
  - 统一编辑器背景色、行号背景色、表头背景色、语法高亮色
  - 自动完成列表、滚动条、选择框颜色跟随主题变化

---

## 2026年1月23日 - ycIDE开发测试V0.0.0.15

### 语法检查功能 - 词法和语法分析器实现（基础框架完成）

- **词法分析器（Lexer）**：
  - 新增 `Lexer.h` 和 `Lexer.cpp` 文件
  - 实现Token类型定义：关键字、数据类型、标识符、字面量、运算符、分隔符等
  - 支持易语言特有语法：中文关键字、中文标识符、特殊运算符（×÷≠等）
  - 实现注释识别（单引号和双斜杠注释）
  - 支持字符串字面量和转义字符
  - 完整的数字识别（整数、小数、科学计数法）
  - 错误Token标记和错误信息提示
  - **动态加载支持**：从KeywordManager和LibraryParser获取关键字和命令（不再硬编码）

- **语法分析器（Parser）**：
  - 新增 `Parser.h` 和 `Parser.cpp` 文件
  - 定义AST（抽象语法树）节点类型：程序、声明、语句、表达式等
  - 实现递归下降解析器
  - 支持的语法结构：
    - 变量声明、常量声明
    - 子程序定义
    - 赋值语句、如果语句、循环语句（判断循环、计次循环）
    - 返回语句、跳出循环、继续循环
    - 运算符优先级处理（逻辑运算、比较运算、算术运算）
    - 函数调用、数组访问
  - 语法错误检测和错误恢复机制
  - 提供CheckSyntax接口用于快速语法检查

- **语法检查器（SyntaxChecker）**：
  - 新增 `SyntaxChecker.h` 和 `SyntaxChecker.cpp` 文件
  - 封装Lexer和Parser，提供简单易用的检查接口
  - 支持设置KeywordManager和LibraryParser作为数据源
  - 提供Check方法进行完整语法检查
  - 提供CheckLine方法进行单行快速检查
  - 支持获取Token列表用于语法高亮

- **编辑器集成（部分完成）**：
  - 在YiEditor.h中添加syntaxErrors字段和syntaxCheckEnabled标志
  - 在YiEditor.cpp中添加PerformSyntaxCheck函数
  - 初始化全局SyntaxChecker实例
  - EditorDocument默认启用语法检查
  - **待完成**：错误标记绘制、鼠标悬停提示、性能优化（详见语法检查集成说明.txt）

- **测试程序**：
  - 新增 `test_syntax.cpp` 测试程序
  - 包含词法分析器测试、语法分析器测试、语法检查测试
  - 可用于验证和调试语法检查功能

- **文档**：
  - 新增 `语法检查说明.md` 详细说明使用方法
  - 新增 `语法检查集成说明.txt` 说明待完成的集成工作

- **版本更新**：
  - 版本号更新至 V0.0.0.15

---

## 2026年1月23日 - ycIDE开发测试V0.0.0.14

### 项目年度总结与论坛推广

- **年度开发报告**：
  - 新增 `年度开发报告.md` 文件，用于论坛发帖提高项目曝光度
  - 总结2025年主要进展：编辑器核心模块、支持库移植、可视化设计器、AI辅助编程
  - 明确来年计划：语法检查、编译器、调试器、UI优化、支持库扩展、文档完善
  - 提供QQ群交流方式，增强社区互动

- **版本更新**：
  - 版本号更新至 V0.0.0.14

---

## 2026年1月19日 - ycIDE开发测试V0.0.0.13

### 可视化设计器多文档状态隔离与保存功能修复

- **多文档状态独立管理**：
  - 修复了多个窗口文件(.efw)之间属性互相影响的问题
  - TabBar切换标签时先保存旧标签状态(2002消息)，再加载新标签状态(2000消息)
  - 每个标签使用独立的FormInfo对象存储在TabBarData.editorData中
  - 切换标签时正确恢复各自的窗口属性、控件和选择状态

- **文件保存功能完善**：
  - 修复了ToJson/FromJson字段名不匹配导致的保存失败问题（统一使用name/title/width/height）
  - 修复了关闭标签弹窗中点击"保存"按钮不能保存VisualDesigner文件的问题
  - 添加了editorType==2的保存分支，正确调用VisualDesigner::SaveFile
  - 修复了保存后资源管理器文件修改标记不清除的问题
  - 在IDM_SAVE和关闭标签保存中添加ExplorerSetFileModified(filePath, false)调用

---

## 2026年1月18日 - ycIDE开发测试V0.0.0.12

### 文件修改状态通知机制优化

- **即时通知替代定时器轮询**：
  - 所有TableEditor子类（DataTypeEditor、GlobalVarEditor、DllEditor、ConstantEditor）现在使用 `SetModified(true)` 代替直接设置 `m_modified = true`
  - `SetModified` 方法在状态变化时自动调用 `NotifyModified()` 向主窗口发送通知
  - VisualDesigner（可视化设计器）也添加了相同的通知机制
  - 移除了DllEditor中重复的手动SendMessage通知代码

### TAB键导航功能

- **表格编辑器TAB键行为修复**：
  - TAB键现在移动焦点到下一个可编辑单元格，而不是插入制表符
  - Shift+TAB移动到上一个可编辑单元格
  - 自动跳过复选框列（通过 `IsCellTextEditable` 虚方法判断）
  - 到达行末自动跳到下一行第一个可编辑列

- **为所有编辑器添加 `IsCellTextEditable` 实现**：
  - ConstantEditor：col==3（公开）不可编辑
  - GlobalVarEditor：col==3（公开）不可编辑
  - DataTypeEditor：数据类型行col==1、成员行col==2/3不可编辑
  - DllEditor：命令行col==2、参数行col==2/3不可编辑

### 标签页关闭逻辑修复

- **修复关闭标签后编辑器不切换的问题**：
  - 关闭一个标签后，如果还有其他标签，现在会自动切换到新的活动标签对应的编辑器
  - TabBar::CloseTab 在删除标签后发送 WM_COMMAND(2000) 通知主窗口切换

---

## 2026年1月18日 - ycIDE开发测试V0.0.0.11

### GlobalVarEditor（全局变量编辑器）已基本完善

- **多选功能优化**：
  - 点击单元格自动清除多选状态
  - Delete键支持批量删除多选的行（从后往前删除避免索引错乱）
  - 行号区域点击立即选择该行
  - 拖动选择多行支持

- **回车键插入新行**：
  - 任意行按回车都能在当前行下方插入新行（修复之前只能在最后一行插入的问题）
  - 编辑模式和非编辑模式下都可使用
  - 支持选中多行时在最后一行后插入

- **Backspace键修复**：
  - 修复编辑模式下Backspace无法删除文字的问题

- **变量名自动命名**：
  - 插入新变量时自动生成不重复的变量名（新变量、新变量1、新变量2...）
  - 新变量默认不公开

### 编辑器光标统一优化

- **所有编辑器光标宽度统一为1像素**：
  - GlobalVarEditor光标从2像素改为1像素
  - TableEditor光标从2像素改为1像素
  - YiEditor（源代码编辑器）光标从2像素改为1像素
  - DataTypeEditor、DllEditor已经是1像素保持不变

---

## 2026年1月17日 - ycIDE开发测试V0.0.0.10

### DataTypeEditor（自定义数据类型编辑器）已基本完善

- **单元格编辑功能修复**：
  - 修复成员名左边距过大问题（移除多余缩进）
  - 点击单元格时光标定位到点击位置（使用GDI+测量文本宽度计算）
  - 修复无法输入文字问题（添加SetFocus焦点设置）

- **展开/收缩功能**：
  - 点击行号区域的折叠按钮（-/+）可展开或收缩数据类型的成员列表
  - 折叠状态正确保存和恢复

- **多行选择功能**：
  - 点击行号区域可选中整行
  - 支持拖动选择多行（从行号区域开始拖动）
  - 支持从表格右侧空白区域开始拖动选择
  - 支持从数据行下方的完全空白区域开始拖动选择
  - 选中行显示半透明蓝色高亮
  - 行号区域显示镜像光标（水平翻转的箭头）
  - 点击非行号区域自动清除行选择

---

## 2026年1月15日 - ycIDE开发测试V0.0.0.9

### YiEditor（代码编辑器）数据类型补全功能

- **数据类型补全**：
  - 新增了数据类型的补全
  - 支持拼音首字母匹配（如输入"zsx"匹配"整数型"）
  - 补全窗口支持键盘导航（上下方向键、Enter/Tab/空格确认、Escape取消）
  - 支持鼠标点击选择和滚轮滚动

- **表格行智能识别**：
  - 只有表格中的数据类型列（第2列）触发数据类型补全
  - 其他列（命令名、参数名、备注等）保持手动输入，不弹出补全窗口
  - 普通代码行使用命令补全，不触发数据类型补全

- **数据类型从支持库加载**：
  - 数据类型不再硬编码，改为从FNE支持库动态加载
  - FneParser扩展支持解析LIB_DATA_TYPE_INFO结构
  - LibraryParser提供GetAllDataTypeNames()统一获取所有数据类型
  - 包含基础数据类型（整数型、文本型等）和支持库自定义数据类型

- **资源管理器**：
  - 修复了资源管理器的文件名显示emoji为方框问题

---

## 2026年1月12日

### DllEditor（DLL声明编辑器）已基本完善

- **快捷键支持**：
  - Ctrl+N 新建DLL命令
  - Ctrl+S 保存文件
  - Ctrl+X 剪切
  - Ctrl+C 复制
  - Ctrl+V 粘贴

- **自绘右键菜单**：
  - 完全自绘的深色主题右键菜单，不使用系统菜单API
  - 支持鼠标悬停高亮、键盘导航（上下方向键、Enter、Escape）
  - 菜单项：新建DLL命令、剪切、复制、粘贴、删除、全选
  - 根据选择状态动态启用/禁用菜单项

- **Ctrl+N 新建DLL命令**：
  - 自动生成唯一命令名（DLL命令1、DLL命令2...）
  - 在末尾添加新的空白DLL命令表格

- **复制功能改进**：
  - 复制输出易语言标准格式代码
  - 智能判断选中内容：
    - 只选中参数数据行时，仅复制参数代码（`.参数 参数名, 类型`）
    - 选中其他行时，复制完整DLL命令代码（`.DLL命令 命令名, 返回值类型, "库文件", "DLL命令名"`）
  - 跳过间隔行，避免复制多余内容

- **粘贴功能改进**：
  - 智能识别剪贴板内容类型：
    - `.DLL命令` 格式：在当前命令后插入新表格
    - `.参数` 格式：添加参数到当前命令的参数列表
    - 纯文本：粘贴到当前编辑的单元格（自动移除换行符）
  - 编辑状态和非编辑状态均可正常粘贴

- **展开/收缩功能完成**：
  - 支持DLL命令的展开和收缩

- **行号的计算修正为使用真实的行号**：
  - 行号的计算修正为使用真实的行号

---

## 2026年1月5日

### EllEditor（DLL声明编辑器）功能完善



---

## 2026年1月4日

### 流程控制参数行重构
- **参数行标记系统重构**：
  - 移除条件行概念，流程控制的条件统一作为参数行处理
  - 使用特殊Unicode字符标记不同行类型：
    - `\u200C` (ZWNJ): 条件达成分支行
    - `\u200D` (ZWJ): 否则分支行
    - `\u2060` (WJ): 参数行
  - 替换原有的空格数量判定方式，避免误判

- **参数行存储格式优化**：
  - 参数行格式改为 `\u2060参数名:参数值`，使用冒号分隔参数名和值
  - 显示格式为 `※参数名：参数值`

- **参数值同步功能**：
  - 参数行输入时自动同步到命令行括号内
  - 支持多参数，用逗号分隔显示
  - 字符输入、退格、Delete删除都会触发同步

- **参数行编辑保护**：
  - 光标只能定位到冒号后面（参数值区域）
  - 禁止删除或修改参数名部分
  - 方向键移动时自动跳过保护区域
  - Home键定位到冒号后而非行首

- **流程线绘制修复**：
  - 修复展开参数行后流程线缩回命令行的问题
  - 流程线正确延伸到参数行之后

- **使用易语言的系统核心支持库改造为我们使用的unicode和64位支持库**：
  - 已经可以引用.fne的64位支持库了
  - 命令已经全面改为从支持库加载
---

## 2025年12月30日

### 上午
- 欢迎页功能：
  - 程序启动时显示欢迎页（标题"ycIDE"、副标题"易承语言集成开发环境"）
  - 欢迎页显示三个快捷链接：新建文件、打开文件、打开文件夹
  - 关闭所有标签页后自动显示欢迎页

- 侧边栏切换功能：
  - 标题栏菜单右侧添加AI图标按钮
  - 点击可隐藏/显示左侧AI聊天面板
  - 隐藏时图标显示半透明，显示时正常亮度

- 标题栏优化：
  - 修复最小化/最大化/关闭按钮悬停背景在鼠标离开后不消失的问题

- 关键词系统优化：
  - 移除Keyword.cpp中的硬编码关键词，全部从支持库加载

- 支持库配置优化：
  - 支持库加载失败时自动取消选中状态并保存配置
  - .lib静态库文件自动取消选中（无法动态加载）

- 修复窗口尺寸无法调整BUG

---

## 2025年12月26日

### 下午
- 重点实验性兼容易语言支持库
  - 已实现易语言支持库的加载和命令匹配功能
  - 由于易语言的支持库是32位的所以暂时只能是32位调用，64位不可用，需要将支持库改造成64位的才能在64位下使用
- 智能命令匹配系统：
  - 实现拼音模糊匹配：支持全拼、首字母、多音字（如"tiaoshi"或"diao"均可匹配"调试"）
  - 智能排序算法：根据匹配精确度排序（中文完全匹配 > 别名 > 全拼 > 首字母 > 前缀 > 包含）
  - 长度惩罚机制：优先匹配名称更短、更精确的命令
- 支持库配置持久化：
  - 程序启动自动加载上次配置的支持库
  - 配置窗口自动同步已加载状态

- 架构优化：
  - 新增 `PinyinHelper` 模块处理汉字转拼音
  - 优化 `LibraryConfigManager` 配置管理逻辑

### 上午
- 流程控制展开/折叠功能：
  - 行号右侧显示+/-符号控制条件行的展开/折叠（加粗显示，扩大点击区域58-72像素）
  - 展开时在流程控制命令下方插入条件输入行，显示为"      ※条件："
  - 条件行与命令行括号内容双向同步
  - 条件行前绘制虚线连接到流程控制命令的括号位置
  - 流程控制命令底部绘制向上的实心三角形箭头
- 流程线绘制优化：
  - 展开条件行后流程线正确跳过条件行，绘制在条件达成区最后一行
  - 条件行使用零宽空格标记（`\u200B `），被识别为流程控制区内容
  - 流程线自动延伸到条件行
- 条件行交互优化：
  - 光标只能定位在"※条件："右侧，左侧不可点击
  - 条件文本位置根据流程命令长度动态调整，确保虚线可见
- 命令自动补全增强：
  - 去掉补全列表中的拼音括号显示，只显示中文关键字
  - 支持拼音首字母匹配（输入"r"匹配"如果"、"如果真"等）
  - 支持英文关键字匹配（输入"return"显示"返回 (return)"）
  - 1个字符即可触发补全（原来需要2个）



### 已知问题
- 无

---

## 2025年12月25日

### 上午
- 流程控制命令支持：实现流程控制命令自动补全和流程线绘制
  - `.如果真()`命令自动创建2行结构（缩进行、保护空行）
  - 流程控制内容自动缩进（使用单空格标记，渲染时固定20像素偏移）
- 流程控制区块保护：流程控制区块后的普通空行不可删除
  - DELETE/BACKSPACE键智能处理：优先删除流程控制内的最后一行
  - 空缩进行自动删除整行，有内容的行删除最后字符并移动光标
- 缩进行交互优化：
  - TAB键在流程控制内插入单空格，普通代码插入4空格，表格插入制表符
  - 鼠标点击缩进行正确定位光标到文本位置（而非行首）
  - 回车保持缩进状态
- 输入法支持：输入法候选窗口跟随光标位置显示（不再显示在屏幕左上角）
- 光标位置修正：缩进行光标计算使用固定20像素偏移，与文本对齐
- `.如果真结束`命令处理：
  - 编辑器内部不显示此命令
  - 复制到外部时自动在流程控制结束位置插入`.如果真结束`
  - 从外部粘贴时自动过滤掉`.如果真结束`命令
- 多选删除修复：修复多选文本后按删除键只删除部分内容的问题

### 已知问题
- 流程线绘制需要进一步完善

---

## 2025年12月24日

### 编辑器核心
- 鼠标拖动选择优化：添加3像素阈值，避免单击误触发选择
- 行号区域功能：鼠标悬停显示右箭头光标，单击/拖动选中整行
- 表格选中优化：跨行选择普通代码时正确删除，表格跨单元格选择保护结构
- 删除功能增强：删除所有数据行后自动删除对应表头（参数表/变量表）
- 程序集保护：程序集区域外不允许输入普通代码，只能添加子程序
- 命令输入提示：比如输入 ru 弹出跟 ru 相关的命令比如 '如果' 和 '如果真'

### 自动补全
- AI停止功能：流式输出期间可随时中断
- 光标初始化：程序启动时不显示光标，首次点击后显示
- 鼠标指针：编辑区I型光标、标签/滚动条/按钮箭头光标

### 已知问题


---

## 历史更新

<details>
<summary>2025年12月23日及之前</summary>

- 基础编辑器框架
- 表格渲染系统
- 关键词自动补全
- AI聊天集成

</details>

---

**项目状态**：活跃开发中 | **最近更新**：2026年1月17日

