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的更多相关文章

  1. 我发起了一个 ILBC 的 子项目 EScript

    ILBC  见 <ILBC 规范>  https://www.cnblogs.com/KSongKing/p/10354824.html 今天装了个 VsCode , 听说 VsCode ...

  2. 我发起并创立了一个 VMBC 的 子项目 D#

    大家好, 我发起并创立了一个 VMBC 的 子项目 D#  . 有关 VMBC ,  请参考 <我发起了一个 用 C 语言 作为 中间语言 的 编译器 项目 VMBC>     https ...

  3. 我发起了一个 用 C# 写 的 浏览器 开源项目 HtmlCore

    我之前还发起过一个 项目, 名字也叫 HtmlCore, 见 <我发起了一个 .Net 开源 跨平台 GUI (界面开发框架)项目 HtmlCore>  https://www.cnblo ...

  4. 我发起了一个 支持 ServerFul 架构 的 .Net 开源项目 ServerFulManager

    大家好,  我发起了一个 支持 ServerFul 架构 的 .Net 开源项目 ServerFulManager . ServerFulManager 的 目标 是 实现一个 支持 ServerFu ...

  5. 我发起了一个 .Net 开源 跨平台 GUI (界面开发框架)项目 HtmlCore

    大家好 , 我发起了一个 .Net 开源 跨平台 GUI (界面开发框架)项目 , 名字叫 HtmlCore  . 项目的一个主要目标是可以用 .Net 在 移动设备 上 开发 GUI 程序 (界面程 ...

  6. 我发起了一个 .Net 平台上的 NewSql 数据库 BabanaDB

    发起这个项目的起因, 是偶然看到一个网友发的 MongoDB 的 新闻, 我想, 像  MongoDB  这样的 非关系数据库 ,随时 都可以写 很多个, 真正 难写 的 是  关系数据库, 非关系数 ...

  7. 我发起了一个 .Net 平台上的 开源项目 知识图谱 Babana Map 和 文本文件搜索引擎 Babana Search

    起因 也是 前几天 有 网友 在 群 里发了   知识图谱   相关的文章, 还有 有 网友 问起   NLog -> LogStash -> Elastic Search  的 问题, ...

  8. 我发起了一个 .Net Core 平台上的 开源项目 ShadowDomain 用于 热更新

    大家好,  我发起了一个 .Net Core 平台上的 开源项目 ShadowDomain  用于 热更新 . 简单的说, 原理就是 类似 Asp.net 那样 让 当前 WebApp 运行在一个 A ...

  9. 我发起了一个 用 C 语言 作为 中间语言 的 编译器 项目 VMBC

    大家好 ,  我发起了一个 用 C 语言 作为 中间语言 的 编译器 项目 VMBC . VMBC ,  全称是 Virtual Machine Base on C  . 有一种说法 ,  C 语言是 ...

随机推荐

  1. UVa-156 Ananagrams(map映射)

    #include <iostream> #include <algorithm> #include <cmath> #include <cstdio> ...

  2. Windows 10 远程桌面出现身份验证错误:要求的函数不受支持(解决)

    爬梯子还是快一些,百度搜一年也搜不到~~~囧 给出原始地址,百度的某些解决方案不知道是不是截取过来搞错了还是啥,返回和原始方案就差一丢丢,浪费时间. https://windowsreport.com ...

  3. 2018工业信息安全技能大赛华东赛区初赛 第2题 writeup

    2018工业信息安全技能大赛华东赛区初赛 第2题 解题思路 本题主要考察点是对常见工控协议的理解(modbus/tcp和s7comm),题目目标是寻找出报文中某条异常报文流量.很让人疑惑的是,题目中并 ...

  4. API响应

    保证API响应的正确性,就是你需要做的大部分工作.postman的response viewer部分会协助你完成该工作且使其变得简单. 一个API的响应包含body,headers,响应状态码.pos ...

  5. vue路由的懒加载

    一.懒加载 也叫延迟加载或者按需加载,即在需要的时候进行加载,   二.为什么要使用懒加载 像vue这种单页面应用,如果没有应用懒加载,运用webpack打包后的文件将会异常的大,造成进入首页时,需要 ...

  6. 汉诺塔III

    题目描述: 约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下.由小到大顺序串着由64个圆盘构成的塔.目的是将最左边杆上的盘全部移到右边的杆上,条件是一次只能移动 ...

  7. php优秀框架codeigniter学习系列——CI_Controller分析

    该类是一个超级大的父类,它将在 CodeIgniter.php 中实例化化过的类,通通加载成它的类成员变量,所以可以方便的进行各种操作.各种应用控制器类,都会继承 CI_Controller 类. _ ...

  8. Holer实现外网访问ARM嵌入式Linux系统

    公网访问ARM嵌入式Linux系统 实验室里的ARM嵌入式Linux系统,只能在局域网内访问,怎样从公网也能访问内网ARM嵌入式Linux系统? 本文将介绍使用holer实现的具体步骤. 1. 准备工 ...

  9. soapUI的安装及破解

    1.下载安装包 SoapUI SoapUI-Pro-x64-5.1.2.exe Protection-4.6.jar scz.key 2.安装SoapUI-Pro-x64-5.1.2.exe 3.拷贝 ...

  10. python 列表、元组

    列表 List(列表) 是 Python 中使用最频繁的数据类型. 列表可以完成大多数集合类的数据结构实现.它支持字符,数字,字符串甚至可以包含列表(即嵌套). 列表用 [ ] 标识,是 python ...