[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemacs-commit] qemacs makemode.c
From: |
Charlie Gordon |
Subject: |
[Qemacs-commit] qemacs makemode.c |
Date: |
Sun, 06 Mar 2016 18:03:26 +0000 |
CVSROOT: /sources/qemacs
Module name: qemacs
Changes by: Charlie Gordon <chqrlie> 16/03/06 18:03:25
Modified files:
. : makemode.c
Log message:
cmake: added colorizer for cmake files
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/qemacs/makemode.c?cvsroot=qemacs&r1=1.24&r2=1.25
Patches:
Index: makemode.c
===================================================================
RCS file: /sources/qemacs/qemacs/makemode.c,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -b -r1.24 -r1.25
--- makemode.c 5 Apr 2015 15:10:02 -0000 1.24
+++ makemode.c 6 Mar 2016 18:03:25 -0000 1.25
@@ -181,9 +181,104 @@
.colorize_func = makefile_colorize_line,
};
+enum {
+ CMAKE_STYLE_TEXT = QE_STYLE_DEFAULT,
+ CMAKE_STYLE_COMMENT = QE_STYLE_COMMENT,
+ CMAKE_STYLE_STRING = QE_STYLE_STRING,
+ CMAKE_STYLE_PREPROCESS = QE_STYLE_PREPROCESS,
+ CMAKE_STYLE_TARGET = QE_STYLE_FUNCTION,
+ CMAKE_STYLE_FUNCTION = QE_STYLE_FUNCTION,
+ CMAKE_STYLE_KEYWORD = QE_STYLE_KEYWORD,
+ CMAKE_STYLE_VARIABLE = QE_STYLE_VARIABLE,
+ CMAKE_STYLE_MACRO = QE_STYLE_TYPE,
+};
+
+static void cmake_colorize_line(QEColorizeContext *cp,
+ unsigned int *str, int n, ModeDef *syn)
+{
+ char buf[32];
+ int i = 0, start = i, style;
+ unsigned int c;
+
+ while (i < n) {
+ start = i;
+ c = str[i++];
+ switch (c) {
+ case '$':
+ style = CMAKE_STYLE_MACRO;
+ if (str[i] == '{') {
+ for (i += 1; i < n; i++) {
+ if (str[i] == '}')
+ break;
+ }
+ SET_COLOR(str, start + 2, i, style);
+ if (str[i] == '}')
+ i++;
+ continue;
+ }
+ continue;
+ case '#':
+ if (i > 1 && str[i - 2] == '\\')
+ break;
+ i = n;
+ SET_COLOR(str, start, i, CMAKE_STYLE_COMMENT);
+ continue;
+ case '"':
+ /* parse string const */
+ while (i < n) {
+ unsigned int cc = str[i++];
+
+ if (cc == c)
+ break;
+
+ if (cc == '$' && str[i] == '{') {
+ SET_COLOR(str, start, i + 1, CMAKE_STYLE_STRING);
+ for (start = i += 1; i < n && str[i] != c; i++) {
+ if (str[i] == '}')
+ break;
+ }
+ SET_COLOR(str, start, i, style);
+ }
+ }
+ SET_COLOR(str, start, i, CMAKE_STYLE_STRING);
+ continue;
+ default:
+ if (qe_isalpha_(c)) {
+ i -= 1;
+ i += get_word_lc(buf, countof(buf), str + i);
+ if (strfind("if|else|endif|set|true|false|include", buf)) {
+ SET_COLOR(str, start, i, CMAKE_STYLE_KEYWORD);
+ } else
+ if (str[i] == '(' || (str[i] == ' ' && str[i+1] == '(')) {
+ SET_COLOR(str, start, i, CMAKE_STYLE_FUNCTION);
+ }
+ }
+ break;
+ }
+ }
+}
+
+static int cmake_mode_probe(ModeDef *mode, ModeProbeData *p)
+{
+ /* check file name or extension */
+ if (match_extension(p->filename, mode->extensions)
+ || stristart(p->filename, "cmakelists.txt", NULL))
+ return 70;
+
+ return 1;
+}
+
+static ModeDef cmake_mode = {
+ .name = "CMake",
+ .extensions = "cmake",
+ .mode_probe = cmake_mode_probe,
+ .colorize_func = cmake_colorize_line,
+};
+
static int makefile_init(void)
{
qe_register_mode(&makefile_mode, MODEF_SYNTAX);
+ qe_register_mode(&cmake_mode, MODEF_SYNTAX);
return 0;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemacs-commit] qemacs makemode.c,
Charlie Gordon <=