如何使用ACE编辑器突出显示代码
How can I highlight code with ACE editor?
我想在语法上突出显示十几个小代码片段,然后通过单击ACE编辑器使其可编辑,因为我认为这比为每个片段设置完整的编辑器要快得多。我看到有一个简单的命令来设置ACE编辑器:
<div id="editor">some text</div>
<script src="src/ace.js" type="text/javascript" charset="utf-8"></script>
<script>
window.onload = function() {
var editor = ace.edit("editor");
};
</script>
有没有一种简单的方法可以调用API来在不设置编辑器的情况下突出显示文本?理想的API将接收一些文本并返回带有可用于突出显示的标记的HTML。我知道JavaScript有专门的高亮显示库,但我想尝试对正在显示的文本和正在编辑的文本使用相同的高亮显示。
突出显示单词:
var range = new Range(rowStart, columnStart, rowEnd, columnEnd);
var marker = editor.getSession().addMarker(range,"ace_selected_word", "text");
删除突出显示的单词:
editor.getSession().removeMarker(marker);
突出显示行:
editor.getSession().addMarker(range,"ace_active_line","background");
首先,您需要将行号声明为全局变量。
var erroneousLine;
这是highlightError函数,它将行号(lineNumber
)作为参数。其可以由错误消息触发或者使用editor.selection.getCursor().row
来获得当前行或者其他什么。
function highlightError(lineNumber) {
unhighlightError();
var Range = ace.require("ace/range").Range
erroneousLine = editor.session.addMarker(new Range(lineNumber, 0, lineNumber, 144), "errorHighlight", "fullLine");
}
请注意,我已经声明了一个errorHighlight
,这就是突出显示的方式。在css中放置以下内容:
.errorHighlight{
position:absolute;
z-index:20;
background-color:#F4B9B7;
}
此功能取消高亮显示已高亮显示的行
function unhighlightError(){
editor.getSession().removeMarker(erroneousLine);
}
有一个服务器端版本的highlighter(运行在node.js中)可用,它可能很容易移植到基于web的javascript。
一个想法:
function highlightSyntax(text) {
var res = [];
var Tokenizer = ace.require('ace/tokenizer').Tokenizer;
var Rules = ace.require('ace/mode/sql_highlight_rules').SqlHighlightRules;
var Text = ace.require('ace/layer/text').Text;
var tok = new Tokenizer(new Rules().getRules());
var lines = text.split(''n');
lines.forEach(function(line) {
var renderedTokens = [];
var tokens = tok.getLineTokens(line);
if (tokens && tokens.tokens.length) {
new Text(document.createElement('div')).$renderSimpleLine(renderedTokens, tokens.tokens);
}
res.push('<div class="ace_line">' + renderedTokens.join('') + '</div>');
});
return '<div class="ace_editor ace-tomorrow"><div class="ace_layer" style="position: static;">' + res.join('') + '</div></div>';
}
这个函数应该在给定的文本中突出显示SQL语法(明天的王牌主题),而不加载整个编辑器,也不使用槽。
我认为这已经很晚了,但我仍然会写,以防它能帮助其他人。
我最终在typescript中创建了一个简单的函数,它可以找到要突出显示的范围的坐标,并滚动到它:
highlighText(text: string) {
const value = this.aceEditor.session.getValue();
const startRow = value.substr(0, value.indexOf(text)).split(/'r'n|'r|'n/).length - 1;
const startCol = this.aceEditor.session.getLine(startRow).indexOf(text);
const endRowOffset = text.split(/'r'n|'r|'n/).length;
const endRow = startRow + endRowOffset - 1;
const endCollOffset = text.split(/'r'n|'r|'n/)[endRowOffset - 1].length;
const endCol = startCol + (endCollOffset > 1 ? endCollOffset + 1 : endCollOffset);
const range = new ace.Range(startRow, startCol, endRow, endCol);
this.aceEditor.session.selection.setRange(range);
this.aceEditor.scrollToLine(startRow, true, true, () => {});
}
相关文章:
- 从桌面读取python文件时高亮显示代码
- I'我试图在网页中添加一个javascript小片段,但它只是在页面上显示代码
- 扰流板显示代码
- 如何在AngularJS应用程序中显示代码块
- 使用 JavaScript 突出显示代码示例中的语法
- HTML 在服务器上运行时在 jQuery 中显示代码而不是字符
- 以编程方式显示代码中的弹出是否弹出
- 谷歌地图API:显示代码中的鼠标悬停窗口
- 悬停并显示代码
- JavaScript显示代码而不是运行
- 如何使用ACE编辑器突出显示代码
- 在CKEditor上显示代码,删除abbr标签
- 解析标记为HTML并突出显示代码语法
- 托管JS文件而不显示代码
- 如何在带有“节”的输出中显示代码编辑器HTML;页面滚动从html
- 我的javascript显示代码有个奇怪的bug
- 为什么JavaScript警告消息不工作?无法显示代码错误
- Jquery beautyofCode显示代码行从一个字符串
- 如何让用户张贴代码片段使用反引号和显示代码使用谷歌代码预置
- Chrome扩展:注入Javascript显示代码,而不是输出