make.c

来自「ctags-5.5.4.tar.gz,一个很好的代码开发以及编辑源码」· C语言 代码 · 共 104 行

C
104
字号
/**   $Id: make.c,v 1.2 2002/02/17 06:04:32 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 makefiles.*//**   INCLUDE FILES*/#include "general.h"	/* must always come first */#include <ctype.h>#include "parse.h"#include "read.h"#include "vstring.h"/**   DATA DEFINITIONS*/typedef enum {    K_MACRO} shKind;static kindOption MakeKinds [] = {    { TRUE, 'm', "macro", "macros"}};/**   FUNCTION DEFINITIONS*/static boolean isIdentifier (int c){    return (boolean)(isalnum (c)  ||  c == '_');}static void findMakeTags (void){    vString *name = vStringNew ();    const unsigned char *line;    while ((line = fileReadLine ()) != NULL)    {	const unsigned char* cp = line;	boolean possible = TRUE;	while (isspace ((int) *cp))	    ++cp;	if (*cp == '#')	    continue;	while (*cp != '\0')	{	    /*  We look for any sequence of identifier characters following	     *  either a white space or a colon and followed by either = or :=	     */	    if (possible && isIdentifier ((int) *cp))	    {		while (isIdentifier ((int) *cp))		{		    vStringPut (name, (int) *cp);		    ++cp;		}		vStringTerminate (name);		while (isspace ((int) *cp))		    ++cp;		if ( *cp == ':')		    ++cp;		if ( *cp == '=')		    makeSimpleTag (name, MakeKinds, K_MACRO);		vStringClear (name);	    }	    else if (isspace ((int) *cp) ||  *cp == ':')		possible = TRUE;	    else		possible = FALSE;	    if (*cp != '\0')		++cp;	}    }    vStringDelete (name);}extern parserDefinition* MakefileParser (void){    static const char *const patterns [] = { "[Mm]akefile", NULL };    static const char *const extensions [] = { "mak", NULL };    parserDefinition* const def = parserNew ("Make");    def->kinds      = MakeKinds;    def->kindCount  = KIND_COUNT (MakeKinds);    def->patterns   = patterns;    def->extensions = extensions;    def->parser     = findMakeTags;    return def;}/* vi:set tabstop=8 shiftwidth=4: */

⌨️ 快捷键说明

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