所以我最近刚刚进入codemirror,因为我需要一个文本编辑器为我的网站,但这意味着我不知道有关程序。我让编辑工作在javascript模式下,但我需要为编辑器创建一些语法,我相信这意味着我必须为编辑器创建一个模式,并且在执行此操作时遇到问题。我已经阅读了几次手册,但是没有点击我,可能是因为我从来没有用过这样的东西。无论如何,我只需要通过创建简单的加,减,乘函数来获得它的挂起。如果有人能让我滚动,我会非常感激。Codemirror如何创建一个模式
2
A
回答
3
首先,你确定你需要一个新的模式?您是否试图支持一些自定义的DSL语法,而这些语法尚未由许多内置模式之一提供?
Manual在这方面的信息有一个很好的开始。它提到了使用simple mode addon作为声明性方法的简单情况。它讨论了使用的CodeMirror.defineMode
创建一个新的模式,并提到了发展模式token(stream, state)
最重要的功能:
接受一个字符流作为输入,促进它的过去的令牌,并返回一个样式,一个功能令牌。
本手册还提供了两个示例模式来查看。对于非常简单的模式,建议使用diff,对于更复杂的模式clike。只需查看模式目录中的可用模式,以查看您是否只能修改现有模式以满足您的需求。
仅供参考,我会包括以下的比较模式在线:
// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE
(function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS
mod(require("../../lib/codemirror"));
else if (typeof define == "function" && define.amd) // AMD
define(["../../lib/codemirror"], mod);
else // Plain browser env
mod(CodeMirror);
})(function(CodeMirror) {
"use strict";
CodeMirror.defineMode("diff", function() {
var TOKEN_NAMES = {
'+': 'positive',
'-': 'negative',
'@': 'meta'
};
return {
token: function(stream) {
var tw_pos = stream.string.search(/[\t ]+?$/);
if (!stream.sol() || tw_pos === 0) {
stream.skipToEnd();
return ("error " + (
TOKEN_NAMES[stream.string.charAt(0)] || '')).replace(/ $/, '');
}
var token_name = TOKEN_NAMES[stream.peek()] || stream.skipToEnd();
if (tw_pos === -1) {
stream.skipToEnd();
} else {
stream.pos = tw_pos;
}
return token_name;
}
};
});
CodeMirror.defineMIME("text/x-diff", "diff");
});
这是一个非常简单的模式甚至不包含任何状态信息(因而不包括第二个参数去'令牌'方法)。
我希望这会有所帮助。
相关问题
- 1. Markdown模式codemirror创建
- 2. 如何用Raphaeljs创建一个模式?
- 3. 如何为preg_match_all创建一个模式
- 4. 多种模式Codemirror
- 5. 如何从一个类(函数)创建一个猫鼬模式
- 6. 如何在symfony2中创建一个唯一的路由模式
- 7. 如何为这个xml创建一个xsd模式?
- 8. 如何使用一个或多个StructType创建模式(StructType)Spark
- 9. 如何创建一个pam模块?
- 10. 你如何创建一个Perl模块?
- 11. 如何创建一个Zend_Db_Table模型
- 12. 如何创建一个模态JDialog?
- 13. 如何创建一个宝石模块?
- 14. 如何创建一个模态窗口
- 15. 如何创建一个内嵌模块
- 16. 如何创建一个Play模块?
- 17. 如何创建一个登录模块
- 18. 如何创建一个模块[qpython3]
- 19. 创建一个简单的PDF模式
- 20. 第一个模式 - 无法创建PDF
- 21. phpStorm - 创建一个模板格式
- 22. 创建一个名为'master'的模式
- 23. 如何杀死一个CodeMirror实例?
- 24. 如何在CodeMirror中编写一个提示内部DSL的新模式?
- 25. 如何创建一个可以为属性值创建模式的LdapUserDetailsMapper?
- 26. 如何创建一个飞镖形式
- 27. 如何创建一个ASPX形式
- 28. 如何在PHP中创建一个xml对象的模式?
- 29. 我将如何创建一个JavaScript上传模式框?
- 30. 如何在makefile的模式规则中创建一个例外?
很多很棒的信息,唯一需要注意的是为什么简单模式与差异模式看起来如此不同? – Markus
**差异**模式**是从简单模式开始。 **简单模式addon **是一种更通用的工具模式,允许您使用声明格式创建模式,因此它的通用性足以支持您可能遇到的一些简单模式,而无需编写自己的模式。插件不像从头开始编写自己的模式那样灵活,这就是** diff **模式,尽管它是一种非常简单的模式。 –
非常感谢,我仍然对如何开展这项工作感到失望,但这只是因为这对我来说都是如此的新鲜,但是您绝对会把我放在正确的道路上 – Markus