13ae02089SMasatake YAMATO /*
23ae02089SMasatake YAMATO * Copyright (c) 2000-2002, Darren Hiebert
33ae02089SMasatake YAMATO *
43ae02089SMasatake YAMATO * This source code is released for free distribution under the terms of the
50ce38835Sviccuad * GNU General Public License version 2 or (at your option) any later version.
63ae02089SMasatake YAMATO *
73ae02089SMasatake YAMATO * This module contains functions for generating tags for AWK functions.
83ae02089SMasatake YAMATO */
93ae02089SMasatake YAMATO
103ae02089SMasatake YAMATO /*
113ae02089SMasatake YAMATO * INCLUDE FILES
123ae02089SMasatake YAMATO */
133ae02089SMasatake YAMATO #include "general.h" /* must always come first */
143ae02089SMasatake YAMATO
153ae02089SMasatake YAMATO #include <string.h>
163ae02089SMasatake YAMATO
173ae02089SMasatake YAMATO #include "parse.h"
183ae02089SMasatake YAMATO #include "read.h"
193db72c21SMasatake YAMATO #include "routines.h"
203ae02089SMasatake YAMATO #include "vstring.h"
213ae02089SMasatake YAMATO
223ae02089SMasatake YAMATO /*
233ae02089SMasatake YAMATO * DATA DEFINITIONS
243ae02089SMasatake YAMATO */
253ae02089SMasatake YAMATO typedef enum eAwkKinds {
263ae02089SMasatake YAMATO K_FUNCTION
273ae02089SMasatake YAMATO } awkKind;
283ae02089SMasatake YAMATO
29e112e8abSMasatake YAMATO static kindDefinition AwkKinds [] = {
30ce990805SThomas Braun { true, 'f', "function", "functions" }
313ae02089SMasatake YAMATO };
323ae02089SMasatake YAMATO
333ae02089SMasatake YAMATO /*
343ae02089SMasatake YAMATO * FUNCTION DEFINITIONS
353ae02089SMasatake YAMATO */
363ae02089SMasatake YAMATO
findAwkTags(void)373ae02089SMasatake YAMATO static void findAwkTags (void)
383ae02089SMasatake YAMATO {
393ae02089SMasatake YAMATO vString *name = vStringNew ();
403ae02089SMasatake YAMATO const unsigned char *line;
413ae02089SMasatake YAMATO
421b312fe7SMasatake YAMATO while ((line = readLineFromInputFile ()) != NULL)
433ae02089SMasatake YAMATO {
44*b1e612edSDoug Kearns while (isspace ((int) *line))
45*b1e612edSDoug Kearns ++line;
46*b1e612edSDoug Kearns
473ae02089SMasatake YAMATO if (strncmp ((const char *) line, "function", (size_t) 8) == 0 &&
483ae02089SMasatake YAMATO isspace ((int) line [8]))
493ae02089SMasatake YAMATO {
503ae02089SMasatake YAMATO const unsigned char *cp = line + 8;
513ae02089SMasatake YAMATO
523ae02089SMasatake YAMATO while (isspace ((int) *cp))
533ae02089SMasatake YAMATO ++cp;
543ae02089SMasatake YAMATO while (isalnum ((int) *cp) || *cp == '_')
553ae02089SMasatake YAMATO {
563ae02089SMasatake YAMATO vStringPut (name, (int) *cp);
573ae02089SMasatake YAMATO ++cp;
583ae02089SMasatake YAMATO }
593ae02089SMasatake YAMATO while (isspace ((int) *cp))
603ae02089SMasatake YAMATO ++cp;
613ae02089SMasatake YAMATO if (*cp == '(')
6216a2541cSMasatake YAMATO makeSimpleTag (name, K_FUNCTION);
633ae02089SMasatake YAMATO vStringClear (name);
643ae02089SMasatake YAMATO if (*cp != '\0')
653ae02089SMasatake YAMATO ++cp;
663ae02089SMasatake YAMATO }
673ae02089SMasatake YAMATO }
683ae02089SMasatake YAMATO vStringDelete (name);
693ae02089SMasatake YAMATO }
703ae02089SMasatake YAMATO
AwkParser(void)713ae02089SMasatake YAMATO extern parserDefinition *AwkParser (void)
723ae02089SMasatake YAMATO {
733ae02089SMasatake YAMATO static const char *const extensions [] = { "awk", "gawk", "mawk", NULL };
741eb00ca9SDoug Kearns static const char *const aliases [] = { "gawk", "mawk", NULL };
753ae02089SMasatake YAMATO parserDefinition *def = parserNew ("Awk");
7609ae690fSMasatake YAMATO def->kindTable = AwkKinds;
773db72c21SMasatake YAMATO def->kindCount = ARRAY_SIZE (AwkKinds);
783ae02089SMasatake YAMATO def->extensions = extensions;
7990119000SMasatake YAMATO def->aliases = aliases;
803ae02089SMasatake YAMATO def->parser = findAwkTags;
813ae02089SMasatake YAMATO return def;
823ae02089SMasatake YAMATO }
83