📄 syntax.c
字号:
" keyword whole sizeof yellow/24\n"
" keyword whole static yellow/24\n"
" keyword whole struct yellow/24\n"
" keyword whole switch yellow/24\n"
" keyword whole typedef yellow/24\n"
" keyword whole union yellow/24\n"
" keyword whole unsigned yellow/24\n"
" keyword whole void yellow/24\n"
" keyword whole volatile yellow/24\n"
" keyword whole while yellow/24\n"
" keyword whole asm yellow/24\n"
" keyword whole catch yellow/24\n"
" keyword whole class yellow/24\n"
" keyword whole friend yellow/24\n"
" keyword whole delete yellow/24\n"
" keyword whole inline yellow/24\n"
" keyword whole new yellow/24\n"
" keyword whole operator yellow/24\n"
" keyword whole private yellow/24\n"
" keyword whole protected yellow/24\n"
" keyword whole public yellow/24\n"
" keyword whole this yellow/24\n"
" keyword whole throw yellow/24\n"
" keyword whole template yellow/24\n"
" keyword whole try yellow/24\n"
" keyword whole virtual yellow/24\n"
" keyword whole bool yellow/24\n"
" keyword whole const_cast yellow/24\n"
" keyword whole dynamic_cast yellow/24\n"
" keyword whole explicit yellow/24\n"
" keyword whole false yellow/24\n"
" keyword whole mutable yellow/24\n"
" keyword whole namespace yellow/24\n"
" keyword whole reinterpret_cast yellow/24\n"
" keyword whole static_cast yellow/24\n"
" keyword whole true yellow/24\n"
" keyword whole typeid yellow/24\n"
" keyword whole typename yellow/24\n"
" keyword whole using yellow/24\n"
" keyword whole wchar_t yellow/24\n"
" keyword whole ... yellow/24\n"
"\n"
" keyword /\\* brown/22\n"
" keyword \\*/ brown/22\n"
"\n"
" keyword '\\s' brightgreen/16\n"
" keyword '+' brightgreen/16\n"
" keyword > yellow/24\n"
" keyword < yellow/24\n"
" keyword \\+ yellow/24\n"
" keyword - yellow/24\n"
" keyword \\* yellow/24\n"
" keyword / yellow/24\n"
" keyword % yellow/24\n"
" keyword = yellow/24\n"
" keyword != yellow/24\n"
" keyword == yellow/24\n"
" keyword { brightcyan/14\n"
" keyword } brightcyan/14\n"
" keyword ( brightcyan/15\n"
" keyword ) brightcyan/15\n"
" keyword [ brightcyan/14\n"
" keyword ] brightcyan/14\n"
" keyword , brightcyan/14\n"
" keyword : brightcyan/14\n"
" keyword ; brightmagenta/19\n"
"context exclusive /\\* \\*/ brown/22\n"
"context linestart # \\n brightred/18\n"
" keyword \\\\\\n yellow/24\n"
" keyword /\\**\\*/ brown/22\n"
" keyword \"+\" red/19\n"
" keyword <+> red/19\n"
"context \" \" green/6\n"
" keyword \\\\\" brightgreen/16\n"
" keyword %% brightgreen/16\n"
" keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[L\\]e brightgreen/16\n"
" keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[L\\]E brightgreen/16\n"
" keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[L\\]f brightgreen/16\n"
" keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[L\\]g brightgreen/16\n"
" keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[L\\]G brightgreen/16\n"
" keyword %\\[0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[hl\\]d brightgreen/16\n"
" keyword %\\[0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[hl\\]i brightgreen/16\n"
" keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[hl\\]o brightgreen/16\n"
" keyword %\\[0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[hl\\]u brightgreen/16\n"
" keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[hl\\]x brightgreen/16\n"
" keyword %\\[#0\\s-\\+,\\]\\[0123456789\\]\\[.\\]\\[0123456789\\]\\[hl\\]X brightgreen/16\n"
" keyword %\\[hl\\]n brightgreen/16\n"
" keyword %\\[.\\]\\[0123456789\\]s brightgreen/16\n"
" keyword %[*] brightgreen/16\n"
" keyword %c brightgreen/16\n"
" keyword \\\\\\\\ brightgreen/16\n"
"\n"
"###############################################################################\n"
"file .\\*ChangeLog$ GNU\\sDistribution\\sChangeLog\\sFile\n"
"\n"
"context default\n"
" keyword \\s+() brightmagenta/23\n"
" keyword \\t+() brightmagenta/23\n"
"\n"
"context linestart \\t\\* : brightcyan/17\n"
"context linestart \\s\\s\\s\\s\\s\\s\\s\\s\\* : brightcyan/17\n"
"\n"
"context linestart 19+-+\\s \\n yellow/24\n"
" keyword <+@+> brightred/19\n"
"context linestart 20+-+\\s \\n yellow/24\n"
" keyword <+@+> brightred/19\n"
"context linestart Mon\\s+\\s+\\s+\\s \\n yellow/24\n"
" keyword <+@+> brightred/19\n"
"context linestart Tue\\s+\\s+\\s+\\s \\n yellow/24\n"
" keyword <+@+> brightred/19\n"
"context linestart Wed\\s+\\s+\\s+\\s \\n yellow/24\n"
" keyword <+@+> brightred/19\n"
"context linestart Thu\\s+\\s+\\s+\\s \\n yellow/24\n"
" keyword <+@+> brightred/19\n"
"context linestart Fri\\s+\\s+\\s+\\s \\n yellow/24\n"
" keyword <+@+> brightred/19\n"
"context linestart Sat\\s+\\s+\\s+\\s \\n yellow/24\n"
" keyword <+@+> brightred/19\n"
"context linestart Sun\\s+\\s+\\s+\\s \\n yellow/24\n"
" keyword <+@+> brightred/19\n"
"\n"
"\n"
"###############################################################################\n"
"file .\\*Makefile[\\\\\\.a-z]\\*$ Makefile\n"
"\n"
"context default\n"
" keyword $(*) yellow/24\n"
" keyword ${*} brightgreen/16\n"
" keyword whole linestart include magenta\n"
" keyword whole linestart endif magenta\n"
" keyword whole linestart ifeq magenta\n"
" keyword whole linestart ifneq magenta\n"
" keyword whole linestart else magenta\n"
" keyword linestart \\t lightgray/13 red\n"
" keyword whole .PHONY white/25\n"
" keyword whole .NOEXPORT white/25\n"
" keyword = white/25\n"
" keyword : yellow/24\n"
" keyword \\\\\\n yellow/24\n"
"# this handles strange cases like @something@@somethingelse@ properly\n"
" keyword whole @+@ brightmagenta/23 black/0\n"
" keyword @+@ brightmagenta/23 black/0\n"
"\n"
"context linestart # \\n brown/22\n"
" keyword whole @+@ brightmagenta/23 black/0\n"
" keyword @+@ brightmagenta/23 black/0\n"
"\n"
"context exclusive = \\n brightcyan/17\n"
" keyword \\\\\\n yellow/24\n"
" keyword $(*) yellow/24\n"
" keyword ${*} brightgreen/16\n"
" keyword linestart \\t lightgray/13 red\n"
" keyword whole @+@ brightmagenta/23 black/0\n"
" keyword @+@ brightmagenta/23 black/0\n"
"\n"
"context exclusive linestart \\t \\n\n"
" keyword \\\\\\n yellow/24\n"
" keyword $(*) yellow/24\n"
" keyword ${*} brightgreen/16\n"
" keyword linestart \\t lightgray/13 red\n"
" keyword whole @+@ brightmagenta/23 black/0\n"
" keyword @+@ brightmagenta/23 black/0\n"
"\n"
"###############################################################################\n"
"\n"
"file .\\*syntax$ Syntax\\sHighlighting\\sdefinitions\n"
"\n"
"context default\n"
" keyword whole keyw\\ord yellow/24\n"
" keyword whole whole\\[\\t\\s\\]l\\inestart brightcyan/17\n"
" keyword whole whole\\[\\t\\s\\]l\\inestart brightcyan/17\n"
" keyword whole wh\\oleleft\\[\\t\\s\\]l\\inestart brightcyan/17\n"
" keyword whole wh\\oleright\\[\\t\\s\\]l\\inestart brightcyan/17\n"
" keyword whole l\\inestart\\[\\t\\s\\]wh\\ole\n"
" keyword whole l\\inestart\\[\\t\\s\\]wh\\ole\n"
" keyword whole l\\inestart\\[\\t\\s\\]wh\\oleleft\n"
" keyword whole l\\inestart\\[\\t\\s\\]wh\\oleright\n"
" keyword wholeleft whole\\s brightcyan/17\n"
" keyword wholeleft whole\\t brightcyan/17\n"
" keyword whole wh\\oleleft brightcyan/17\n"
" keyword whole wh\\oleright brightcyan/17\n"
" keyword whole lin\\[e\\]start brightcyan/17\n"
" keyword whole c\\ontext\\[\\t\\s\\]exclusive brightred/18\n"
" keyword whole c\\ontext\\[\\t\\s\\]default brightred/18\n"
" keyword whole c\\ontext brightred/18\n"
" keyword whole wh\\olechars\\[\\t\\s\\]left brightcyan/17\n"
" keyword whole wh\\olechars\\[\\t\\s\\]right brightcyan/17\n"
" keyword whole wh\\olechars brightcyan/17\n"
" keyword whole f\\ile brightgreen/6\n"
"\n"
" keyword whole 0 lightgray/0 blue/26\n"
" keyword whole 1 lightgray/1 blue/26\n"
" keyword whole 2 lightgray/2 blue/26\n"
" keyword whole 3 lightgray/3 blue/26\n"
" keyword whole 4 lightgray/4 blue/26\n"
" keyword whole 5 lightgray/5 blue/26\n"
" keyword whole 6 lightgray/6\n"
" keyword whole 7 lightgray/7\n"
" keyword whole 8 lightgray/8\n"
" keyword whole 9 lightgray/9\n"
" keyword whole 10 lightgray/10\n"
" keyword whole 11 lightgray/11\n"
" keyword whole 12 lightgray/12\n"
" keyword whole 13 lightgray/13\n"
" keyword whole 14 lightgray/14\n"
" keyword whole 15 lightgray/15\n"
" keyword whole 16 lightgray/16\n"
" keyword whole 17 lightgray/17\n"
" keyword whole 18 lightgray/18\n"
" keyword whole 19 lightgray/19\n"
" keyword whole 20 lightgray/20\n"
" keyword whole 21 lightgray/21\n"
" keyword whole 22 lightgray/22\n"
" keyword whole 23 lightgray/23\n"
" keyword whole 24 lightgray/24\n"
" keyword whole 25 lightgray/25\n"
" keyword whole 26 lightgray/26\n"
"\n"
" keyword wholeleft black\\/ black/0\n"
" keyword wholeleft red\\/ red/DarkRed\n"
" keyword wholeleft green\\/ green/green3\n"
" keyword wholeleft brown\\/ brown/saddlebrown\n"
" keyword wholeleft blue\\/ blue/blue3\n"
" keyword wholeleft magenta\\/ magenta/magenta3\n"
" keyword wholeleft cyan\\/ cyan/cyan3\n"
" keyword wholeleft lightgray\\/ lightgray/lightgray\n"
" keyword wholeleft gray\\/ gray/gray\n"
" keyword wholeleft brightred\\/ brightred/red\n"
" keyword wholeleft brightgreen\\/ brightgreen/green1\n"
" keyword wholeleft yellow\\/ yellow/yellow\n"
" keyword wholeleft brightblue\\/ brightblue/blue1\n"
" keyword wholeleft brightmagenta\\/ brightmagenta/magenta\n"
" keyword wholeleft brightcyan\\/ brightcyan/cyan1\n"
" keyword wholeleft white\\/ white/26\n"
"\n"
"context linestart # \\n brown/22\n"
"\n"
"file \\.\\* Help\\ssupport\\sother\\sfile\\stypes\n"
"context default\n"
"file \\.\\* by\\scoding\\srules\\sin\\s~/.cedit/syntax.\n"
"context default\n"
"file \\.\\* See\\sman/syntax\\sin\\sthe\\ssource\\sdistribution\n"
"context default\n"
"file \\.\\* and\\sconsult\\sthe\\sman\\spage.\n"
"context default\n";
FILE *upgrade_syntax_file (char *syntax_file)
{
FILE *f;
char line[80];
f = fopen (syntax_file, "r");
if (!f) {
f = fopen (syntax_file, "w");
if (!f)
return 0;
fprintf (f, "%s", syntax_text);
fclose (f);
return fopen (syntax_file, "r");
}
memset (line, 0, 79);
fread (line, 80, 1, f);
if (!strstr (line, "syntax rules version")) {
goto rename_rule_file;
} else {
char *p;
p = strstr (line, "version") + strlen ("version") + 1;
if (atoi (p) < atoi (CURRENT_SYNTAX_RULES_VERSION)) {
char s[1024];
rename_rule_file:
strcpy (s, syntax_file);
strcat (s, ".OLD");
unlink (s);
rename (syntax_file, s);
unlink (syntax_file); /* might rename() fail ? */
#ifdef MIDNIGHT
edit_message_dialog (" Load Syntax Rules ", " Your syntax rule file is outdated \n A new rule file is being installed. \n Your old rule file has been saved with a .OLD extension. ");
#else
CMessageDialog (0, 20, 20, 0, " Load Syntax Rules ", " Your syntax rule file is outdated \n A new rule file is being installed. \n Your old rule file has been saved with a .OLD extension. ");
#endif
return upgrade_syntax_file (syntax_file);
} else {
rewind (f);
return (f);
}
}
return 0; /* not reached */
}
/* returns -1 on file error, line number on error in file syntax */
static int edit_read_syntax_file (WEdit * edit, char **names, char *syntax_file, char *editor_file, char *type)
{
FILE *f;
regex_t r;
regmatch_t pmatch[1];
char *args[1024], *l;
int line = 0;
int argc;
int result = 0;
int count = 0;
f = upgrade_syntax_file (syntax_file);
if (!f)
return -1;
args[0] = 0;
for (;;) {
line++;
if (!read_one_line (&l, f))
break;
get_args (l, args, &argc);
if (!args[0]) {
} else if (!strcmp (args[0], "file")) {
if (!args[1] || !args[2]) {
result = line;
break;
}
if (regcomp (&r, args[1], REG_EXTENDED)) {
result = line;
break;
}
if (names) {
names[count++] = strdup (args[2]);
names[count] = 0;
} else if (type) {
if (!strcmp (type, args[2]))
goto found_type;
} else if (editor_file && edit) {
if (!regexec (&r, editor_file, 1, pmatch, 0)) {
int line_error;
found_type:
line_error = edit_read_syntax_rules (edit, f);
if (line_error)
result = line + line_error;
else {
syntax_free (edit->syntax_type);
edit->syntax_type = strdup (args[2]);
if (syntax_change_callback)
#ifdef MIDNIGHT
(*syntax_change_callback) (&edit->widget);
#else
(*syntax_change_callback) (edit->widget);
#endif
/* if there are no rules then turn off syntax highlighting for speed */
if (!edit->rules[1])
if (!edit->rules[0]->keyword[1])
edit_free_syntax_rules (edit);
}
break;
}
}
}
free_args (args);
syntax_free (l);
}
free_args (args);
syntax_free (l);
fclose (f);
return result;
}
/* loads rules into edit struct. one of edit or names must be zero. if
edit is zero, a list of types will be stored into name. type may be zero
in which case the type will be selected according to the filename. */
void edit_load_syntax (WEdit * edit, char **names, char *type)
{
int r;
char *f;
edit_free_syntax_rules (edit);
#ifdef MIDNIGHT
if (!SLtt_Use_Ansi_Colors)
return;
#endif
if (edit) {
if (!edit->filename)
return;
if (!*edit->filename && !type)
return;
}
f = catstrs (home_dir, SYNTAX_FILE, 0);
r = edit_read_syntax_file (edit, names, f, edit ? edit->filename : 0, type);
if (r == -1) {
edit_free_syntax_rules (edit);
edit_error_dialog (_ (" Load syntax file "), _ (" File access error "));
return;
}
if (r) {
char s[80];
edit_free_syntax_rules (edit);
sprintf (s, _ (" Syntax error in file %s on line %d "), f, r);
edit_error_dialog (_ (" Load syntax file "), s);
return;
}
}
#else
int option_syntax_highlighting = 0;
void edit_load_syntax (WEdit * edit, char **names, char *type)
{
return;
}
void edit_free_syntax_rules (WEdit * edit)
{
return;
}
void edit_get_syntax_color (WEdit * edit, long byte_index, int *fg, int *bg)
{
*fg = NORMAL_COLOR;
}
#endif /* !defined(MIDNIGHT) || defined(HAVE_SYNTAXH) */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -