?? scheme.c
字號:
/** $Id: scheme.c,v 1.3 2006/05/30 04:37:13 darren Exp $** Copyright (c) 2000-2002, Darren Hiebert** This source code is released for free distribution under the terms of the* GNU General Public License.** This module contains functions for generating tags for Scheme language* files.*//** INCLUDE FILES*/#include "general.h" /* must always come first */#include <string.h>#include "parse.h"#include "read.h"#include "vstring.h"/** DATA DEFINITIONS*/typedef enum { K_FUNCTION, K_SET} schemeKind;static kindOption SchemeKinds [] = { { TRUE, 'f', "function", "functions" }, { TRUE, 's', "set", "sets" }};/** FUNCTION DEFINITIONS*//* Algorithm adapted from from GNU etags. * Scheme tag functions * look for (def... xyzzy * look for (def... (xyzzy * look for (def ... ((... (xyzzy .... * look for (set! xyzzy */static void readIdentifier (vString *const name, const unsigned char *cp){ const unsigned char *p; vStringClear (name); /* Go till you get to white space or a syntactic break */ for (p = cp; *p != '\0' && *p != '(' && *p != ')' && !isspace (*p); p++) vStringPut (name, (int) *p); vStringTerminate (name);}static void findSchemeTags (void){ vString *name = vStringNew (); const unsigned char *line; while ((line = fileReadLine ()) != NULL) { const unsigned char *cp = line; if (cp [0] == '(' && (cp [1] == 'D' || cp [1] == 'd') && (cp [2] == 'E' || cp [2] == 'e') && (cp [3] == 'F' || cp [3] == 'f')) { while (!isspace (*cp)) cp++; /* Skip over open parens and white space */ while (*cp != '\0' && (isspace (*cp) || *cp == '(')) cp++; readIdentifier (name, cp); makeSimpleTag (name, SchemeKinds, K_FUNCTION); } if (cp [0] == '(' && (cp [1] == 'S' || cp [1] == 's') && (cp [2] == 'E' || cp [2] == 'e') && (cp [3] == 'T' || cp [3] == 't') && (cp [4] == '!' || cp [4] == '!') && (isspace (cp [5]))) { while (*cp != '\0' && !isspace (*cp)) cp++; /* Skip over white space */ while (isspace (*cp)) cp++; readIdentifier (name, cp); makeSimpleTag (name, SchemeKinds, K_SET); } } vStringDelete (name);}extern parserDefinition* SchemeParser (void){ static const char *const extensions [] = { "SCM", "SM", "sch", "scheme", "scm", "sm", NULL }; parserDefinition* def = parserNew ("Scheme"); def->kinds = SchemeKinds; def->kindCount = KIND_COUNT (SchemeKinds); def->extensions = extensions; def->parser = findSchemeTags; return def;}/* vi:set tabstop=4 shiftwidth=4: */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -