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

📄 options.c

📁 ctags-5.5.4.tar.gz,一个很好的代码开发以及编辑源码
💻 C
📖 第 1 页 / 共 4 页
字号:
    {	if (! Option.etags || optDesc [i].usedByEtags)	    puts (optDesc [i].description);    }}static void printFeatureList (void){    int i;    for (i = 0 ; Features [i] != NULL ; ++i)    {	if (i == 0)	    printf ("  Optional compiled features: ");	printf ("%s+%s", (i>0 ? ", " : ""), Features [i]);#ifdef CUSTOM_CONFIGURATION_FILE	if (strcmp (Features [i], "custom-conf") == 0)	    printf ("=%s", CUSTOM_CONFIGURATION_FILE);#endif    }    if (i > 0)	putchar ('\n');}static void printProgramIdentification (void){    printf ("%s %s, Copyright (C) 1996-2003 %s\n",	    PROGRAM_NAME, PROGRAM_VERSION, AUTHOR_NAME);    printf ("  Compiled: %s, %s\n", __DATE__, __TIME__);    printf ("  Addresses: <%s>, %s\n", AUTHOR_EMAIL, PROGRAM_URL);    printFeatureList ();}static void processHelpOption (	const char *const option __unused__,	const char *const parameter __unused__){    printProgramIdentification ();    putchar ('\n');    printInvocationDescription ();    putchar ('\n');    printOptionDescriptions (LongOptionDescription);    exit (0);}static void processLanguageForceOption (	const char *const option, const char *const parameter){    langType language;    if (strcasecmp (parameter, "auto") == 0)	language = LANG_AUTO;    else	language = getNamedLanguage (parameter);    if (strcmp (option, "lang") == 0  ||  strcmp (option, "language") == 0)	error (WARNING,	       "\"--%s\" option is obsolete; use \"--language-force\" instead",	       option);    if (language == LANG_IGNORE)	error (FATAL, "Unknown language specified in \"%s\" option", option);    else	Option.language = language;}static char* skipPastMap (char* p){    while (*p != EXTENSION_SEPARATOR  &&	    *p != PATTERN_START  &&  *p != ','  &&  *p != '\0')	++p;    return p;}/* Parses the mapping beginning at `map', adds it to the language map, and * returns first character past the map. */static char* addLanguageMap (const langType language, char* map){    char* p = NULL;    const char first = *map;    if (first == EXTENSION_SEPARATOR)	    /* extension map */    {	++map;	p = skipPastMap (map);	if (*p == '\0')	{	    verbose (" .%s", map);	    addLanguageExtensionMap (language, map);	    p = map + strlen (map);	}	else	{	    const char separator = *p;	    *p = '\0';	    verbose (" .%s", map);	    addLanguageExtensionMap (language, map);	    *p = separator;	}    }    else if (first == PATTERN_START)	    /* pattern map */    {	++map;	for (p = map  ;  *p != PATTERN_STOP  &&  *p != '\0'  ;  ++p)	{	    if (*p == '\\'  &&  *(p + 1) == PATTERN_STOP)		++p;	}	if (*p == '\0')	    error (FATAL, "Unterminated file name pattern for %s language",	       getLanguageName (language));	else	{	    *p++ = '\0';	    verbose (" (%s)", map);	    addLanguagePatternMap (language, map);	}    }    else	error (FATAL, "Badly formed language map for %s language",		getLanguageName (language));    return p;}static char* processLanguageMap (char* map){    char* const separator = strchr (map, ':');    char* result = NULL;    if (separator != NULL)    {	langType language;	char *list = separator + 1;	boolean clear = FALSE;	*separator = '\0';	language = getNamedLanguage (map);	if (language != LANG_IGNORE)	{	    const char *const deflt = "default";	    char* p;	    if (*list == '+')		++list;	    else		clear = TRUE;	    for (p = list  ;  *p != ','  &&  *p != '\0'  ;  ++p) /*no-op*/ ;	    if ((size_t) (p - list) == strlen (deflt) &&		strncasecmp (list, deflt, p - list) == 0)	    {		verbose ("    Restoring default %s language map: ", getLanguageName (language));		installLanguageMapDefault (language);		list = p;	    }	    else	    {		if (clear)		{		    verbose ("    Setting %s language map:", getLanguageName (language));		    clearLanguageMap (language);		}		else		    verbose ("    Adding to %s language map:", getLanguageName (language));		while (list != NULL  &&  *list != '\0'  &&  *list != ',')		    list = addLanguageMap (language, list);		verbose ("\n");	    }	    if (list != NULL  &&  *list == ',')		++list;	    result = list;	}    }    return result;}static void processLanguageMapOption (	const char *const option, const char *const parameter){    char *const maps = eStrdup (parameter);    char *map = maps;    if (strcmp (parameter, "default") == 0)    {	verbose ("    Restoring default language maps:\n");	installLanguageMapDefaults ();    }    else while (map != NULL  &&  *map != '\0')    {	char* const next = processLanguageMap (map);	if (next == NULL)	    error (WARNING, "Unknown language specified in \"%s\" option", option);	map = next;    }    eFree (maps);}static void processLanguagesOption (	const char *const option, const char *const parameter){    char *const langs = eStrdup (parameter);    enum { Add, Remove, Replace } mode = Replace;    boolean first = TRUE;    char *lang = langs;    const char* prefix = "";    verbose ("    Enabled languages: ");    while (lang != NULL)    {	char *const end = strchr (lang, ',');	if (lang [0] == '+')	{	    ++lang;	    mode = Add;	    prefix = "+ ";	}	else if (lang [0] == '-')	{	    ++lang;	    mode = Remove;	    prefix = "- ";	}	if (mode == Replace)	    enableLanguages (FALSE);	if (end != NULL)	    *end = '\0';	if (lang [0] != '\0')	{	    if (strcmp (lang, "all") == 0)		enableLanguages ((boolean) (mode != Remove));	    else	    {		const langType language = getNamedLanguage (lang);		if (language == LANG_IGNORE)		    error (WARNING, "Unknown language specified in \"%s\" option", option);		else		    enableLanguage (language, (boolean) (mode != Remove));	    }	    verbose ("%s%s%s", (first ? "" : ", "), prefix, lang);	    prefix = "";	    first = FALSE;	    if (mode == Replace)		mode = Add;	}	lang = (end != NULL ? end + 1 : NULL);    }    verbose ("\n");    eFree (langs);}static void processLicenseOption (	const char *const option __unused__,	const char *const parameter __unused__){    printProgramIdentification ();    puts ("");    puts (License1);    puts (License2);    exit (0);}static void processListKindsOption (	const char *const option, const char *const parameter){    if (parameter [0] == '\0' || strcasecmp (parameter, "all") == 0)        printLanguageKinds (LANG_AUTO);    else    {	langType language = getNamedLanguage (parameter);	if (language == LANG_IGNORE)	    error (FATAL, "Unknown language specified in \"%s\" option",option);	else	    printLanguageKinds (language);    }    exit (0);}static void processListMapsOption (	const char *const __unused__ option,	const char *const __unused__ parameter){    if (parameter [0] == '\0' || strcasecmp (parameter, "all") == 0)        printLanguageMaps (LANG_AUTO);    else    {	langType language = getNamedLanguage (parameter);	if (language == LANG_IGNORE)	    error (FATAL, "Unknown language specified in \"%s\" option",option);	else	    printLanguageMaps (language);    }    exit (0);}static void processListLanguagesOption (	const char *const option __unused__,	const char *const parameter __unused__){    printLanguageList ();    exit (0);}static void processOptionFile (	const char *const option, const char *const parameter){    if (parameter [0] == '\0')	error (WARNING, "no option file supplied for \"%s\"", option);    else if (! parseFileOptions (parameter))	error (FATAL | PERROR, "cannot open option file \"%s\"", parameter);}static void processSortOption (	const char *const option, const char *const parameter){    if (isFalse (parameter))	Option.sorted = SO_UNSORTED;    else if (isTrue (parameter))	Option.sorted = SO_SORTED;    else if (strcasecmp (parameter, "f") == 0 ||	    strcasecmp (parameter, "fold") == 0 ||	    strcasecmp (parameter, "foldcase") == 0)	Option.sorted = SO_FOLDSORTED;    else	error (FATAL, "Invalid value for \"%s\" option", option);}static void installHeaderListDefaults (void){    Option.headerExt = stringListNewFromArgv (HeaderExtensions);    if (Option.verbose)    {	printf ("    Setting default header extensions: ");	stringListPrint (Option.headerExt);	putchar ('\n');    }}static void processHeaderListOption (const int option, const char *parameter){    /*  Check to make sure that the user did not enter "ctags -h *.c"     *  by testing to see if the list is a filename that exists.     */    if (doesFileExist (parameter))	error (FATAL, "-%c: Invalid list", option);    if (strcmp (parameter, "default") == 0)	installHeaderListDefaults ();    else    {	boolean clear = TRUE;	if (parameter [0] == '+')	{	    ++parameter;	    clear = FALSE;	}	if (Option.headerExt == NULL)	    Option.headerExt = stringListNew ();	verbose ("    Header Extensions:\n");	addExtensionList (Option.headerExt, parameter, clear);    }}/* *  Token ignore processing *//*  Determines whether or not "name" should be ignored, per the ignore list. */extern boolean isIgnoreToken (	const char *const name, boolean *const pIgnoreParens,	const char **const replacement){    boolean result = FALSE;    if (Option.ignore != NULL)    {	const size_t nameLen = strlen (name);	unsigned int i;	if (pIgnoreParens != NULL)	    *pIgnoreParens = FALSE;	for (i = 0  ;  i < stringListCount (Option.ignore)  ;  ++i)	{	    vString *token = stringListItem (Option.ignore, i);	    if (strncmp (vStringValue (token), name, nameLen) == 0)	    {		const size_t tokenLen = vStringLength (token);		if (nameLen == tokenLen)		{		    result = TRUE;		    break;		}		else if (tokenLen == nameLen + 1  &&			vStringChar (token, tokenLen - 1) == '+')		{		    result = TRUE;		    if (pIgnoreParens != NULL)			*pIgnoreParens = TRUE;		    break;		}		else if (vStringChar (token, nameLen) == '=')		{		    if (replacement != NULL)			*replacement = vStringValue (token) + nameLen + 1;		    break;		}	    }	}    }    return result;}static void saveIgnoreToken (vString *const ignoreToken){    if (Option.ignore == NULL)	Option.ignore = stringListNew ();    stringListAdd (Option.ignore, ignoreToken);    verbose ("    ignore token: %s\n", vStringValue (ignoreToken));}static void readIgnoreList (const char *const list){    char* newList = stringCopy (list);    const char *token = strtok (newList, IGNORE_SEPARATORS);    while (token != NULL)    {	vString *const entry = vStringNewInit (token);	saveIgnoreToken (entry);	token = strtok (NULL, IGNORE_SEPARATORS);    }    eFree (newList);}static void addIgnoreListFromFile (const char *const fileName){    stringList* tokens = stringListNewFromFile (fileName);    if (tokens == NULL)	error (FATAL | PERROR, "cannot open \"%s\"", fileName);    if (Option.ignore == NULL)	Option.ignore = tokens;    else	stringListCombine (Option.ignore, tokens);}static void processIgnoreOption (const char *const list){    if (strchr ("@./\\", list [0]) != NULL)    {

⌨️ 快捷键说明

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