Revision: 3205 http://geany.svn.sourceforge.net/geany/?rev=3205&view=rev Author: ntrel Date: 2008-11-11 16:33:20 +0000 (Tue, 11 Nov 2008)
Log Message: ----------- Apply patch from Colomban Wendling to add Vala filetype (thanks). Fix c.c tagLetter() bug.
Modified Paths: -------------- trunk/ChangeLog trunk/data/filetype_extensions.conf trunk/src/about.c trunk/src/filetypes.c trunk/src/filetypes.h trunk/src/highlighting.c trunk/src/plugindata.h trunk/tagmanager/c.c trunk/tagmanager/parsers.h
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2008-11-11 09:27:49 UTC (rev 3204) +++ trunk/ChangeLog 2008-11-11 16:33:20 UTC (rev 3205) @@ -1,3 +1,12 @@ +2008-11-11 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com> + + * src/highlighting.c, src/plugindata.h, src/about.c, src/filetypes.c, + src/filetypes.h, tagmanager/parsers.h, tagmanager/c.c, + data/filetype_extensions.conf: + Apply patch from Colomban Wendling to add Vala filetype (thanks). + Fix c.c tagLetter() bug. + + 2008-11-10 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
* doc/geany.txt, doc/geany.html, src/templates.c, src/templates.c,
Modified: trunk/data/filetype_extensions.conf =================================================================== --- trunk/data/filetype_extensions.conf 2008-11-11 09:27:49 UTC (rev 3204) +++ trunk/data/filetype_extensions.conf 2008-11-11 16:33:20 UTC (rev 3205) @@ -7,7 +7,7 @@ ASM=*.asm; C=*.c;*.h; C++=*.cpp;*.cxx;*.c++;*.cc;*.h;*.hpp;*.hxx;*.h++;*.hh;*.C; -C#=*.cs;*.vala; +C#=*.cs; CAML=*.ml;*.mli; D=*.d;*.di; F77=*.f;*.for;*.ftn;*.f77; @@ -18,6 +18,7 @@ Haxe=*.hx; Java=*.java;*.jsp; Pascal=*.pas;*.pp;*.inc;*.dpr;*.dpk; +Vala=*.vala;*.vapi; VHDL=*.vhd;*.vhdl; Ferite=*.fe; Javascript=*.js;
Modified: trunk/src/about.c =================================================================== --- trunk/src/about.c 2008-11-11 09:27:49 UTC (rev 3204) +++ trunk/src/about.c 2008-11-11 16:33:20 UTC (rev 3205) @@ -79,7 +79,7 @@
static const gchar *contributors = "Alexander Rodin, Andrew Rowland, Anh Phạm, blackdog, Bo Lorentsen, Bob Doan, Bronisław Białek, Catalin Marinas, " -"Christoph Berg, Conrad Steenberg, Daniel Richard G., Dave Moore, Dirk Weber, Felipe Pena, François Cami, " +"Christoph Berg, Colomban Wendling, Conrad Steenberg, Daniel Richard G., Dave Moore, Dirk Weber, Felipe Pena, François Cami, " "Giuseppe Torelli, Guillaume Hoffmann, Jason Oster, Jean-François Wauthy, Jeff Pohlmeyer, " "John Gabriele, Josef Whiter, Kevin Ellwood, Kristoffer A. Tjernås, Marko Peric, Matti Mårds, " "Peter Strand, Pierre Joye, Rob van der Linde, Robert McGinley, S Jagannathan, Saleem Abdulrasool, "
Modified: trunk/src/filetypes.c =================================================================== --- trunk/src/filetypes.c 2008-11-11 09:27:49 UTC (rev 3204) +++ trunk/src/filetypes.c 2008-11-11 16:33:20 UTC (rev 3205) @@ -107,11 +107,22 @@ ft->name = g_strdup("C#"); ft->title = g_strdup_printf(_("%s source file"), "C#"); ft->extension = g_strdup("cs"); - ft->pattern = utils_strv_new("*.cs", "*.vala", NULL); + ft->pattern = utils_strv_new("*.cs", NULL); ft->comment_open = g_strdup("//"); ft->comment_close = NULL; ft->group = GEANY_FILETYPE_GROUP_COMPILED;
+#define VALA + ft = filetypes[GEANY_FILETYPES_VALA]; + ft->lang = 33; + ft->name = g_strdup("Vala"); + ft->title = g_strdup_printf(_("%s source file"), "Vala"); + ft->extension = g_strdup("vala"); + ft->pattern = utils_strv_new("*.vala", "*.vapi", NULL); + ft->comment_open = g_strdup("//"); + ft->comment_close = NULL; + ft->group = GEANY_FILETYPE_GROUP_COMPILED; + #define D ft = filetypes[GEANY_FILETYPES_D]; ft->lang = 17;
Modified: trunk/src/filetypes.h =================================================================== --- trunk/src/filetypes.h 2008-11-11 09:27:49 UTC (rev 3204) +++ trunk/src/filetypes.h 2008-11-11 16:33:20 UTC (rev 3205) @@ -50,6 +50,7 @@ GEANY_FILETYPES_HAXE, GEANY_FILETYPES_JAVA, GEANY_FILETYPES_PASCAL, + GEANY_FILETYPES_VALA, GEANY_FILETYPES_VHDL,
/* script languages */
Modified: trunk/src/highlighting.c =================================================================== --- trunk/src/highlighting.c 2008-11-11 09:27:49 UTC (rev 3204) +++ trunk/src/highlighting.c 2008-11-11 16:33:20 UTC (rev 3205) @@ -898,6 +898,66 @@ }
+static void styleset_vala_init(gint ft_id, GKeyFile *config, GKeyFile *config_home) +{ + new_style_array(GEANY_FILETYPES_VALA, 21); + styleset_c_like_init(config, config_home, GEANY_FILETYPES_VALA); + get_keyfile_int(config, config_home, "styling", "styling_within_preprocessor", + 1, 0, &style_sets[GEANY_FILETYPES_VALA].styling[20]); + + style_sets[GEANY_FILETYPES_VALA].keywords = g_new(gchar*, 4); + get_keyfile_keywords(config, config_home, "keywords", "primary", GEANY_FILETYPES_VALA, 0, + "else if switch case default break continue return for foreach in do while is " + "try catch finally throw " + "namespace interface class struct enum signal errordomain " + "construct callback get set base " + "const static var weak " + "virtual abstract override inline extern " + "public protected private delegate " + "out ref " + + "lock using " + + "true false null " + + "generic new delete base this value typeof sizeof " + "throws requires ensures " + + "void bool char uchar int uint short ushort long ulong size_t ssize_t " + "int8 uint8 int16 uint16 int32 uint32 int64 uint64 float double unichar string " + + /* this types are not referenced by the reference manual but are in glib.vapi + * as simple types */ + /*"constpointer time_t "*/ + ); + get_keyfile_keywords(config, config_home, "keywords", "secondary", GEANY_FILETYPES_VALA, 1, ""); + get_keyfile_keywords(config, config_home, "keywords", "docComment", GEANY_FILETYPES_VALA, 2, ""); + style_sets[GEANY_FILETYPES_VALA].keywords[3] = NULL; + + get_keyfile_wordchars(config, config_home, + &style_sets[GEANY_FILETYPES_VALA].wordchars); +} + + +static void styleset_vala(ScintillaObject *sci) +{ + const filetype_id ft_id = GEANY_FILETYPES_VALA; + + apply_filetype_properties(sci, SCLEX_CPP, ft_id); + + SSM(sci, SCI_SETKEYWORDS, 0, (sptr_t) style_sets[ft_id].keywords[0]); + SSM(sci, SCI_SETKEYWORDS, 2, (sptr_t) style_sets[ft_id].keywords[2]); + + /* assign global types, merge them with user defined keywords and set them */ + assign_global_and_user_keywords(sci, style_sets[ft_id].keywords[1], filetypes[ft_id]->lang); + + styleset_c_like(sci, ft_id); + + if (style_sets[ft_id].styling[20].foreground == 1) + SSM(sci, ft_id, (sptr_t) "styling.within.preprocessor", (sptr_t) "1"); +} + + static void styleset_pascal_init(gint ft_id, GKeyFile *config, GKeyFile *config_home) { new_style_array(GEANY_FILETYPES_PASCAL, 12); @@ -3145,6 +3205,7 @@ init_styleset_case(GEANY_FILETYPES_SH, sh); init_styleset_case(GEANY_FILETYPES_SQL, sql); init_styleset_case(GEANY_FILETYPES_TCL, tcl); + init_styleset_case(GEANY_FILETYPES_VALA, vala); init_styleset_case(GEANY_FILETYPES_VHDL, vhdl); init_styleset_case(GEANY_FILETYPES_XML, markup); } @@ -3202,6 +3263,7 @@ styleset_case(GEANY_FILETYPES_SH, sh); styleset_case(GEANY_FILETYPES_SQL, sql); styleset_case(GEANY_FILETYPES_TCL, tcl); + styleset_case(GEANY_FILETYPES_VALA, vala); styleset_case(GEANY_FILETYPES_VHDL, vhdl); styleset_case(GEANY_FILETYPES_XML, xml); default:
Modified: trunk/src/plugindata.h =================================================================== --- trunk/src/plugindata.h 2008-11-11 09:27:49 UTC (rev 3204) +++ trunk/src/plugindata.h 2008-11-11 16:33:20 UTC (rev 3205) @@ -50,7 +50,7 @@ * existing fields in the plugin data types have to be changed or reordered. */ /* This should usually stay the same if fields are only appended, assuming only pointers to * structs and not structs themselves are declared by plugins. */ - GEANY_ABI_VERSION = 48 + GEANY_ABI_VERSION = 49 };
/** Check the plugin can be loaded by Geany. @@ -483,9 +483,9 @@ void (*set_indicator_full) (struct GeanyEditor *editor, gint indic, gint start, gint end); void (*set_indicator_on_line_full) (struct GeanyEditor *editor, gint indic, gint line); void (*clear_indicators_full) (struct GeanyEditor *editor, gint indic); - + void (*set_indent_type)(struct GeanyEditor *editor, GeanyIndentType type); - + /* Remember to convert any GeanyDocument or ScintillaObject pointers in any * appended functions to GeanyEditor pointers. */ }
Modified: trunk/tagmanager/c.c =================================================================== --- trunk/tagmanager/c.c 2008-11-11 09:27:49 UTC (rev 3204) +++ trunk/tagmanager/c.c 2008-11-11 16:33:20 UTC (rev 3205) @@ -64,8 +64,8 @@ KEYWORD_DOUBLE, KEYWORD_ELSE, KEYWORD_ENUM, KEYWORD_EXPLICIT, KEYWORD_EXTERN, KEYWORD_EXTENDS, KEYWORD_EVENT, - KEYWORD_FINAL, KEYWORD_FLOAT, KEYWORD_FOR, KEYWORD_FRIEND, KEYWORD_FUNCTION, - KEYWORD_GOTO, + KEYWORD_FINAL, KEYWORD_FINALLY, KEYWORD_FLOAT, KEYWORD_FOR, KEYWORD_FRIEND, KEYWORD_FUNCTION, + KEYWORD_GET, KEYWORD_GOTO, KEYWORD_IF, KEYWORD_IMPLEMENTS, KEYWORD_IMPORT, KEYWORD_INLINE, KEYWORD_INT, KEYWORD_INOUT, KEYWORD_INPUT, KEYWORD_INTEGER, KEYWORD_INTERFACE, KEYWORD_INTERNAL, @@ -78,7 +78,7 @@ KEYWORD_PROGRAM, KEYWORD_PROTECTED, KEYWORD_PUBLIC, KEYWORD_REGISTER, KEYWORD_RETURN, KEYWORD_SHADOW, KEYWORD_STATE, - KEYWORD_SHORT, KEYWORD_SIGNED, KEYWORD_SIZE_T, KEYWORD_STATIC, KEYWORD_STRING, + KEYWORD_SET, KEYWORD_SHORT, KEYWORD_SIGNAL, KEYWORD_SIGNED, KEYWORD_SIZE_T, KEYWORD_STATIC, KEYWORD_STRING, KEYWORD_STRUCT, KEYWORD_SWITCH, KEYWORD_SYNCHRONIZED, KEYWORD_TASK, KEYWORD_TEMPLATE, KEYWORD_THIS, KEYWORD_THROW, KEYWORD_THROWS, KEYWORD_TRANSIENT, KEYWORD_TRANS, KEYWORD_TRANSITION, @@ -95,7 +95,7 @@ typedef struct sKeywordDesc { const char *name; keywordId id; - short isValid [5]; /* indicates languages for which kw is valid */ + short isValid [6]; /* indicates languages for which kw is valid */ } keywordDesc;
/* Used for reporting the type of object parsed by nextToken (). @@ -135,6 +135,7 @@ DECL_CLASS, DECL_ENUM, DECL_EVENT, + DECL_SIGNAL, DECL_FUNCTION, DECL_IGNORE, /* non-taggable "declaration" */ DECL_INTERFACE, @@ -223,6 +224,7 @@ TAG_EXTERN_VAR, /* external variable declaration */ TAG_MACRO, /* #define s */ TAG_EVENT, /* event */ + TAG_SIGNAL, /* signal */ TAG_LOCAL, /* local variable definition */ TAG_PROPERTY, /* property name */ TAG_COUNT /* must be last */ @@ -250,6 +252,7 @@ static langType Lang_d; static langType Lang_glsl; static langType Lang_ferite; +static langType Lang_vala;
/* Used to index into the CKinds table. */ typedef enum { @@ -314,112 +317,140 @@ { TRUE, 't', "typedef", "typedefs"}, };
+typedef enum { + VK_UNDEFINED = -1, + VK_CLASS, VK_DEFINE, VK_ENUMERATOR, VK_FIELD, + VK_ENUMERATION, VK_INTERFACE, VK_LOCAL, VK_METHOD, + VK_NAMESPACE, VK_PROPERTY, VK_SIGNAL, VK_STRUCT +} valaKind; + +static kindOption ValaKinds [] = { + { TRUE, 'c', "class", "classes"}, + { TRUE, 'd', "macro", "macro definitions"}, + { TRUE, 'e', "enumerator", "enumerators (values inside an enumeration)"}, + { TRUE, 'f', "field", "fields"}, + { TRUE, 'g', "enum", "enumeration names"}, + { TRUE, 'i', "interface", "interfaces"}, + { FALSE, 'l', "local", "local variables"}, + { TRUE, 'm', "method", "methods"}, + { TRUE, 'n', "namespace", "namespaces"}, + { TRUE, 'p', "property", "properties"}, + { TRUE, 'S', "signal", "signals"}, + { TRUE, 's', "struct", "structure names"}, +}; + static const keywordDesc KeywordTable [] = { - /* C++ */ - /* ANSI C | C# Java */ - /* | | | | Vera */ - /* keyword keyword ID | | | | | */ - { "__attribute__", KEYWORD_ATTRIBUTE, { 1, 1, 1, 0, 0 } }, - { "abstract", KEYWORD_ABSTRACT, { 0, 0, 1, 1, 0 } }, - { "bad_state", KEYWORD_BAD_STATE, { 0, 0, 0, 0, 1 } }, - { "bad_trans", KEYWORD_BAD_TRANS, { 0, 0, 0, 0, 1 } }, - { "bind", KEYWORD_BIND, { 0, 0, 0, 0, 1 } }, - { "bind_var", KEYWORD_BIND_VAR, { 0, 0, 0, 0, 1 } }, - { "bit", KEYWORD_BIT, { 0, 0, 0, 0, 1 } }, - { "boolean", KEYWORD_BOOLEAN, { 0, 0, 0, 1, 0 } }, - { "byte", KEYWORD_BYTE, { 0, 0, 0, 1, 0 } }, - { "case", KEYWORD_CASE, { 1, 1, 1, 1, 0 } }, - { "catch", KEYWORD_CATCH, { 0, 1, 1, 0, 0 } }, - { "char", KEYWORD_CHAR, { 1, 1, 1, 1, 0 } }, - { "class", KEYWORD_CLASS, { 0, 1, 1, 1, 1 } }, - { "const", KEYWORD_CONST, { 1, 1, 1, 1, 0 } }, - { "constraint", KEYWORD_CONSTRAINT, { 0, 0, 0, 0, 1 } }, - { "coverage_block", KEYWORD_COVERAGE_BLOCK, { 0, 0, 0, 0, 1 } }, - { "coverage_def", KEYWORD_COVERAGE_DEF, { 0, 0, 0, 0, 1 } }, - { "do", KEYWORD_DO, { 1, 1, 1, 1, 0 } }, - { "default", KEYWORD_DEFAULT, { 1, 1, 1, 1, 0 } }, - { "delegate", KEYWORD_DELEGATE, { 0, 0, 1, 0, 0 } }, - { "delete", KEYWORD_DELETE, { 0, 1, 0, 0, 0 } }, - { "double", KEYWORD_DOUBLE, { 1, 1, 1, 1, 0 } }, - { "else", KEYWORD_ELSE, { 1, 1, 0, 1, 0 } }, - { "enum", KEYWORD_ENUM, { 1, 1, 1, 1, 1 } }, - { "event", KEYWORD_EVENT, { 0, 0, 1, 0, 1 } }, - { "explicit", KEYWORD_EXPLICIT, { 0, 1, 1, 0, 0 } }, - { "extends", KEYWORD_EXTENDS, { 0, 0, 0, 1, 1 } }, - { "extern", KEYWORD_EXTERN, { 1, 1, 1, 0, 1 } }, - { "final", KEYWORD_FINAL, { 0, 0, 0, 1, 0 } }, - { "float", KEYWORD_FLOAT, { 1, 1, 1, 1, 0 } }, - { "for", KEYWORD_FOR, { 1, 1, 1, 1, 0 } }, - { "friend", KEYWORD_FRIEND, { 0, 1, 0, 0, 0 } }, - { "function", KEYWORD_FUNCTION, { 0, 0, 0, 0, 1 } }, - { "goto", KEYWORD_GOTO, { 1, 1, 1, 1, 0 } }, - { "if", KEYWORD_IF, { 1, 1, 1, 1, 0 } }, - { "implements", KEYWORD_IMPLEMENTS, { 0, 0, 0, 1, 0 } }, - { "import", KEYWORD_IMPORT, { 0, 1, 0, 1, 0 } }, /* D */ - { "inline", KEYWORD_INLINE, { 0, 1, 0, 0, 0 } }, - { "inout", KEYWORD_INOUT, { 0, 0, 0, 0, 1 } }, - { "input", KEYWORD_INPUT, { 0, 0, 0, 0, 1 } }, - { "int", KEYWORD_INT, { 1, 1, 1, 1, 0 } }, - { "integer", KEYWORD_INTEGER, { 0, 0, 0, 0, 1 } }, - { "interface", KEYWORD_INTERFACE, { 0, 0, 1, 1, 1 } }, - { "internal", KEYWORD_INTERNAL, { 0, 0, 1, 0, 0 } }, - { "local", KEYWORD_LOCAL, { 0, 0, 0, 0, 1 } }, - { "long", KEYWORD_LONG, { 1, 1, 1, 1, 0 } }, - { "m_bad_state", KEYWORD_M_BAD_STATE, { 0, 0, 0, 0, 1 } }, - { "m_bad_trans", KEYWORD_M_BAD_TRANS, { 0, 0, 0, 0, 1 } }, - { "m_state", KEYWORD_M_STATE, { 0, 0, 0, 0, 1 } }, - { "m_trans", KEYWORD_M_TRANS, { 0, 0, 0, 0, 1 } }, - { "mutable", KEYWORD_MUTABLE, { 0, 1, 0, 0, 0 } }, - { "module", KEYWORD_MODULE, { 0, 1, 0, 0, 0 } }, /* D */ - { "namespace", KEYWORD_NAMESPACE, { 0, 1, 1, 0, 0 } }, - { "native", KEYWORD_NATIVE, { 0, 0, 0, 1, 0 } }, - { "new", KEYWORD_NEW, { 0, 1, 1, 1, 0 } }, - { "newcov", KEYWORD_NEWCOV, { 0, 0, 0, 0, 1 } }, - { "operator", KEYWORD_OPERATOR, { 0, 1, 1, 0, 0 } }, - { "output", KEYWORD_OUTPUT, { 0, 0, 0, 0, 1 } }, - { "overload", KEYWORD_OVERLOAD, { 0, 1, 0, 0, 0 } }, - { "override", KEYWORD_OVERRIDE, { 0, 0, 1, 0, 0 } }, - { "package", KEYWORD_PACKAGE, { 0, 0, 0, 1, 0 } }, - { "packed", KEYWORD_PACKED, { 0, 0, 0, 0, 1 } }, - { "port", KEYWORD_PORT, { 0, 0, 0, 0, 1 } }, - { "private", KEYWORD_PRIVATE, { 0, 1, 1, 1, 0 } }, - { "program", KEYWORD_PROGRAM, { 0, 0, 0, 0, 1 } }, - { "protected", KEYWORD_PROTECTED, { 0, 1, 1, 1, 1 } }, - { "public", KEYWORD_PUBLIC, { 0, 1, 1, 1, 1 } }, - { "register", KEYWORD_REGISTER, { 1, 1, 0, 0, 0 } }, - { "return", KEYWORD_RETURN, { 1, 1, 1, 1, 0 } }, - { "shadow", KEYWORD_SHADOW, { 0, 0, 0, 0, 1 } }, - { "short", KEYWORD_SHORT, { 1, 1, 1, 1, 0 } }, - { "signed", KEYWORD_SIGNED, { 1, 1, 0, 0, 0 } }, - { "size_t", KEYWORD_SIZE_T, { 1, 1, 0, 0, 0 } }, - { "state", KEYWORD_STATE, { 0, 0, 0, 0, 1 } }, - { "static", KEYWORD_STATIC, { 1, 1, 1, 1, 1 } }, - { "string", KEYWORD_STRING, { 0, 0, 1, 0, 1 } }, - { "struct", KEYWORD_STRUCT, { 1, 1, 1, 0, 0 } }, - { "switch", KEYWORD_SWITCH, { 1, 1, 1, 1, 0 } }, - { "synchronized", KEYWORD_SYNCHRONIZED, { 0, 0, 0, 1, 0 } }, - { "task", KEYWORD_TASK, { 0, 0, 0, 0, 1 } }, - { "template", KEYWORD_TEMPLATE, { 0, 1, 0, 0, 0 } }, - { "this", KEYWORD_THIS, { 0, 0, 1, 1, 0 } }, /* allow D ctor tags */ - { "throw", KEYWORD_THROW, { 0, 1, 1, 1, 0 } }, - { "throws", KEYWORD_THROWS, { 0, 0, 0, 1, 0 } }, - { "trans", KEYWORD_TRANS, { 0, 0, 0, 0, 1 } }, - { "transition", KEYWORD_TRANSITION, { 0, 0, 0, 0, 1 } }, - { "transient", KEYWORD_TRANSIENT, { 0, 0, 0, 1, 0 } }, - { "try", KEYWORD_TRY, { 0, 1, 1, 0, 0 } }, - { "typedef", KEYWORD_TYPEDEF, { 1, 1, 1, 0, 1 } }, - { "typename", KEYWORD_TYPENAME, { 0, 1, 0, 0, 0 } }, - { "uint", KEYWORD_UINT, { 0, 0, 1, 0, 0 } }, - { "ulong", KEYWORD_ULONG, { 0, 0, 1, 0, 0 } }, - { "union", KEYWORD_UNION, { 1, 1, 0, 0, 0 } }, - { "unsigned", KEYWORD_UNSIGNED, { 1, 1, 1, 0, 0 } }, - { "ushort", KEYWORD_USHORT, { 0, 0, 1, 0, 0 } }, - { "using", KEYWORD_USING, { 0, 1, 1, 0, 0 } }, - { "virtual", KEYWORD_VIRTUAL, { 0, 1, 1, 0, 1 } }, - { "void", KEYWORD_VOID, { 1, 1, 1, 1, 1 } }, - { "volatile", KEYWORD_VOLATILE, { 1, 1, 1, 1, 0 } }, - { "wchar_t", KEYWORD_WCHAR_T, { 1, 1, 1, 0, 0 } }, - { "while", KEYWORD_WHILE, { 1, 1, 1, 1, 0 } } + /* C++ */ + /* ANSI C | C# Java */ + /* | | | | Vera */ + /* | | | | | Vala */ + /* keyword keyword ID | | | | | | */ + { "__attribute__", KEYWORD_ATTRIBUTE, { 1, 1, 1, 0, 0, 0 } }, + { "abstract", KEYWORD_ABSTRACT, { 0, 0, 1, 1, 0, 1 } }, + { "bad_state", KEYWORD_BAD_STATE, { 0, 0, 0, 0, 1, 0 } }, + { "bad_trans", KEYWORD_BAD_TRANS, { 0, 0, 0, 0, 1, 0 } }, + { "bind", KEYWORD_BIND, { 0, 0, 0, 0, 1, 0 } }, + { "bind_var", KEYWORD_BIND_VAR, { 0, 0, 0, 0, 1, 0 } }, + { "bit", KEYWORD_BIT, { 0, 0, 0, 0, 1, 0 } }, + { "boolean", KEYWORD_BOOLEAN, { 0, 0, 0, 1, 0, 0 } }, + { "byte", KEYWORD_BYTE, { 0, 0, 0, 1, 0, 0 } }, + { "case", KEYWORD_CASE, { 1, 1, 1, 1, 0, 1 } }, + { "catch", KEYWORD_CATCH, { 0, 1, 1, 0, 0, 1 } }, + { "char", KEYWORD_CHAR, { 1, 1, 1, 1, 0, 1 } }, + { "class", KEYWORD_CLASS, { 0, 1, 1, 1, 1, 1 } }, + { "const", KEYWORD_CONST, { 1, 1, 1, 1, 0, 1 } }, + { "constraint", KEYWORD_CONSTRAINT, { 0, 0, 0, 0, 1, 0 } }, + { "coverage_block", KEYWORD_COVERAGE_BLOCK, { 0, 0, 0, 0, 1, 0 } }, + { "coverage_def", KEYWORD_COVERAGE_DEF, { 0, 0, 0, 0, 1, 0 } }, + { "do", KEYWORD_DO, { 1, 1, 1, 1, 0, 1 } }, + { "default", KEYWORD_DEFAULT, { 1, 1, 1, 1, 0, 1 } }, + { "delegate", KEYWORD_DELEGATE, { 0, 0, 1, 0, 0, 1 } }, + { "delete", KEYWORD_DELETE, { 0, 1, 0, 0, 0, 1 } }, + { "double", KEYWORD_DOUBLE, { 1, 1, 1, 1, 0, 1 } }, + { "else", KEYWORD_ELSE, { 1, 1, 0, 1, 0, 1 } }, + { "enum", KEYWORD_ENUM, { 1, 1, 1, 1, 1, 1 } }, + { "errordomain", KEYWORD_ENUM, { 0, 0, 0, 0, 0, 1 } }, /* errordomain behaves like enum */ + { "event", KEYWORD_EVENT, { 0, 0, 1, 0, 1, 0 } }, + { "explicit", KEYWORD_EXPLICIT, { 0, 1, 1, 0, 0, 0 } }, + { "extends", KEYWORD_EXTENDS, { 0, 0, 0, 1, 1, 0 } }, + { "extern", KEYWORD_EXTERN, { 1, 1, 1, 0, 1, 1 } }, + { "final", KEYWORD_FINAL, { 0, 0, 0, 1, 0, 0 } }, + { "finally", KEYWORD_FINALLY, { 0, 0, 0, 0, 0, 1 } }, + { "float", KEYWORD_FLOAT, { 1, 1, 1, 1, 0, 1 } }, + { "for", KEYWORD_FOR, { 1, 1, 1, 1, 0, 1 } }, + { "friend", KEYWORD_FRIEND, { 0, 1, 0, 0, 0, 0 } }, + { "function", KEYWORD_FUNCTION, { 0, 0, 0, 0, 1, 0 } }, + { "get", KEYWORD_GET, { 0, 0, 0, 0, 0, 1 } }, + { "goto", KEYWORD_GOTO, { 1, 1, 1, 1, 0, 1 } }, + { "if", KEYWORD_IF, { 1, 1, 1, 1, 0, 1 } }, + { "implements", KEYWORD_IMPLEMENTS, { 0, 0, 0, 1, 0, 0 } }, + { "import", KEYWORD_IMPORT, { 0, 1, 0, 1, 0, 0 } }, /* D */ + { "inline", KEYWORD_INLINE, { 0, 1, 0, 0, 0, 1 } }, + { "inout", KEYWORD_INOUT, { 0, 0, 0, 0, 1, 0 } }, + { "input", KEYWORD_INPUT, { 0, 0, 0, 0, 1, 0 } }, + { "int", KEYWORD_INT, { 1, 1, 1, 1, 0, 1 } }, + { "integer", KEYWORD_INTEGER, { 0, 0, 0, 0, 1, 0 } }, + { "interface", KEYWORD_INTERFACE, { 0, 0, 1, 1, 1, 1 } }, + { "internal", KEYWORD_INTERNAL, { 0, 0, 1, 0, 0, 0 } }, + { "local", KEYWORD_LOCAL, { 0, 0, 0, 0, 1, 0 } }, + { "long", KEYWORD_LONG, { 1, 1, 1, 1, 0, 1 } }, + { "m_bad_state", KEYWORD_M_BAD_STATE, { 0, 0, 0, 0, 1, 0 } }, + { "m_bad_trans", KEYWORD_M_BAD_TRANS, { 0, 0, 0, 0, 1, 0 } }, + { "m_state", KEYWORD_M_STATE, { 0, 0, 0, 0, 1, 0 } }, + { "m_trans", KEYWORD_M_TRANS, { 0, 0, 0, 0, 1, 0 } }, + { "mutable", KEYWORD_MUTABLE, { 0, 1, 0, 0, 0, 0 } }, + { "module", KEYWORD_MODULE, { 0, 1, 0, 0, 0, 0 } }, /* D */ + { "namespace", KEYWORD_NAMESPACE, { 0, 1, 1, 0, 0, 1 } }, + { "native", KEYWORD_NATIVE, { 0, 0, 0, 1, 0, 0 } }, + { "new", KEYWORD_NEW, { 0, 1, 1, 1, 0, 1 } }, + { "newcov", KEYWORD_NEWCOV, { 0, 0, 0, 0, 1, 0 } }, + { "operator", KEYWORD_OPERATOR, { 0, 1, 1, 0, 0, 0 } }, + { "output", KEYWORD_OUTPUT, { 0, 0, 0, 0, 1, 0 } }, + { "overload", KEYWORD_OVERLOAD, { 0, 1, 0, 0, 0, 0 } }, + { "override", KEYWORD_OVERRIDE, { 0, 0, 1, 0, 0, 1 } }, + { "package", KEYWORD_PACKAGE, { 0, 0, 0, 1, 0, 0 } }, + { "packed", KEYWORD_PACKED, { 0, 0, 0, 0, 1, 0 } }, + { "port", KEYWORD_PORT, { 0, 0, 0, 0, 1, 0 } }, + { "private", KEYWORD_PRIVATE, { 0, 1, 1, 1, 0, 1 } }, + { "program", KEYWORD_PROGRAM, { 0, 0, 0, 0, 1, 0 } }, + { "protected", KEYWORD_PROTECTED, { 0, 1, 1, 1, 1, 1 } }, + { "public", KEYWORD_PUBLIC, { 0, 1, 1, 1, 1, 1 } }, + { "register", KEYWORD_REGISTER, { 1, 1, 0, 0, 0, 0 } }, + { "return", KEYWORD_RETURN, { 1, 1, 1, 1, 0, 1 } }, + { "set", KEYWORD_SET, { 0, 0, 0, 0, 0, 1 } }, + { "shadow", KEYWORD_SHADOW, { 0, 0, 0, 0, 1, 0 } }, + { "short", KEYWORD_SHORT, { 1, 1, 1, 1, 0, 1 } }, + { "signal", KEYWORD_SIGNAL, { 0, 0, 0, 0, 0, 1 } }, + { "signed", KEYWORD_SIGNED, { 1, 1, 0, 0, 0, 0 } }, + { "size_t", KEYWORD_SIZE_T, { 1, 1, 0, 0, 0, 1 } }, + { "state", KEYWORD_STATE, { 0, 0, 0, 0, 1, 0 } }, + { "static", KEYWORD_STATIC, { 1, 1, 1, 1, 1, 1 } }, + { "string", KEYWORD_STRING, { 0, 0, 1, 0, 1, 1 } }, + { "struct", KEYWORD_STRUCT, { 1, 1, 1, 0, 0, 1 } }, + { "switch", KEYWORD_SWITCH, { 1, 1, 1, 1, 0, 1 } }, + { "synchronized", KEYWORD_SYNCHRONIZED, { 0, 0, 0, 1, 0, 0 } }, + { "task", KEYWORD_TASK, { 0, 0, 0, 0, 1, 0 } }, + { "template", KEYWORD_TEMPLATE, { 0, 1, 0, 0, 0, 0 } }, + { "this", KEYWORD_THIS, { 0, 0, 1, 1, 0, 1 } }, /* allow D ctor tags */ + { "throw", KEYWORD_THROW, { 0, 1, 1, 1, 0, 1 } }, + { "throws", KEYWORD_THROWS, { 0, 0, 0, 1, 0, 1 } }, + { "trans", KEYWORD_TRANS, { 0, 0, 0, 0, 1, 0 } }, + { "transition", KEYWORD_TRANSITION, { 0, 0, 0, 0, 1, 0 } }, + { "transient", KEYWORD_TRANSIENT, { 0, 0, 0, 1, 0, 0 } }, + { "try", KEYWORD_TRY, { 0, 1, 1, 0, 0, 1 } }, + { "typedef", KEYWORD_TYPEDEF, { 1, 1, 1, 0, 1, 0 } }, + { "typename", KEYWORD_TYPENAME, { 0, 1, 0, 0, 0, 0 } }, + { "uint", KEYWORD_UINT, { 0, 0, 1, 0, 0, 1 } }, + { "ulong", KEYWORD_ULONG, { 0, 0, 1, 0, 0, 1 } }, + { "union", KEYWORD_UNION, { 1, 1, 0, 0, 0, 0 } }, + { "unsigned", KEYWORD_UNSIGNED, { 1, 1, 1, 0, 0, 0 } }, + { "ushort", KEYWORD_USHORT, { 0, 0, 1, 0, 0, 1 } }, + { "using", KEYWORD_USING, { 0, 1, 1, 0, 0, 1 } }, + { "virtual", KEYWORD_VIRTUAL, { 0, 1, 1, 0, 1, 1 } }, + { "void", KEYWORD_VOID, { 1, 1, 1, 1, 1, 1 } }, + { "volatile", KEYWORD_VOLATILE, { 1, 1, 1, 1, 0, 0 } }, + { "wchar_t", KEYWORD_WCHAR_T, { 1, 1, 1, 0, 0, 0 } }, + { "while", KEYWORD_WHILE, { 1, 1, 1, 1, 0, 1 } } };
@@ -754,19 +785,31 @@ static boolean isContextualStatement (const statementInfo *const st) { boolean result = FALSE; - if (st != NULL) switch (st->declaration) - { - case DECL_CLASS: - case DECL_ENUM: - case DECL_INTERFACE: - case DECL_NAMESPACE: - case DECL_STRUCT: - case DECL_UNION: - result = TRUE; - break;
- default: result = FALSE; break; - } + if (st != NULL) + { + if (isLanguage (Lang_vala)) + { + /* All can be a contextual statment as properties can be of any type */ + result = TRUE; + } + else + { + switch (st->declaration) + { + case DECL_CLASS: + case DECL_ENUM: + case DECL_INTERFACE: + case DECL_NAMESPACE: + case DECL_STRUCT: + case DECL_UNION: + result = TRUE; + break; + + default: result = FALSE; break; + } + } + } return result; }
@@ -925,6 +968,28 @@ return result; }
+static valaKind valaTagKind (const tagType type) +{ + valaKind result = VK_UNDEFINED; + switch (type) + { + case TAG_CLASS: result = VK_CLASS; break; + case TAG_ENUM: result = VK_ENUMERATION; break; + case TAG_ENUMERATOR: result = VK_ENUMERATOR; break; + case TAG_SIGNAL: result = VK_SIGNAL; break; + case TAG_FIELD: result = VK_FIELD ; break; + case TAG_INTERFACE: result = VK_INTERFACE; break; + case TAG_LOCAL: result = VK_LOCAL; break; + case TAG_METHOD: result = VK_METHOD; break; + case TAG_NAMESPACE: result = VK_NAMESPACE; break; + case TAG_PROPERTY: result = VK_PROPERTY; break; + case TAG_STRUCT: result = VK_STRUCT; break; + + default: Assert ("Bad Vala tag type" == NULL); break; + } + return result; +} + static javaKind javaTagKind (const tagType type) { javaKind result = JK_UNDEFINED; @@ -948,6 +1013,8 @@ result = JavaKinds [javaTagKind (type)].name; else if (isLanguage (Lang_csharp)) result = CsharpKinds [csharpTagKind (type)].name; + else if (isLanguage (Lang_vala)) + result = ValaKinds [valaTagKind (type)].name; else result = CKinds [cTagKind (type)].name; return result; @@ -956,10 +1023,12 @@ static int tagLetter (const tagType type) { int result; - if (isLanguage (Lang_java)) + if (isLanguage (Lang_csharp)) + result = CsharpKinds [csharpTagKind (type)].letter; + else if (isLanguage (Lang_java)) result = JavaKinds [javaTagKind (type)].letter; - if (isLanguage (Lang_csharp)) - result = CsharpKinds [csharpTagKind (type)].letter; + else if (isLanguage (Lang_vala)) + result = ValaKinds [valaTagKind (type)].letter; else result = CKinds [cTagKind (type)].letter; return result; @@ -1050,7 +1119,7 @@ vStringValue (st->parentClasses); } if (st->implementation != IMP_DEFAULT && - (isLanguage (Lang_cpp) || isLanguage (Lang_csharp) || + (isLanguage (Lang_cpp) || isLanguage (Lang_csharp) || isLanguage (Lang_vala) || isLanguage (Lang_java) || isLanguage (Lang_d) || isLanguage (Lang_ferite))) { tag->extensionFields.implementation = @@ -1131,7 +1200,7 @@ if (isLanguage (Lang_c) || isLanguage (Lang_cpp)) vStringCatS (scope, "::"); else if (isLanguage (Lang_java) || - isLanguage (Lang_d) || isLanguage (Lang_ferite) || isLanguage (Lang_csharp)) + isLanguage (Lang_d) || isLanguage (Lang_ferite) || isLanguage (Lang_csharp) || isLanguage (Lang_vala)) vStringCatS (scope, "."); }
@@ -1301,7 +1370,7 @@ { if (isType (nameToken, TOKEN_NAME)) { - const tagType type = (isLanguage (Lang_java) || isLanguage (Lang_csharp)) + const tagType type = (isLanguage (Lang_java) || isLanguage (Lang_csharp) || isLanguage (Lang_vala)) ? TAG_METHOD : TAG_FUNCTION; const boolean isFileScope = (boolean) (st->member.access == ACCESS_PRIVATE || @@ -1316,11 +1385,11 @@ { if (! isType (nameToken, TOKEN_NAME)) ; - else if (isLanguage (Lang_java) || isLanguage (Lang_csharp)) + else if (isLanguage (Lang_java) || isLanguage (Lang_csharp) || isLanguage (Lang_vala)) qualifyFunctionTag (st, nameToken); else if (st->scope == SCOPE_TYPEDEF) makeTag (nameToken, st, TRUE, TAG_TYPEDEF); - else if (isValidTypeSpecifier (st->declaration) && ! isLanguage (Lang_csharp)) + else if (isValidTypeSpecifier (st->declaration) && ! (isLanguage (Lang_csharp) || isLanguage (Lang_vala))) makeTag (nameToken, st, TRUE, TAG_PROTOTYPE); }
@@ -1332,7 +1401,9 @@ const tagType type = declToTagType (st->declaration);
if (type != TAG_UNDEFINED) - makeTag (nameToken, st, (boolean) (! isLanguage (Lang_java) && ! isLanguage (Lang_csharp)), type); + makeTag (nameToken, st, (boolean) (! isLanguage (Lang_java) && + ! isLanguage (Lang_csharp) && + ! isLanguage (Lang_vala)), type); } }
@@ -1374,7 +1445,7 @@ { if (isMember (st)) { - if (isLanguage (Lang_java) || isLanguage (Lang_csharp)) + if (isLanguage (Lang_java) || isLanguage (Lang_csharp) || isLanguage (Lang_vala)) makeTag (nameToken, st, (boolean) (st->member.access == ACCESS_PRIVATE), TAG_FIELD); @@ -1588,7 +1659,7 @@ { st->declaration = declaration;
- if (declaration == DECL_NAMESPACE && !isLanguage (Lang_csharp)) + if (declaration == DECL_NAMESPACE && !(isLanguage (Lang_csharp) || isLanguage (Lang_vala))) { /* In C++ a namespace is specified one level at a time. */ return; @@ -1840,6 +1911,11 @@ st->declaration = DECL_EVENT; break;
+ case KEYWORD_SIGNAL: + if (isLanguage (Lang_vala)) + st->declaration = DECL_SIGNAL; + break; + case KEYWORD_EXTERN: if (! isLanguage (Lang_csharp) || !st->gotName) { @@ -1850,7 +1926,7 @@ break;
case KEYWORD_STATIC: - if (! isLanguage (Lang_java) && ! isLanguage (Lang_csharp)) + if (! isLanguage (Lang_java) && ! isLanguage (Lang_csharp) && ! isLanguage (Lang_vala)) { /*reinitStatement (st, FALSE);*/ st->scope = SCOPE_STATIC; @@ -2071,7 +2147,7 @@ cppUngetc (c); if (isOneOf (c, "{;,=")) ; - else if (isLanguage (Lang_java)) + else if (isLanguage (Lang_java) || isLanguage (Lang_vala)) skipJavaThrows (st); else { @@ -2217,7 +2293,7 @@ --depth; } if (st->argEndPosition == 0) - { + { if (useFile()) st->argEndPosition = ftell(File.fp); else @@ -2300,7 +2376,8 @@ if (isLanguage (Lang_c) || isLanguage (Lang_cpp)) vStringCatS (st->context->name, "::"); else if (isLanguage (Lang_java) || - isLanguage (Lang_d) || isLanguage (Lang_ferite) || isLanguage (Lang_csharp)) + isLanguage (Lang_d) || isLanguage (Lang_ferite) || + isLanguage (Lang_csharp) || isLanguage (Lang_vala)) vStringCatS (st->context->name, "."); } vStringCat (st->context->name, token->name); @@ -2329,7 +2406,7 @@ else { cppUngetc (c); - if (((isLanguage (Lang_cpp) || isLanguage (Lang_csharp)) && + if (((isLanguage (Lang_cpp) || isLanguage (Lang_csharp) || isLanguage (Lang_vala)) && inheritingDeclaration (st->declaration)) || isLanguage (Lang_d)) { @@ -2542,10 +2619,10 @@ if (isType (token, TOKEN_SEMICOLON)) isEnd = TRUE; else if (isType (token, TOKEN_BRACE_CLOSE)) - /* Java, D, C# do not require semicolons to end a block. Neither do C++ - * namespaces. All other blocks require a semicolon to terminate them. + /* Java, D, C#, Vala do not require semicolons to end a block. Neither do + * C++ namespaces. All other blocks require a semicolon to terminate them. */ - isEnd = (boolean) (isLanguage (Lang_java) || isLanguage (Lang_d) || isLanguage (Lang_csharp) || + isEnd = (boolean) (isLanguage (Lang_java) || isLanguage (Lang_d) || isLanguage (Lang_csharp) || isLanguage (Lang_vala) || ! isContextualStatement (st)); else isEnd = FALSE; @@ -2626,12 +2703,36 @@ else if (isContextualStatement (st)) { tokenInfo *name_token = (tokenInfo *)prev; + if (isType (name_token, TOKEN_NAME)) { - copyToken (st->blockName, name_token); + if (!isLanguage (Lang_vala)) + copyToken (st->blockName, name_token); + else + { + switch (st->declaration) + { + case DECL_CLASS: + case DECL_ENUM: + case DECL_INTERFACE: + case DECL_NAMESPACE: + case DECL_STRUCT: + copyToken (st->blockName, name_token); + break; + + /* anything else can be a property */ + default: + /* makeTag (prev, st, FALSE, TAG_PROPERTY); */ + /* FIXME: temporary hack to get properties shown */ + makeTag (prev, st, FALSE, TAG_FIELD); + break; + } + } } else if (isLanguage (Lang_csharp)) + { makeTag (prev, st, FALSE, TAG_PROPERTY); + } else { tokenInfo *contextual_token = (tokenInfo *)prev; @@ -2735,7 +2836,7 @@ boolean retry;
Assert (passCount < 3); - cppInit ((boolean) (passCount > 1), isLanguage (Lang_csharp)); + cppInit ((boolean) (passCount > 1), (isLanguage (Lang_csharp) || isLanguage (Lang_vala)));
exception = (exception_t) setjmp (Exception); retry = FALSE; @@ -2819,6 +2920,13 @@ buildKeywordHash (language, 2); }
+static void initializeValaParser (const langType language) +{ + contextual_fake_count = 0; + Lang_vala = language; + buildKeywordHash (language, 5); +} + extern parserDefinition* CParser (void) { static const char *const extensions [] = { "c", "pc", "sc", NULL }; @@ -2909,4 +3017,16 @@ def->initialize = initializeCsharpParser; return def; } + +extern parserDefinition* ValaParser (void) +{ + static const char *const extensions [] = { "vala", NULL }; + parserDefinition* def = parserNew ("Vala"); + def->kinds = ValaKinds; + def->kindCount = KIND_COUNT (ValaKinds); + def->extensions = extensions; + def->parser2 = findCTags; + def->initialize = initializeValaParser; + return def; +} /* vi:set tabstop=8 shiftwidth=4: */
Modified: trunk/tagmanager/parsers.h =================================================================== --- trunk/tagmanager/parsers.h 2008-11-11 09:27:49 UTC (rev 3204) +++ trunk/tagmanager/parsers.h 2008-11-11 16:33:20 UTC (rev 3205) @@ -47,7 +47,8 @@ HtmlParser, \ F77Parser, \ GLSLParser, \ - MatlabParser + MatlabParser, \ + ValaParser
/* langType of each parser @@ -84,6 +85,7 @@ 30 F77Parser 31 GLSLParser 32 MatlabParser +33 ValaParser */ #endif /* _PARSERS_H */
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.