⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 syntax.c

📁 ReactOS是一些高手根据Windows XP的内核编写出的类XP。内核实现机理和API函数调用几乎相同。甚至可以兼容XP的程序。喜欢研究系统内核的人可以看一看。
💻 C
📖 第 1 页 / 共 4 页
字号:
		    a++;
		    c->between_delimiters = 1;
		}
		check_a;
		if (!strcmp (*a, "whole")) {
		    a++;
		    c->whole_word_chars_left = strdup (whole_left);
		    c->whole_word_chars_right = strdup (whole_right);
		} else if (!strcmp (*a, "wholeleft")) {
		    a++;
		    c->whole_word_chars_left = strdup (whole_left);
		} else if (!strcmp (*a, "wholeright")) {
		    a++;
		    c->whole_word_chars_right = strdup (whole_right);
		}
		check_a;
		if (!strcmp (*a, "linestart")) {
		    a++;
		    c->line_start_left = 1;
		}
		check_a;
		c->left = strdup (*a++);
		check_a;
		if (!strcmp (*a, "linestart")) {
		    a++;
		    c->line_start_right = 1;
		}
		check_a;
		c->right = strdup (*a++);
		c->last_left = c->left[strlen (c->left) - 1];
		c->last_right = c->right[strlen (c->right) - 1];
		c->first_left = *c->left;
		c->first_right = *c->right;
		c->single_char = (strlen (c->right) == 1);
	    }
	    c->keyword = syntax_malloc (1024 * sizeof (struct key_word *));
	    num_words = 1;
	    c->keyword[0] = syntax_malloc (sizeof (struct key_word));
	    fg = *a;
	    if (*a)
		a++;
	    bg = *a;
	    if (*a)
		a++;
#ifdef MIDNIGHT
	    c->keyword[0]->fg = this_try_alloc_color_pair (fg, bg);
#else
	    c->keyword[0]->fg = this_allocate_color (fg);
	    c->keyword[0]->bg = this_allocate_color (bg);
#endif
	    c->keyword[0]->keyword = strdup (" ");
	    check_not_a;
	    num_contexts++;
	} else if (!strcmp (args[0], "keyword")) {
	    struct key_word *k;
	    if (num_words == -1)
		*a = 0;
	    check_a;
	    k = r[num_contexts - 1]->keyword[num_words] = syntax_malloc (sizeof (struct key_word));
	    if (!strcmp (*a, "whole")) {
		a++;
		k->whole_word_chars_left = strdup (whole_left);
		k->whole_word_chars_right = strdup (whole_right);
	    } else if (!strcmp (*a, "wholeleft")) {
		a++;
		k->whole_word_chars_left = strdup (whole_left);
	    } else if (!strcmp (*a, "wholeright")) {
		a++;
		k->whole_word_chars_right = strdup (whole_right);
	    }
	    check_a;
	    if (!strcmp (*a, "linestart")) {
		a++;
		k->line_start = 1;
	    }
	    check_a;
	    if (!strcmp (*a, "whole")) {
		*a = 0;
		check_a;
	    }
	    k->keyword = strdup (*a++);
	    k->last = k->keyword[strlen (k->keyword) - 1];
	    k->first = *k->keyword;
	    fg = *a;
	    if (*a)
		a++;
	    bg = *a;
	    if (*a)
		a++;
#ifdef MIDNIGHT
	    k->fg = this_try_alloc_color_pair (fg, bg);
#else
	    k->fg = this_allocate_color (fg);
	    k->bg = this_allocate_color (bg);
#endif
	    check_not_a;
	    num_words++;
	} else if (!strncmp (args[0], "#", 1)) {
	    /* do nothing for comment */
	} else if (!strcmp (args[0], "file")) {
	    break;
	} else {		/* anything else is an error */
	    *a = 0;
	    check_a;
	}
	free_args (args);
	syntax_free (l);
    }
    free_args (args);
    syntax_free (l);

    if (result)
	return result;

    if (num_contexts == -1) {
	result = line;
	return result;
    }
    for (i = 1; edit->rules[i]; i++) {
	for (j = i + 1; edit->rules[j]; j++) {
	    if (strstr (edit->rules[j]->right, edit->rules[i]->right) && strcmp (edit->rules[i]->right, "\n")) {
		unsigned char *s;
		if (!edit->rules[i]->conflicts)
		    edit->rules[i]->conflicts = syntax_malloc (sizeof (unsigned char) * 260);
		s = edit->rules[i]->conflicts;
		s[strlen ((char *) s)] = (unsigned char) j;
	    }
	}
    }

    {
	char first_chars[1024], *p;
	char last_chars[1024], *q;
	for (i = 0; edit->rules[i]; i++) {
	    c = edit->rules[i];
	    p = first_chars;
	    q = last_chars;
	    *p++ = (char) 1;
	    *q++ = (char) 1;
	    for (j = 1; c->keyword[j]; j++) {
		*p++ = c->keyword[j]->first;
		*q++ = c->keyword[j]->last;
	    }
	    *p = '\0';
	    *q = '\0';
	    c->keyword_first_chars = strdup (first_chars);
	    c->keyword_last_chars = strdup (last_chars);
	}
    }

    return result;
}

void (*syntax_change_callback) (CWidget *) = 0;

void edit_set_syntax_change_callback (void (*callback) (CWidget *))
{
    syntax_change_callback = callback;
}

void edit_free_syntax_rules (WEdit * edit)
{
    int i, j;
    if (!edit)
	return;
    if (!edit->rules)
	return;
    syntax_free (edit->syntax_type);
    if (syntax_change_callback)
#ifdef MIDNIGHT
	(*syntax_change_callback) (&edit->widget);
#else
	(*syntax_change_callback) (edit->widget);
#endif
    for (i = 0; edit->rules[i]; i++) {
	if (edit->rules[i]->keyword) {
	    for (j = 0; edit->rules[i]->keyword[j]; j++) {
		syntax_free (edit->rules[i]->keyword[j]->keyword);
		syntax_free (edit->rules[i]->keyword[j]->whole_word_chars_left);
		syntax_free (edit->rules[i]->keyword[j]->whole_word_chars_right);
		syntax_free (edit->rules[i]->keyword[j]);
	    }
	}
	syntax_free (edit->rules[i]->conflicts);
	syntax_free (edit->rules[i]->left);
	syntax_free (edit->rules[i]->right);
	syntax_free (edit->rules[i]->whole_word_chars_left);
	syntax_free (edit->rules[i]->whole_word_chars_right);
	syntax_free (edit->rules[i]->keyword);
	syntax_free (edit->rules[i]->keyword_first_chars);
	syntax_free (edit->rules[i]->keyword_last_chars);
	syntax_free (edit->rules[i]);
    }
    syntax_free (edit->rules);
}

#define CURRENT_SYNTAX_RULES_VERSION "22"

char *syntax_text =
"# syntax rules version " CURRENT_SYNTAX_RULES_VERSION "\n"
"# Allowable colors for mc are\n"
"# (after the slash is a Cooledit color, 0-26 or any of the X colors in rgb.txt)\n"
"# black\n"
"# red\n"
"# green\n"
"# brown\n"
"# blue\n"
"# magenta\n"
"# cyan\n"
"# lightgray\n"
"# gray\n"
"# brightred\n"
"# brightgreen\n"
"# yellow\n"
"# brightblue\n"
"# brightmagenta\n"
"# brightcyan\n"
"# white\n"
"\n"
"###############################################################################\n"
"file ..\\*\\\\.tex$ LaTeX\\s2.09\\sDocument\n"
"context default\n"
"wholechars left \\\\\n"
"wholechars right abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\n"
"\n"
"# type style\n"
"    keyword whole \\\\tiny yellow/24\n"
"    keyword whole \\\\scriptsize yellow/24\n"
"    keyword whole \\\\footnotesize yellow/24\n"
"    keyword whole \\\\small yellow/24\n"
"    keyword whole \\\\normalsize yellow/24\n"
"    keyword whole \\\\large yellow/24\n"
"    keyword whole \\\\Large yellow/24\n"
"    keyword whole \\\\LARGE yellow/24\n"
"    keyword whole \\\\huge yellow/24\n"
"    keyword whole \\\\Huge yellow/24\n"
"\n"
"# accents and symbols\n"
"    keyword whole \\\\`{\\[aeiouAEIOU\\]} yellow/24\n"
"    keyword whole \\\\'{\\[aeiouAEIOU\\]} yellow/24\n"
"    keyword whole \\\\^{\\[aeiouAEIOU\\]} yellow/24\n"
"    keyword whole \\\\\"{\\[aeiouAEIOU\\]} yellow/24\n"
"    keyword whole \\\\~{\\[aeiouAEIOU\\]} yellow/24\n"
"    keyword whole \\\\={\\[aeiouAEIOU\\]} yellow/24\n"
"    keyword whole \\\\.{\\[aeiouAEIOU\\]} yellow/24\n"
"    keyword whole \\\\u{\\[aeiouAEIOU\\]} yellow/24\n"
"    keyword whole \\\\v{\\[aeiouAEIOU\\]} yellow/24\n"
"    keyword whole \\\\H{\\[aeiouAEIOU\\]} yellow/24\n"
"    keyword whole \\\\t{\\[aeiouAEIOU\\]} yellow/24\n"
"    keyword whole \\\\c{\\[aeiouAEIOU\\]} yellow/24\n"
"    keyword whole \\\\d{\\[aeiouAEIOU\\]} yellow/24\n"
"    keyword whole \\\\b{\\[aeiouAEIOU\\]} yellow/24\n"
"\n"
"    keyword whole \\\\dag yellow/24\n"
"    keyword whole \\\\ddag yellow/24\n"
"    keyword whole \\\\S yellow/24\n"
"    keyword whole \\\\P yellow/24\n"
"    keyword whole \\\\copyright yellow/24\n"
"    keyword whole \\\\pounds yellow/24\n"
"\n"
"# sectioning and table of contents\n"
"    keyword whole \\\\part[*]{*} brightred/19\n"
"    keyword whole \\\\part{*} brightred/19\n"
"    keyword whole \\\\part\\*{*} brightred/19\n"
"    keyword whole \\\\chapter[*]{*} brightred/19\n"
"    keyword whole \\\\chapter{*} brightred/19\n"
"    keyword whole \\\\chapter\\*{*} brightred/19\n"
"    keyword whole \\\\section[*]{*} brightred/19\n"
"    keyword whole \\\\section{*} brightred/19\n"
"    keyword whole \\\\section\\*{*} brightred/19\n"
"    keyword whole \\\\subsection[*]{*} brightred/19\n"
"    keyword whole \\\\subsection{*} brightred/19\n"
"    keyword whole \\\\subsection\\*{*} brightred/19\n"
"    keyword whole \\\\subsubsection[*]{*} brightred/19\n"
"    keyword whole \\\\subsubsection{*} brightred/19\n"
"    keyword whole \\\\subsubsection\\*{*} brightred/19\n"
"    keyword whole \\\\paragraph[*]{*} brightred/19\n"
"    keyword whole \\\\paragraph{*} brightred/19\n"
"    keyword whole \\\\paragraph\\*{*} brightred/19\n"
"    keyword whole \\\\subparagraph[*]{*} brightred/19\n"
"    keyword whole \\\\subparagraph{*} brightred/19\n"
"    keyword whole \\\\subparagraph\\*{*} brightred/19\n"
"\n"
"    keyword whole \\\\appendix brightred/19\n"
"    keyword whole \\\\tableofcontents brightred/19\n"
"\n"
"# misc\n"
"    keyword whole \\\\item[*] yellow/24\n"
"    keyword whole \\\\item yellow/24\n"
"    keyword whole \\\\\\\\ yellow/24\n"
"    keyword \\\\\\s yellow/24 black/0\n"
"    keyword %% yellow/24\n"
"\n"
"# docuement and page styles    \n"
"    keyword whole \\\\documentstyle[*]{*} yellow/20\n"
"    keyword whole \\\\documentstyle{*} yellow/20\n"
"    keyword whole \\\\pagestyle{*} yellow/20\n"
"\n"
"# cross references\n"
"    keyword whole \\\\label{*} yellow/24\n"
"    keyword whole \\\\ref{*} yellow/24\n"
"\n"
"# bibliography and citations\n"
"    keyword whole \\\\bibliography{*} yellow/24\n"
"    keyword whole \\\\bibitem[*]{*} yellow/24\n"
"    keyword whole \\\\bibitem{*} yellow/24\n"
"    keyword whole \\\\cite[*]{*} yellow/24\n"
"    keyword whole \\\\cite{*} yellow/24\n"
"\n"
"# splitting the input\n"
"    keyword whole \\\\input{*} yellow/20\n"
"    keyword whole \\\\include{*} yellow/20\n"
"    keyword whole \\\\includeonly{*} yellow/20\n"
"\n"
"# line breaking\n"
"    keyword whole \\\\linebreak[\\[01234\\]] yellow/24\n"
"    keyword whole \\\\nolinebreak[\\[01234\\]] yellow/24\n"
"    keyword whole \\\\linebreak yellow/24\n"
"    keyword whole \\\\nolinebreak yellow/24\n"
"    keyword whole \\\\[+] yellow/24\n"
"    keyword whole \\\\- yellow/24\n"
"    keyword whole \\\\sloppy yellow/24\n"
"\n"
"# page breaking\n"
"    keyword whole \\\\pagebreak[\\[01234\\]] yellow/24\n"
"    keyword whole \\\\nopagebreak[\\[01234\\]] yellow/24\n"
"    keyword whole \\\\pagebreak yellow/24\n"
"    keyword whole \\\\nopagebreak yellow/24\n"
"    keyword whole \\\\samepage yellow/24\n"
"    keyword whole \\\\newpage yellow/24\n"
"    keyword whole \\\\clearpage yellow/24\n"
"\n"
"# defintiions\n"
"    keyword \\\\newcommand{*}[*] cyan/5\n"
"    keyword \\\\newcommand{*} cyan/5\n"
"    keyword \\\\newenvironment{*}[*]{*} cyan/5\n"
"    keyword \\\\newenvironment{*}{*} cyan/5\n"
"\n"
"# boxes\n"
"\n"
"# begins and ends\n"
"    keyword \\\\begin{document} brightred/14\n"
"    keyword \\\\begin{equation} brightred/14\n"
"    keyword \\\\begin{eqnarray} brightred/14\n"
"    keyword \\\\begin{quote} brightred/14\n"
"    keyword \\\\begin{quotation} brightred/14\n"
"    keyword \\\\begin{center} brightred/14\n"
"    keyword \\\\begin{verse} brightred/14\n"
"    keyword \\\\begin{verbatim} brightred/14\n"
"    keyword \\\\begin{itemize} brightred/14\n"
"    keyword \\\\begin{enumerate} brightred/14\n"
"    keyword \\\\begin{description} brightred/14\n"
"    keyword \\\\begin{array} brightred/14\n"
"    keyword \\\\begin{tabular} brightred/14\n"
"    keyword \\\\begin{thebibliography}{*} brightred/14\n"
"    keyword \\\\begin{sloppypar} brightred/14\n"
"\n"
"    keyword \\\\end{document} brightred/14\n"
"    keyword \\\\end{equation} brightred/14\n"
"    keyword \\\\end{eqnarray} brightred/14\n"
"    keyword \\\\end{quote} brightred/14\n"
"    keyword \\\\end{quotation} brightred/14\n"
"    keyword \\\\end{center} brightred/14\n"
"    keyword \\\\end{verse} brightred/14\n"
"    keyword \\\\end{verbatim} brightred/14\n"
"    keyword \\\\end{itemize} brightred/14\n"
"    keyword \\\\end{enumerate} brightred/14\n"
"    keyword \\\\end{description} brightred/14\n"
"    keyword \\\\end{array} brightred/14\n"
"    keyword \\\\end{tabular} brightred/14\n"
"    keyword \\\\end{thebibliography}{*} brightred/14\n"
"    keyword \\\\end{sloppypar} brightred/14\n"
"\n"
"    keyword \\\\begin{*} brightcyan/16\n"
"    keyword \\\\end{*} brightcyan/16\n"
"\n"
"    keyword \\\\theorem{*}{*} yellow/24\n"
"\n"
"# if all else fails\n"
"    keyword whole \\\\+[*]{*}{*}{*} brightcyan/17\n"
"    keyword whole \\\\+[*]{*}{*} brightcyan/17\n"
"    keyword whole \\\\+{*}{*}{*}{*} brightcyan/17\n"
"    keyword whole \\\\+{*}{*}{*} brightcyan/17\n"
"    keyword whole \\\\+{*}{*} brightcyan/17\n"
"    keyword whole \\\\+{*} brightcyan/17\n"
"    keyword \\\\\\[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\\]\\n brightcyan/17\n"
"    keyword \\\\\\[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\\]\\s brightcyan/17\n"
"    keyword \\\\\\[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\\]\\t brightcyan/17\n"
"\n"
"context \\\\pagenumbering{ } yellow/20\n"
"    keyword arabic brightcyan/17\n"
"    keyword roman brightcyan/17\n"
"    keyword alph brightcyan/17\n"
"    keyword Roman brightcyan/17\n"
"    keyword Alph brightcyan/17\n"
"\n"
"context % \\n brown/22\n"
"\n"
"# mathematical formulas\n"
"context $ $ brightgreen/6\n"
"context exclusive \\\\begin{equation} \\\\end{equation} brightgreen/6\n"
"context exclusive \\\\begin{eqnarray} \\\\end{eqnarray} brightgreen/6\n"
"\n"
"\n"
"###############################################################################\n"
"file ..\\*\\\\.([chC]|CC|cxx|cc|cpp|CPP|CXX)$ C/C\\+\\+\\sProgram\n"
"context default\n"
"    keyword whole auto yellow/24\n"
"    keyword whole break yellow/24\n"
"    keyword whole case yellow/24\n"
"    keyword whole char yellow/24\n"
"    keyword whole const yellow/24\n"
"    keyword whole continue yellow/24\n"
"    keyword whole default yellow/24\n"
"    keyword whole do yellow/24\n"
"    keyword whole double yellow/24\n"
"    keyword whole else yellow/24\n"
"    keyword whole enum yellow/24\n"
"    keyword whole extern yellow/24\n"
"    keyword whole float yellow/24\n"
"    keyword whole for yellow/24\n"
"    keyword whole goto yellow/24\n"
"    keyword whole if yellow/24\n"
"    keyword whole int yellow/24\n"
"    keyword whole long yellow/24\n"
"    keyword whole register yellow/24\n"
"    keyword whole return yellow/24\n"
"    keyword whole short yellow/24\n"
"    keyword whole signed yellow/24\n"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -