我发起了一个 ILBC 的 子项目 ILBC Studio
ILBC 见 《ILBC 规范》 https://www.cnblogs.com/KSongKing/p/10354824.htm
发起这个项目的原因是, 本来想用 VsCode 来写 InnerC 的, InnerC 是一个 用 C 语言 写 C 语言 编译器 的 项目,
这就需要 用 VsCode 开发一个 C 语言 项目,
结果发现, 用 VsCode 开发 C 项目 还挺麻烦的, 需要自己配置这配置那,
所以, 我想 ILBC 需要开发一款 自己 的 IDE, 暂命名为 “ILBC Studio” 。
ILBC Studio 支持 ILBC 系列语言: InnerC , D# , c3 , EScript 等等 。
从 ILBC Studio 这个名字可以看出来, ILBC Studio 会沿袭 Visual Studio 风格, 比如 解决方案 (.sln), 项目文件 (.xxproj),
以及 解决方案 和 项目 架构,
当然, 内部实现 不一定 一样 。 比如 解决方案 和 项目文件 的 内部格式 不一定 一样, 我们会有 自己的 定义 。
但从 使用风格 和 使用习惯 上, 会是和 Visual Studio 相似的 。
ILBC Studio 基于 C# WinForm , Xilium.CefGlue , jWebForm 。
jWebForm 见 《我发起并创立了一个 Javascript 前端库 开源项目 jWebForm》 https://www.cnblogs.com/KSongKing/p/10326119.html ,
C# WinForm , Xilium.CefGlue , jWebForm 用于 开发 界面, 然后 再 加入 编译器 和 调试器 。
编译器 本身就是 ILBC 项目 的一部分, 也会 逐步开发 。
调试器 也是自己开发, 调试器 原理 初步可以 推断 由 操作系统 提供 专用 的 中断 来 支持 调试进程 。
为什么要用 .Net / C# WinForm 和 Cef (Chrome) + Js 来 开发界面 ?
.Net / C# 很好的 解决了 平台兼容性 问题, 如果用 C++ , 很可能在 Win 8 上能用, 在 Win 10 上有问题, 总之各种 奇奇怪怪 的 本地问题 。
比如 开发 的 时候 就可以看到, C++ 的 各种 奇奇怪怪 的 兼容包, 本地库 。 呵呵
而且 .Net / C# 简单 。
至于 Cef (Chrome) + js , 主要是 一方面 VsCode 就是用 Electron (Chrome + js) 开发的,
另一方面, 不知怎的, 用 js 开发 界面 感觉 很灵活 。
我以前也说过, 现在是 用 Js 可以写 Office 的 时代 。
而 浏览器(Chrome) 解决了 排版问题, 这是一个 基础问题, 是一个 大问题 。(“排版” 一词 由 网友 提供)
所以, 在 浏览器 上 开发 编辑界面 应该 是 有利 的 。
jWebForm 会 提供一个 EditArea 控件 来 实现 一个 编辑区域 功能, 可以编辑 文本 、 图片 等等 。
可以形象的把 EditArea 控件 称为 “小 Word” 。
项目地址: https://github.com/kelin-xycs/ILBC ,
目前实现了一个 简单的 文本编辑器 。
架构是 WinForm 里 运行 Cef, Cef 里 运行 Html + js, 主要功能 在 Html + js 里实现,
上传到 Github 的 只包含 源代码, 没有包含 Cef 的 组件文件, 所以需要先下载 Cef 组件文件 拷贝到 ILBCStudio 项目 的 bin\Debug 或者 bin\Release 目录下才能运行 。
之所以 不把 Cef 的 组件文件 上传到 Github, 是 因为 Cef 组件文件 太大, 有约 229 MB 。
下载方法:
到 http://opensource.spotify.com/cefbuilds/index.html#windows64_builds 这个网址 下载 Cef 组件包,
注意需要 下载 正确的 版本,
ILBC Studio 这一版本 使用的 Cef 是 Windows 64-bit , 版本 3.3626.1881.g628f810 , Standard Distribution 。
版本 3.3626.1881.g628f810 必须正确, 不然无法使用 。
可以在 CefGlue 项目 的 Interop\version.g.cs 文件 中 查看 CefGlue 使用的 Cef 组件版本 。
下载好 Cef 组件包 后, 解压, 把 解压内容 的 Release 目录 和 Resources 目录 中的 全部 文件 和 文件夹 拷贝 到 ILBCStudio 项目 的 bin\Debug 或者 bin\Release 目录下 就可以了 。
为了便于大家查看 演示效果, 我把 ILBCStudio 的 Debug 目录 打包 上传到 QQ 群 348041382 的 群文件 里, 加入 群 下载 ILBCStudio_Debug.zip ,
下载后解压, 解压后直接运行 ILBCStudio.exe 就可以看到效果了 。
Xilium.CefGlue 老的 项目地址: https://bitbucket.org/xilium/xilium.cefglue/wiki/Home ,
现在已 搬迁到 GitLab: https://gitlab.com/xiliumhq/chromiumembedded/cefglue 。
文本编辑器 是 用 Html 元素 把 contentEditable 设置为 true 的 方式 实现的,
但这样有一个 小问题 和 一个 大问题,
小问题 是 在用 Html 元素 的 innerText 取出 编辑 的 文本 时, 会多出一些 “\n”,
比如 敲了 2 个回车, 会有 3 个 “\n”,
敲了 3 个回车, 会有 5 个 “\n”,
敲了 4 个回车, 会有 7 个 “\n”,
敲了 5 个回车, 会有 9 个 “\n”,
以此类推 。
而且, Chrome 的 innerText 里 的 回车 是 “\n”, 不像 Windows 里是 “\r\n” 。
大问题 是 contentEditable = "true" 这种方式 的 优点 是 原生、效率高、简单省事,
但 对于 编译器 的 编辑界面 而言, 需要 对 源代码 文本 有一些 处理逻辑,
比如 关键字颜色, 成员颜色, 错误提示, 智能提示 等等 。
这些需要 对 源代码文本 逐字符 检索 和 某一段位置 的 字符 设定样式,
而 Html 元素 contentEditable = "true" 的这种方式 不太好 做这些操作, 因为 这种方式 把 上个回车 和 下个回车 之间的 文本 作为一个 段落,
是一个 div, 这个 段落 中 字体样式 不一样 的 文本 用 span 括起来, span 中 字体样式 不一样 的 文本 又再用 span 括起来, 如此嵌套 。
所以 可能 还是 需要 像 Vs Code 那样 用一个 每个字符 都是 一个 span 的 Js 写的 文本编辑器,
其实 我 前几天 就在 写 Js 的 文本编辑器, 把 之前 jlet 里的 docEditor 改为 jWebForm 控件, 名字叫 EditArea 。
不过 后来 发现 博客园 写博客 的 文本编辑器 TinyMCE 就是用 contentEditable = "true" 的 方式 实现的,
所以 就 改成用 contentEditable = "true" 的 方式 。
其实 contentEditable = "true" 方式 作为普通的 文本编辑器 很好 。
我接下来 会 继续 写 jWebForm 的 EditArea, 用于 ILBC Studio,
另外, 可能还需要在 jWebForm 里加入 对话框 控件, 因为 本来 在 这一版 ILBC Studio 中 还想做一个 “工具 -> 选项” 的 简单功能, 可以设置字体,
但是 听说 Chrome 不支持 ShowModalDialog() 了, So …… ,,
Chrome 大概是 提倡 “Web Desktop”,
在 jlet 中 有 对话框, 做一下修改 可以 作为 jWebForm 控件, 不过 这部分 先放后面 。
ILBC Studio 新版发布, 新版使用 jWebForm 的 EditArea 控件 作为 文本编辑器, 并且用 jWebForm 的 DragObj 控件 实现了 “工具 -> 选项” 对话框, 可以设置 字体 和 字体大小 。
我发起了一个 ILBC 的 子项目 ILBC Studio的更多相关文章
- 我发起了一个 ILBC 的 子项目 EScript
ILBC 见 <ILBC 规范> https://www.cnblogs.com/KSongKing/p/10354824.html 今天装了个 VsCode , 听说 VsCode ...
- 我发起并创立了一个 VMBC 的 子项目 D#
大家好, 我发起并创立了一个 VMBC 的 子项目 D# . 有关 VMBC , 请参考 <我发起了一个 用 C 语言 作为 中间语言 的 编译器 项目 VMBC> https ...
- 我发起了一个 用 C# 写 的 浏览器 开源项目 HtmlCore
我之前还发起过一个 项目, 名字也叫 HtmlCore, 见 <我发起了一个 .Net 开源 跨平台 GUI (界面开发框架)项目 HtmlCore> https://www.cnblo ...
- 我发起了一个 支持 ServerFul 架构 的 .Net 开源项目 ServerFulManager
大家好, 我发起了一个 支持 ServerFul 架构 的 .Net 开源项目 ServerFulManager . ServerFulManager 的 目标 是 实现一个 支持 ServerFu ...
- 我发起了一个 .Net 开源 跨平台 GUI (界面开发框架)项目 HtmlCore
大家好 , 我发起了一个 .Net 开源 跨平台 GUI (界面开发框架)项目 , 名字叫 HtmlCore . 项目的一个主要目标是可以用 .Net 在 移动设备 上 开发 GUI 程序 (界面程 ...
- 我发起了一个 .Net 平台上的 NewSql 数据库 BabanaDB
发起这个项目的起因, 是偶然看到一个网友发的 MongoDB 的 新闻, 我想, 像 MongoDB 这样的 非关系数据库 ,随时 都可以写 很多个, 真正 难写 的 是 关系数据库, 非关系数 ...
- 我发起了一个 .Net 平台上的 开源项目 知识图谱 Babana Map 和 文本文件搜索引擎 Babana Search
起因 也是 前几天 有 网友 在 群 里发了 知识图谱 相关的文章, 还有 有 网友 问起 NLog -> LogStash -> Elastic Search 的 问题, ...
- 我发起了一个 .Net Core 平台上的 开源项目 ShadowDomain 用于 热更新
大家好, 我发起了一个 .Net Core 平台上的 开源项目 ShadowDomain 用于 热更新 . 简单的说, 原理就是 类似 Asp.net 那样 让 当前 WebApp 运行在一个 A ...
- 我发起了一个 用 C 语言 作为 中间语言 的 编译器 项目 VMBC
大家好 , 我发起了一个 用 C 语言 作为 中间语言 的 编译器 项目 VMBC . VMBC , 全称是 Virtual Machine Base on C . 有一种说法 , C 语言是 ...
随机推荐
- oracle入门之对表数据查询(三)
oracle表复杂查询--子查询 什么是子查询? 子查询是指嵌入在其它sql语句中的select语句,也叫嵌套查询. 单行子查询 单行子查询是指只返回一行数据的子查询语句. 请思考:如果显示与smit ...
- Problem C: STL——Jerry的问题
Description 最近Jerry正在刻苦的学习STL中的set的功能函数,他发现set可以用现有的函数实现并.交.差.对称差等功能,但是他没有找到怎么来比较两个集合是否相等的功能函数,所以他想自 ...
- 最近在学习Flask框架,那么就说下jinja2吧~~~
jinja是组成Flask的模板引擎,先写一个demo吧 {% block body %} <ul> {% for user in users %} <li><a hre ...
- tcp的粘包现象与解决方案
粘包现象: 粘包1:连续的小包,会被优化机制给合并 粘包2:服务端一次性无法完全就收完客户端发送的数据,第二再次接收的时候,会接收到第一次遗留的内容 模拟一个粘包现象 服务端 import socke ...
- Java - Java入门(2-1am)
第一讲.Java入门 1. 计算机语言是人和计算机进行交互的一种工具,人们通过使用计算机语言编写程序来向计算机施令,计算机则执行程序,并把结果输出给用户. 2. 机器语言:由0.1序列构成的指令码组成 ...
- OVS常用命令与使用总结
说明 在平时使用ovs中,经常用到的ovs命令,参数,与举例总结,持续更新中… 进程启动 1.先准备ovs的工作目录,数据库存储路径等 mkdir -p /etc/openvswitch mkdir ...
- Python开发环境-Pyenv安装使用
安装使用-Pyenv 简单的python版本管理:pyenv 管理python解释器 管理python版本 管理python的虚拟环境 官网:https://github.com/pyenv/pyen ...
- Python学习第五堂课
Python学习第五堂课推荐电影:华尔街之狼 被拯救的姜哥 阿甘正传 辛德勒的名单 肖申克的救赎 上帝之城 焦土之城 绝美之城 #上节内容: 变量 if else 注释 # ""& ...
- SpringBoot实现跨域
一.什么是跨域请求? 跨域请求,就是说浏览器在执行脚本文件的ajax请求时,脚本文件所在的服务地址和请求的服务地址不一样.说白了就是ip.网络协议.端口都一样的时候,就是同一个域,否则就是跨域.这是由 ...
- CSS Sprites ——雪碧图的使用方法
首先解释下CSS Sprites是什么:有称CSS精灵,有称CSS雪碧的,无论叫什么,他的作用就是把网页上很多小图标放到一张图片里面,然后通过CSS里面的background-position来控制每 ...