mirror of
https://forge.chapril.org/tykayn/book_generator
synced 2025-06-20 01:34:43 +02:00
138 lines
3.5 KiB
JavaScript
138 lines
3.5 KiB
JavaScript
![]() |
(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("org", function () {
|
||
|
return {
|
||
|
startState: function () {
|
||
|
return {
|
||
|
inComment: false,
|
||
|
inBlock: false,
|
||
|
blockType: null
|
||
|
};
|
||
|
},
|
||
|
|
||
|
token: function (stream, state) {
|
||
|
// Gestion des commentaires en ligne
|
||
|
if (stream.match(/^# /)) {
|
||
|
stream.skipToEnd();
|
||
|
return "comment";
|
||
|
}
|
||
|
|
||
|
// Gestion des lignes de paramètres
|
||
|
if (stream.match(/^:PROPERTIES:|^:END:|^:ID:|^#\+[A-Z_]+:/)) {
|
||
|
stream.skipToEnd();
|
||
|
return "comment";
|
||
|
}
|
||
|
|
||
|
// Gestion des paramètres d'export
|
||
|
if (stream.match(/^:title|^:author|^:email|^:language|^:encoding|^:subject|^:description|^:keywords|^:cover/)) {
|
||
|
stream.skipToEnd();
|
||
|
return "comment";
|
||
|
}
|
||
|
|
||
|
// Gestion des blocs de commentaires
|
||
|
if (stream.match(/^#\+begin_comment/)) {
|
||
|
state.inComment = true;
|
||
|
return "comment";
|
||
|
}
|
||
|
|
||
|
if (state.inComment && stream.match(/^#\+end_comment/)) {
|
||
|
state.inComment = false;
|
||
|
return "comment";
|
||
|
}
|
||
|
|
||
|
if (state.inComment) {
|
||
|
stream.skipToEnd();
|
||
|
return "comment";
|
||
|
}
|
||
|
|
||
|
// Gestion des blocs de code
|
||
|
if (stream.match(/^#\+BEGIN_SRC/)) {
|
||
|
state.inBlock = true;
|
||
|
state.blockType = "src";
|
||
|
return "keyword";
|
||
|
}
|
||
|
|
||
|
if (stream.match(/^#\+BEGIN_QUOTE/)) {
|
||
|
state.inBlock = true;
|
||
|
state.blockType = "quote";
|
||
|
return "keyword";
|
||
|
}
|
||
|
|
||
|
if (state.inBlock && stream.match(/^#\+END_(SRC|QUOTE)/)) {
|
||
|
state.inBlock = false;
|
||
|
state.blockType = null;
|
||
|
return "keyword";
|
||
|
}
|
||
|
|
||
|
if (state.inBlock) {
|
||
|
stream.skipToEnd();
|
||
|
return state.blockType === "src" ? "string" : "quote";
|
||
|
}
|
||
|
|
||
|
// Gestion des titres
|
||
|
if (stream.match(/^\*+\s/)) {
|
||
|
const level = stream.current().length - 1;
|
||
|
stream.skipToEnd();
|
||
|
return `header-${level}`;
|
||
|
}
|
||
|
|
||
|
// Gestion des listes
|
||
|
if (stream.match(/^-\s/)) {
|
||
|
stream.skipToEnd();
|
||
|
return "list";
|
||
|
}
|
||
|
|
||
|
// Gestion des liens
|
||
|
if (stream.match(/\[\[(.*?)\]\]/)) {
|
||
|
return "link";
|
||
|
}
|
||
|
|
||
|
// Gestion des propriétés
|
||
|
if (stream.match(/^:PROPERTIES:/)) {
|
||
|
stream.skipToEnd();
|
||
|
return "property";
|
||
|
}
|
||
|
|
||
|
if (stream.match(/^:END:/)) {
|
||
|
stream.skipToEnd();
|
||
|
return "property";
|
||
|
}
|
||
|
|
||
|
// Gestion des tags
|
||
|
if (stream.match(/:[a-zA-Z0-9_@#%:]+:/)) {
|
||
|
return "tag";
|
||
|
}
|
||
|
|
||
|
// Gestion des dates
|
||
|
if (stream.match(/<\d{4}-\d{2}-\d{2}(?: \w+)?>/)) {
|
||
|
return "date";
|
||
|
}
|
||
|
|
||
|
// Gestion des mots-clés
|
||
|
if (stream.match(/^#\+[A-Z_]+:/)) {
|
||
|
stream.skipToEnd();
|
||
|
return "keyword";
|
||
|
}
|
||
|
|
||
|
// Gestion des nombres
|
||
|
if (stream.match(/\b\d+\b/)) {
|
||
|
return "number";
|
||
|
}
|
||
|
|
||
|
// Texte normal
|
||
|
stream.next();
|
||
|
return null;
|
||
|
}
|
||
|
};
|
||
|
});
|
||
|
|
||
|
CodeMirror.defineMIME("text/x-org", "org");
|
||
|
});
|