所以我最近剛剛進入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