4 * Copyright (c) 2011, 2012 Steven Oliver <oliver.steven@gmail.com>
6 * This source code is released for free distribution under the terms of the
7 * GNU General Public License.
9 * This module contains functions for generating tags for Falcon language
28 typedef enum eFalconKinds
{
36 static kindOption FalconKinds
[] = {
37 {TRUE
, 'c', "class", "classes" },
38 {TRUE
, 'f', "function", "functions"},
39 {TRUE
, 'm', "member", "class members"},
40 {TRUE
, 'v', "variable", "variables"},
41 {TRUE
, 'i', "namespace", "imports"}
45 * Function Definitions
48 static boolean
isIdentifierChar (int c
)
50 return (boolean
) (isalnum (c
) || c
== '_');
53 static const char *skipSpace (const char *cp
)
55 while (isspace ((int) *cp
))
61 static const char *skipString (const char *cp
)
63 const char *start
= cp
;
72 else if (*cp
== *start
)
79 static void findFalconTags (void)
81 vString
*name
= vStringNew ();
82 const unsigned char *line
;
84 while ((line
= fileReadLine ()) != NULL
)
86 const unsigned char *cp
= line
;
91 if (strncmp ((const char*) cp
, "function", (size_t) 8) == 0)
96 while (isIdentifierChar ((int) *cp
))
98 vStringPut (name
, (int) *cp
);
101 vStringTerminate (name
);
102 makeSimpleTag (name
, FalconKinds
, K_FUNCTION
);
105 else if (strncmp ((const char*) cp
, "class", (size_t) 5) == 0)
110 while (isIdentifierChar ((int) *cp
))
112 vStringPut (name
, (int) *cp
);
115 vStringTerminate (name
);
116 makeSimpleTag (name
, FalconKinds
, K_CLASS
);
119 else if (strncmp ((const char*) cp
, "load", (size_t) 4) == 0)
124 while (isIdentifierChar ((int) *cp
))
126 vStringPut (name
, (int) *cp
);
129 vStringTerminate (name
);
130 makeSimpleTag (name
, FalconKinds
, K_NAMESPACE
);
134 vStringDelete (name
);
138 * Parser definition structure
140 extern parserDefinition
* FalconParser (void)
142 static const char *const extensions
[] = { "fal", "ftd", NULL
};
143 parserDefinition
*def
= parserNew ("Falcon");
144 def
->kinds
= FalconKinds
;
145 def
->kindCount
= KIND_COUNT (FalconKinds
);
146 def
->extensions
= extensions
;
147 def
->parser
= findFalconTags
;