文学起点网
当前位置: 首页 文学百科

手工代码编辑器(一键生成通用高亮代码块到剪贴板)

时间:2023-05-26 作者: 小编 阅读量: 7 栏目名: 文学百科

有些在线图文编辑器不支持直接插入代码块,但可以直接粘贴HTML格式的高亮代码块。花了一点时间研究了一下各家的编辑器,规则却各不相同。有的要求代码块被包含于<code>...</code>或者<pre><code>...</code></pre>,有些要求class属性里包含"code"关键词,或者要求代码块里必须包含至少一个<br>。如果不符合这些要求,不是变成普通文本,就是丢失换行缩进,或者丢失颜色样式。因为浏览器操作系统剪贴板可能不太方便,下面用aardio写一个工具软件。

有些在线图文编辑器不支持直接插入代码块,但可以直接粘贴 HTML 格式的高亮代码块。

花了一点时间研究了一下各家的编辑器,规则却各不相同。有的要求代码块被包含于 <code> ... </code> 或者 <pre> <code> ... </code> </pre> , 有些要求 class 属性里包含 "code" 关键词,或者要求代码块里必须包含至少一个 <br> 。如果不符合这些要求,不是变成普通文本,就是丢失换行缩进,或者丢失颜色样式。

所以,这就难了。先得找个支持代码高亮的编辑器,仔细地选择并复制代码块,复制完还得编辑剪贴板里的 HTML 。这就不如干脆写个转换工具了。

因为浏览器操作系统剪贴板可能不太方便,下面用 aardio 写一个工具软件。

先看软件成品演示:

软件用法:

1、输入编程语言名称(支持自动完成)。

2、然后在输入框中粘贴要转换的编程代码。

3、点击「复制高亮代码块」按钮。

然后我们就可以打开在线图文编辑器直接粘贴生成的高亮代码块了。

下面是这个软件的 aardio 源代码:

import win.ui;/*DSG{{*/var winform = win.form(text="HTML 代码块生成工具 - 本工具使用 aardio 语言编写";right=1055;bottom=674;bgcolor=16777215)winform.add(button={cls="button";text="复制高亮代码块";left=633;top=609;right=1000;bottom=665;bgcolor=16777215;color=14120960;db=1;dr=1;font=LOGFONT(h=-14);note="可在网页编辑器直接粘贴";z=4};cmbLangs={cls="combobox";left=262;top=625;right=446;bottom=651;db=1;dl=1;edge=1;items={"javascript"};mode="dropdown";z=2};editCode={cls="edit";left=1;top=4;right=1052;bottom=599;db=1;dl=1;dr=1;dt=1;edge=1;hscroll=1;multiline=1;vscroll=1;z=5};static={cls="static";text="请选择语言:";left=70;top=629;right=248;bottom=649;align="right";db=1;dl=1;transparent=1;z=3};webCtrl={cls="custom";text="自定义控件";left=8;top=10;right=1048;bottom=604;db=1;dl=1;dr=1;dt=1;hide=1;z=1})/*}}*/import web.view;var wb = web.view(winform.webCtrl);import win.clip.html;wb.export({onHighlight = function(html,background,foreground){html = `<preConsolas", Consolas, "Liberation Mono", Menlo, Courier, monospace"><code>`html`</code></pre>`;html,count = string.replace(html,'\n',"<br>");if(!count){html = string.replace(html,`\</code\>\</pre\>$`,`<br></code></pre>`);}var cb = win.clip.html();cb.write(html);winform.setTimeout(function(){winform.editCode.show(true);winform.webCtrl.show(false);winform.text = "HTML 代码块生成工具 - 已复制高亮代码块到剪贴板,可在网页直接粘贴";},1000);};setLanguages = function(langs){winform.languages = langs;}})winform.cmbLangs.onEditChange = function(){var text = string.lower(winform.cmbLangs.text);var items = table.filter( winform.languages : {}, lambda(v) string.startWith(v,text) );winform.cmbLangs.autoComplete(items);}winform.cmbLangs.editBox.disableInputMethod();import web.prism;import wsock.tcp.asynHttpServer;var httpServer = wsock.tcp.asynHttpServer(); httpServer.run(web.prism,{["/index.html"] = /*****<!DOCTYPE html><html><head><meta charset="UTF-8" /><link href="prism.css" rel="stylesheet" /></head><body><pre ><code></code></pre><script src="prism.js"></script><script>function computedColorStyle(element, options = {}) {Array.prototype.forEach.call(element.children,child => {computedColorStyle(child, options);});const computedStyle = getComputedStyle(element);element.style["color"] = computedStyle.getPropertyValue("color");}highlight = function(code,language){var html = Prism.highlight(code, Prism.languages[language], language);var codeEle = document.getElementById("code");codeEle.innerHTML = html;computedColorStyle(codeEle);const computedStyle = getComputedStyle(codeEle);onHighlight(codeEle.innerHTML,getComputedStyle(document.getElementById("code-pre")).getPropertyValue("background-color"),computedStyle.getPropertyValue("color"));}setLanguages( Object.keys(Prism.languages) );</script></body> </html>*****/});wb.go( httpServer.getUrl("/index.html"));winform.button.oncommand = function(id,event){winform.text = "HTML 代码块生成工具 - 本工具使用 aardio 语言编写"winform.editCode.show(false);winform.webCtrl.show(true);wb.xcall("highlight",winform.editCode.text,winform.cmbLangs.text);}winform.show();win.loopMessage();

打开 aardio 创建工程,然后复制粘贴上面的代码到 main.aardio 里面就可以直接运行,或生成独立 EXE 文件:

这个软件的原理:

1、首先通过 WebView2 调用 Prism.js 高亮代码。为了可以内存加载 Prism.js ( 支持生成独立 EXE ),我写了一个 aardio 扩展库 web.prism 。关于 WebView2 请参考:放弃 Electron,拥抱 WebView2!JavaScript 快速开发独立 EXE 程序

2、因为 Prism.js 生成的 HTML 代码块都是使用 class 属性指定样式,所以我们需要调用 getComputedStyle 获取最终渲染的字体颜色属性。

3、最后在 JavaScript 里调用 aardio 函数处理生成的 HTML 代码块,aardio 的任务是将 HTML 修改为更合适直接粘贴的格式,并尽可能地处理各图文编辑器的兼容问题。然后调用 win.clip.html 将处理好的 HTML 复制到系统剪贴板:

import win.clip.html;var cb = win.clip.html();cb.write(html);

然后只要愉快地粘贴代码块就可以。

如果是 aardio 代码不需要用这个工具,在 aardio 编辑器里右键直接点『 复制全部到 HTML 代码块 』就可以了:

    推荐阅读
  • 卖火柴的小女孩主要讲了什么(卖火柴的小女孩讲述的是什么)

    卖火柴的小女孩主要讲了什么它讲述的是一个在圣诞夜卖火柴的小女孩的悲惨命运。因为没有卖掉一根火柴,小女孩一天没有吃东西。创作背景:1845年10月,安徒生再次访问意大利。在圣诞节即将到来的时候,格洛斯顿城的朋友们再三邀请安徒生去那里过圣诞节。安徒生兴冲冲地坐上了去格洛斯顿的马车。安徒生的马车在格洛斯顿的街道上缓缓前进,他要体会一下城市里的圣诞节气氛。安徒生回去以后就写了《卖火柴的小女孩》。

  • 芹菜炒木耳大白菜(钙含量是牛奶的3倍)

    韭菜炒豆芽的做法,就是这么简单,掌握好技巧,口感能提升不少,如果你认为韭菜炒豆芽的做法还不错,欢迎收藏起来学着做,或者是分享给更多的人学习!

  • 雅典为什么会繁华(同属希腊地区的雅典和斯巴达)

    古希腊城邦奴隶制得到如此广泛推行为日后城邦时代社会经济的发展以及各行各业的繁荣提供了重要条件。这也使得希腊城邦的奴隶制经济得到了空前规模的发展,尤其是在以雅典和斯巴达两大城邦的代表下,古希腊城邦时代迎来了其奴隶制社会经济发展的黄金时代。雅典型的奴隶制经济代表着古希腊城邦时代奴隶制社会发展的整体面貌,而斯巴达型的奴隶制经济只是局限于那些经济较为落后的城邦当中。

  • 电饭锅腊肠饭做法(电饭锅腊肠饭最简单的做法介绍)

    下面希望有你要的答案,我们一起来看看吧!电饭锅腊肠饭做法主料是腊肠、米,辅料是胡萝卜、玉米、葱、盐、鸡粉。先把材料准备好,大米洗净,腊肠切丁,玉米粒胡萝卜切丁,备用。电饭锅内放少许油,依照顺序放入胡萝卜,玉米腊肠,加入盐,鸡粉,酱油翻炒片刻,接着放入米,水量和平常一样,按下开关煮饭就可以了。开关跳了后,撒上些香葱,加入些酱油调味拌匀即可出锅。

  • 地笼放什么饵料(地笼的介绍)

    下面内容希望能帮助到你,我们来一起看看吧!地笼放什么饵料地笼里面放的饵料比较好的:大骨头稍微有一点点肉屑。还有红虫但数量要多一些。还可以鸡鸭骨头等等腥味越大越好。地笼是中原地区的业余或专业捕鳝或泥鳅,河虾小鱼等的工具。地笼的长度可依据养殖水面的长度、宽度而定,一般为15节左右,总长约7~8米。材质为塑料纤维。地笼有很多入口,但内部构造比较复杂,鱼类进去后就很难出来。

  • 卡路里最低的食物排行(卡路里最低的食物有哪些)

    卡路里最低的食物排行芝麻菜。芝麻菜在日常生活中是比较常见,不仅含有低热量低脂肪和低胆固醇,而且高纤维和大量的维生素A,K,C以及其它丰富的营养。西兰花低热量、丰富维生素、大量矿物质及抗氧化剂,可降低各种癌变的发生率。绿豆芽热量较低,水分和膳食纤维较高。西红柿果实营养丰富,具特殊风味。

  • 新买的内衣有很大的味道怎么回事 新买的内衣有很大的味道怎么回事呀

    不少女性朋友可能有这样的困扰,新买的内衣挂在内衣店里没有异味,可是拿回家洗一遍之后却散发出很大的味道。内衣长期挤压产生味道新买的内衣从生产到购买经过了较长的时间,而在此期间内衣被长时间闷在包装袋里面或者是长时间受到挤压,这也容易使内衣在包装袋中产生很大的味道。

  • 修车最容易被更换的零件(更换下来的旧件哪些可以卖掉)

    可以最大程度上降低我们的损失呢?第4个零部件就是发动机以及空调压缩机了,相信我们都应该知道,车辆当中最为贵重的零部件就是发电机,所以如果我们的车辆出现问题时,发电机也能够卖到一个非常好的价钱。但前提是一定要经过维修之后还可以再次使用的,才能够进行售卖,如果没有维修价值了的话,也只能够是当废铁卖掉。

  • 孕妇晚期腰痛可以按摩吗(孕妇腰酸可以按摩缓解吗)

    孕妇腰酸可以按摩缓解吗孕期随着腹中胎儿越长越大,身体会变得笨重,由于重心前移,增大的子宫压迫脊柱导致背部肌肉紧张,可能就会引起腰酸背痛,这主要是一个生理性的表现怀孕期间运动量太少,体重明显的增加,怀孕的时候身体里面的激素水。

  • qq隐藏图标的方法(操作步骤)

    qq隐藏图标的方法我们打开QQ软件,输入账号密码登录,进入主界面后,点击个人头像,鼠标移到头像上,会出现浮动框,能看到当前使用的应用图标。确定上述操作后,重新查看自己的个人资料,图标已经隐藏成功,操作完以上步骤后,你的QQ好友就看不到你的手机QQ图标了。我们还可以打开QQ,点击最左侧的选项之后选择设置选项,在系统设置中点击登录选项,在主面板中选择在任务栏通知区域显示QQ图标的对勾去掉即可。