SF.net SVN: geany: [1744] trunk

eht16 at users.sourceforge.net eht16 at xxxxx
Thu Jul 26 09:50:12 UTC 2007


Revision: 1744
          http://geany.svn.sourceforge.net/geany/?rev=1744&view=rev
Author:   eht16
Date:     2007-07-26 02:50:12 -0700 (Thu, 26 Jul 2007)

Log Message:
-----------
Add filetype Haxe (patch by blackdog, thank you).

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/THANKS
    trunk/data/filetype_extensions.conf
    trunk/src/filetypes.c
    trunk/src/filetypes.h
    trunk/src/highlighting.c
    trunk/src/highlighting.h
    trunk/src/symbols.c
    trunk/src/templates.c
    trunk/tagmanager/Makefile.am
    trunk/tagmanager/makefile.win32
    trunk/tagmanager/parsers.h

Added Paths:
-----------
    trunk/data/filetypes.haxe
    trunk/tagmanager/haxe.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2007-07-25 11:59:34 UTC (rev 1743)
+++ trunk/ChangeLog	2007-07-26 09:50:12 UTC (rev 1744)
@@ -1,3 +1,13 @@
+2007-07-26  Enrico Tröger  <enrico.troeger at uvena.de>
+
+ * THANKS, data/filetype_extensions.conf, data/filetypes.haxe,
+   tagmanager/haxe.c, tagmanager/parsers.h, tagmanager/makefile.win32,
+   tagmanager/Makefile.am, src/templates.c, src/highlighting.c,
+   src/highlighting.h, src/callbacks.c, src/filetypes.c,
+   src/filetypes.h, src/symbols.c:
+   Add filetype Haxe (patch by blackdog, thank you).
+
+
 2007-07-25  Nick Treleaven  <nick.treleaven at btinternet.com>
 
  * po/POTFILES.in:

Modified: trunk/THANKS
===================================================================
--- trunk/THANKS	2007-07-25 11:59:34 UTC (rev 1743)
+++ trunk/THANKS	2007-07-26 09:50:12 UTC (rev 1744)
@@ -35,6 +35,7 @@
 Alexander Rodin <rodin(dot)alexander(at)gmail(dot)com> - class builder patch
 Shiv <shivakumar(dot)gn(at)gmail(dot)com> - Sun Studio compiler compatibility patch
 Jean-François Wauthy <pollux(at)xfce(dot)org> - Symbol list icons patch
+blackdog  <blackdog(at)ipowerhouse(dot)com> - Haxe filetype patch
 
 Translators:
 ------------

Modified: trunk/data/filetype_extensions.conf
===================================================================
--- trunk/data/filetype_extensions.conf	2007-07-25 11:59:34 UTC (rev 1743)
+++ trunk/data/filetype_extensions.conf	2007-07-26 09:50:12 UTC (rev 1744)
@@ -32,4 +32,5 @@
 VHDL=*.vhd;*.vhdl;
 Diff=*.diff;*.patch;*.rej;
 Conf=*.conf;*.ini;config;*rc;*.cfg;
+Haxe=*.hx;
 None=*;

Added: trunk/data/filetypes.haxe
===================================================================
--- trunk/data/filetypes.haxe	                        (rev 0)
+++ trunk/data/filetypes.haxe	2007-07-26 09:50:12 UTC (rev 1744)
@@ -0,0 +1,58 @@
+# For complete documentation of this file, please see Geany's main documentation
+[styling]
+# foreground;background;bold;italic
+default=0x000000;0xffffff;false;false
+comment=0xd00000;0xffffff;false;false
+commentline=0xd00000;0xffffff;false;false
+commentdoc=0x3f5fbf;0xffffff;false;false
+number=0x007f00;0xffffff;false;false
+word=0x00007f;0xffffff;true;false
+word2=0x991111;0xffffff;true;false
+string=0xff901e;0xffffff;false;false
+character=0xff901e;0xffffff;false;false
+uuid=0x404080;0xffffff;false;false
+preprocessor=0x007F7F;0xffffff;false;false
+operator=0x301010;0xffffff;false;false
+identifier=0x000000;0xffffff;false;false
+stringeol=0x000000;0xe0c0e0;false;false
+verbatim=0x101030;0xffffff;false;false
+regex=0x105090;0xffffff;false;false
+commentlinedoc=0x3f5fbf;0xffffff;true;false
+commentdockeyword=0x3f5fbf;0xffffff;true;true
+commentdockeyworderror=0x3f5fbf;0xffffff;false;false
+globalclass=0x0000d0;0xffffff;true;false
+
+[keywords]
+# all items must be in one line
+primary=abstract break case catch class const continue trace do else enum extends finally for function goto if implements import in instanceof int interface new package private public return static super switch this throw throws transient try typeof var void volatile while with
+secondary=Bool Float Int null Void Enum String
+classes=Array ArrayAccess Class Date DateTools EReg Hash IntHash IntIter Iterable Iterator Lambda List Math Null Protected Reflect Std StringBuf StringTools Type UInt ValueType Xml XmlType
+
+
+[settings]
+# the following characters are these which a "word" can contains, see documentation
+#wordchars=_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
+
+# if only single comment char is supported like # in this file, leave comment_close blank
+comment_open=//
+comment_close=
+
+# set to false if a comment character/string should start at column 0 of a line, true uses any
+# indentation of the line, e.g. setting to true causes the following on pressing CTRL+d
+	#command_example();
+# setting to false would generate this
+#	command_example();
+# This setting works only for single line comments
+comment_use_indent=true
+
+# context action command (please see Geany's main documentation for details)
+context_action_cmd=
+
+[build_settings]
+# %f will be replaced by the complete filename
+# %e will be replaced by the filename without extension
+# (use only one of it at one time)
+compiler=haxe -neko "%e.n" -cp . "%f"
+run_cmd=neko "%e"
+
+

Modified: trunk/src/filetypes.c
===================================================================
--- trunk/src/filetypes.c	2007-07-25 11:59:34 UTC (rev 1743)
+++ trunk/src/filetypes.c	2007-07-26 09:50:12 UTC (rev 1744)
@@ -76,7 +76,8 @@
 	FILETYPE_UID_LUA,		// 28
 	FILETYPE_UID_HASKELL,	// 29
 	FILETYPE_UID_CS,		// 30
-	FILETYPE_UID_BASIC		// 31
+	FILETYPE_UID_BASIC,		// 31
+	FILETYPE_UID_HAXE		// 32
 };
 
 
@@ -122,6 +123,7 @@
 		case FILETYPE_UID_HASKELL:	return filetypes[GEANY_FILETYPES_HASKELL];
 		case FILETYPE_UID_CS:		return filetypes[GEANY_FILETYPES_CS];
 		case FILETYPE_UID_BASIC:	return filetypes[GEANY_FILETYPES_BASIC];
+		case FILETYPE_UID_HAXE:		return filetypes[GEANY_FILETYPES_HAXE];
 		default: 					return NULL;
 	}
 }
@@ -521,6 +523,18 @@
 	filetypes[GEANY_FILETYPES_CONF]->comment_open = g_strdup("#");
 	filetypes[GEANY_FILETYPES_CONF]->comment_close = NULL;
 
+#define HAXE
+	filetypes[GEANY_FILETYPES_HAXE]->id = GEANY_FILETYPES_HAXE;
+	filetypes[GEANY_FILETYPES_HAXE]->uid = FILETYPE_UID_HAXE;
+	filetypes[GEANY_FILETYPES_HAXE]->lang = 27;
+	filetypes[GEANY_FILETYPES_HAXE]->name = g_strdup("Haxe");
+	filetypes[GEANY_FILETYPES_HAXE]->title = g_strdup(_("Haxe source file"));
+	filetypes[GEANY_FILETYPES_HAXE]->extension = g_strdup("hx");
+	filetypes[GEANY_FILETYPES_HAXE]->pattern = utils_strv_new("*.hx", NULL);
+	filetypes[GEANY_FILETYPES_HAXE]->style_func_ptr = styleset_haxe;
+	filetypes[GEANY_FILETYPES_HAXE]->comment_open = g_strdup("//");
+	filetypes[GEANY_FILETYPES_HAXE]->comment_close = NULL;
+
 #define ALL
 	filetypes[GEANY_FILETYPES_ALL]->id = GEANY_FILETYPES_ALL;
 	filetypes[GEANY_FILETYPES_ALL]->name = g_strdup("None");

Modified: trunk/src/filetypes.h
===================================================================
--- trunk/src/filetypes.h	2007-07-25 11:59:34 UTC (rev 1743)
+++ trunk/src/filetypes.h	2007-07-26 09:50:12 UTC (rev 1744)
@@ -48,6 +48,7 @@
 	GEANY_FILETYPES_CAML,
 	GEANY_FILETYPES_HASKELL,
 	GEANY_FILETYPES_VHDL,
+	GEANY_FILETYPES_HAXE,
 
 	// script languages
 	GEANY_FILETYPES_PERL,

Modified: trunk/src/highlighting.c
===================================================================
--- trunk/src/highlighting.c	2007-07-25 11:59:34 UTC (rev 1743)
+++ trunk/src/highlighting.c	2007-07-26 09:50:12 UTC (rev 1744)
@@ -3225,3 +3225,66 @@
 	set_sci_style(sci, SCE_B_HEXNUMBER, GEANY_FILETYPES_BASIC, 17);
 	set_sci_style(sci, SCE_B_BINNUMBER, GEANY_FILETYPES_BASIC, 18);
 }
+
+static void styleset_haxe_init(void)
+{
+	GKeyFile *config = g_key_file_new();
+	GKeyFile *config_home = g_key_file_new();
+
+	load_keyfiles(config, config_home, GEANY_FILETYPES_HAXE);
+
+	new_style_array(GEANY_FILETYPES_HAXE, 20);
+	styleset_c_like_init(config, config_home, GEANY_FILETYPES_HAXE);
+
+	style_sets[GEANY_FILETYPES_HAXE].keywords = g_new(gchar*, 4);
+
+	get_keyfile_keywords(config, config_home, "keywords", "primary", GEANY_FILETYPES_HAXE, 0, "\
+			abstract break case catch class \
+			continue default do else enum external extends \
+			finally float for function goto if implements import in \
+			interface new package protected public \
+			return static super switch this throw throws \
+			try type var while");
+
+	get_keyfile_keywords(config, config_home, "keywords", "secondary", GEANY_FILETYPES_HAXE, 1, "\
+			Bool Enum Float Int Null Void Dynamic String");
+
+	get_keyfile_keywords(config, config_home, "keywords", "classes", GEANY_FILETYPES_HAXE, 2, "\
+			Array ArrayAccess Class Date DateTools \
+			EReg Enum Hash IntHash IntIter \
+			Iterable Iterator Lambda List Math Protected \
+			Reflect Std  StringBuf StringTools Type \
+			UInt ValueType Void Xml XmlType");
+
+	style_sets[GEANY_FILETYPES_HAXE].keywords[3] = NULL;
+
+	get_keyfile_wordchars(config, config_home, &style_sets[GEANY_FILETYPES_HAXE].wordchars);
+	filetypes_get_config(config, config_home, GEANY_FILETYPES_HAXE);
+
+	g_key_file_free(config);
+	g_key_file_free(config_home);
+}
+
+
+void styleset_haxe(ScintillaObject *sci)
+{
+	const filetype_id ft_id = GEANY_FILETYPES_HAXE;
+
+	styleset_common(sci, 5,ft_id);
+	if (style_sets[GEANY_FILETYPES_HAXE].styling == NULL) styleset_haxe_init();
+
+	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_HAXE].wordchars);
+	SSM(sci, SCI_AUTOCSETMAXHEIGHT, app->autocompletion_max_height, 0);
+
+	SSM(sci, SCI_SETLEXER, SCLEX_CPP, 0);
+
+	SSM(sci, SCI_SETCONTROLCHARSYMBOL, 32, 0);
+
+	SSM(sci, SCI_SETKEYWORDS, 0, (sptr_t) style_sets[GEANY_FILETYPES_HAXE].keywords[0]);
+	SSM(sci, SCI_SETKEYWORDS, 1, (sptr_t) style_sets[GEANY_FILETYPES_HAXE].keywords[1]);
+	SSM(sci, SCI_SETKEYWORDS, 2, (sptr_t) style_sets[GEANY_FILETYPES_HAXE].keywords[2]);
+
+	styleset_c_like(sci, GEANY_FILETYPES_HAXE);
+}
+
+

Modified: trunk/src/highlighting.h
===================================================================
--- trunk/src/highlighting.h	2007-07-25 11:59:34 UTC (rev 1743)
+++ trunk/src/highlighting.h	2007-07-26 09:50:12 UTC (rev 1744)
@@ -99,4 +99,6 @@
 
 void styleset_basic(ScintillaObject *sci);
 
+void styleset_haxe(ScintillaObject *sci);
+
 #endif

Modified: trunk/src/symbols.c
===================================================================
--- trunk/src/symbols.c	2007-07-25 11:59:34 UTC (rev 1743)
+++ trunk/src/symbols.c	2007-07-26 09:50:12 UTC (rev 1744)
@@ -599,6 +599,17 @@
 				NULL);
 			break;
 		}
+		case GEANY_FILETYPES_HAXE:
+		{
+			tag_list_add_groups(tag_store,
+				&(tv_iters.tag_struct), _("Interfaces"), NULL,
+				&(tv_iters.tag_class), _("Classes"), "classviewer-class",
+				&(tv_iters.tag_function), _("Methods"), "classviewer-method",
+				&(tv_iters.tag_variable), _("Variables"), "classviewer-var",
+				NULL);
+
+			break;
+		}
 		case GEANY_FILETYPES_D:
 		default:
 		{

Modified: trunk/src/templates.c
===================================================================
--- trunk/src/templates.c	2007-07-25 11:59:34 UTC (rev 1743)
+++ trunk/src/templates.c	2007-07-26 09:50:12 UTC (rev 1744)
@@ -400,6 +400,7 @@
 		}
 
 		case GEANY_FILETYPES_JS:
+		case GEANY_FILETYPES_HAXE:
 		{
 			line_prefix = "//";
 			break;

Modified: trunk/tagmanager/Makefile.am
===================================================================
--- trunk/tagmanager/Makefile.am	2007-07-25 11:59:34 UTC (rev 1743)
+++ trunk/tagmanager/Makefile.am	2007-07-26 09:50:12 UTC (rev 1744)
@@ -54,6 +54,7 @@
 	sh.c\
 	vhdl.c\
 	ctags.c\
+	haxe.c\
 	entry.c\
 	get.c\
 	keyword.c\

Added: trunk/tagmanager/haxe.c
===================================================================
--- trunk/tagmanager/haxe.c	                        (rev 0)
+++ trunk/tagmanager/haxe.c	2007-07-26 09:50:12 UTC (rev 1744)
@@ -0,0 +1,218 @@
+/*
+ *	 Copyright (c) 2007, Ritchie Turner
+ *
+ *	 This source code is released for free distribution under the terms of the
+ *	 GNU General Public License.
+ *
+ * 		borrowed from PHP
+ */
+
+/*
+ *	 INCLUDE FILES
+ */
+#include "general.h"	/* must always come first */
+#include <ctype.h>	/* to define isalpha () */
+#include <setjmp.h>
+#ifdef DEBUG
+#include <stdio.h>
+#endif
+#include <string.h>
+#include "main.h"
+#include "entry.h"
+#include "keyword.h"
+#include "parse.h"
+#include "read.h"
+#include "vstring.h"
+
+/*
+ *	 MACROS
+ */
+#define isType(token,t)		(boolean) ((token)->type == (t))
+#define isKeyword(token,k)	(boolean) ((token)->keyword == (k))
+
+/*
+ *	DATA DEFINITIONS
+ */
+
+//static jmp_buf Exception;
+
+typedef enum {
+	HXTAG_METHODS,
+	HXTAG_CLASS,
+	HXTAG_ENUM,
+	HXTAG_VARIABLE,
+	HXTAG_INTERFACE,
+	HXTAG_COUNT
+} hxKind;
+
+static kindOption HxKinds [] = {
+	{ TRUE,  'm', "method",	  "methods"			   },
+	{ TRUE,  'c', "class",		  "classes"			   },
+	{ TRUE,  'e', "enums",		  "enumerations"			   },
+	{ TRUE,  'v', "variable",	  "variables"	   },
+	{ TRUE,  'i', "interface",	  "interfaces"	   }
+
+};
+
+static void findHxTags (void)
+{
+    vString *name = vStringNew ();
+    vString *clsName = vStringNew();
+    vString *scope2 = vStringNew();
+    vString *laccess = vStringNew();
+    const char *const priv = "private";
+    const char *const pub = "public";
+
+    const unsigned char *line;
+
+    while ((line = fileReadLine ()) != NULL)
+    {
+	const unsigned char *cp = line;
+another:
+	while (isspace (*cp))
+	    cp++;
+
+	vStringCopyS(laccess,priv);
+
+	if (strncmp ((const char*) cp, "var", (size_t) 3) == 0  &&
+	    isspace ((int) cp [3]))
+	{
+	    cp += 3;
+
+	    while (isspace ((int) *cp))
+		++cp;
+
+	    vStringClear (name);
+	    while (isalnum ((int) *cp)  ||  *cp == '_')
+	    {
+		vStringPut (name, (int) *cp);
+		++cp;
+	    }
+	    vStringTerminate (name);
+	    makeSimpleTag (name, HxKinds, HXTAG_VARIABLE);
+	    /*
+	     makeSimpleScopedTag(name, HxKinds,
+	     		HXTAG_VARIABLE,vStringValue(clsName),
+	     		strdup(vStringValue(scope2)),strdup(vStringValue(laccess)));
+	     */
+
+	    vStringClear (name);
+	}
+	else if (strncmp ((const char*) cp, "function", (size_t) 8) == 0  &&
+	    isspace ((int) cp [8]))
+	{
+	    cp += 8;
+
+	    while (isspace ((int) *cp))
+		++cp;
+
+	    vStringClear (name);
+	    while (isalnum ((int) *cp)  ||  *cp == '_')
+	    {
+		vStringPut (name, (int) *cp);
+		++cp;
+	    }
+	    vStringTerminate (name);
+	    makeSimpleTag (name, HxKinds, HXTAG_METHODS);
+	    /*
+	    makeSimpleScopedTag(name, HxKinds, HXTAG_METHODS,
+	    	strdup(vStringValue(clsName)),strdup(vStringValue(scope2)),strdup(vStringValue(laccess)));
+
+	    */
+
+	    vStringClear (name);
+	}
+	else if (strncmp ((const char*) cp, "class", (size_t) 5) == 0 &&
+		 isspace ((int) cp [5]))
+	{
+	    cp += 5;
+
+	    while (isspace ((int) *cp))
+		++cp;
+	    vStringClear (name);
+	    while (isalnum ((int) *cp)  ||  *cp == '_')
+	    {
+		vStringPut (name, (int) *cp);
+		++cp;
+	    }
+	    vStringTerminate (name);
+	    makeSimpleTag (name, HxKinds, HXTAG_CLASS);
+	    vStringCopy(clsName,name);
+	    vStringClear (name);
+	}
+	else if (strncmp ((const char*) cp, "enum", (size_t) 4) == 0 &&
+	          isspace ((int) cp [4]))
+	{
+	    cp += 4;
+
+	   while (isspace ((int) *cp))
+		++cp;
+	    vStringClear (name);
+	    while (isalnum ((int) *cp)  ||  *cp == '_')
+	    {
+		vStringPut (name, (int) *cp);
+		++cp;
+	    }
+	    vStringTerminate (name);
+	    makeSimpleTag (name, HxKinds, HXTAG_ENUM);
+	    vStringClear (name);
+	} else if (strncmp ((const char*) cp, "public", (size_t) 6) == 0 &&
+	         isspace((int) cp [6]))
+	{
+	          cp += 6;
+	    	while (isspace ((int) *cp))
+				++cp;
+			vStringCopyS(laccess,pub);
+	         goto another;
+	 } else if (strncmp ((const char*) cp, "static", (size_t) 6) == 0 &&
+	         isspace((int) cp [6]))
+	 {
+	          cp += 6;
+	    	while (isspace ((int) *cp))
+				++cp;
+	         goto another;
+	 } else if (strncmp ((const char*) cp, "interface", (size_t) 9) == 0 &&
+	         isspace((int) cp [9]))
+	 {
+	          cp += 9;
+
+	    while (isspace ((int) *cp))
+			++cp;
+	    vStringClear (name);
+	    while (isalnum ((int) *cp)  ||  *cp == '_') {
+			vStringPut (name, (int) *cp);
+			++cp;
+	    }
+	    vStringTerminate (name);
+	    makeSimpleTag (name, HxKinds, HXTAG_INTERFACE);
+	    vStringClear (name);
+	 }
+
+
+    }
+
+    vStringDelete (name);
+    vStringDelete(clsName);
+    vStringDelete(scope2);
+    vStringDelete(laccess);
+}
+
+
+/* Create parser definition stucture */
+extern parserDefinition* HaxeParser (void)
+{
+	static const char *const extensions [] = { "hx", NULL };
+
+	parserDefinition *const def = parserNew ("Haxe");
+	def->extensions = extensions;
+	/*
+	 * New definitions for parsing instead of regex
+	 */
+	def->kinds		= HxKinds;
+	def->kindCount	= KIND_COUNT (HxKinds);
+	def->parser		= findHxTags;
+	//def->initialize = initialize;
+	return def;
+}
+
+

Modified: trunk/tagmanager/makefile.win32
===================================================================
--- trunk/tagmanager/makefile.win32	2007-07-25 11:59:34 UTC (rev 1743)
+++ trunk/tagmanager/makefile.win32	2007-07-26 09:50:12 UTC (rev 1744)
@@ -33,7 +33,7 @@
 	-$(RM) deps.mak *.o $(COMPLIB)
 
 $(COMPLIB): args.o c.o fortran.o make.o conf.o pascal.o perl.o php.o diff.o vhdl.o lua.o js.o \
-haskell.o python.o regex.o sh.o ctags.o entry.o get.o keyword.o options.o parse.o basic.o \
+haskell.o python.o regex.o sh.o ctags.o entry.o get.o keyword.o options.o parse.o basic.o haxe.o \
 read.o sort.o strlist.o latex.o docbook.o tcl.o ruby.o asm.o sql.o css.o vstring.o tm_workspace.o tm_work_object.o \
 tm_source_file.o tm_project.o tm_tag.o tm_symbol.o tm_file_entry.o \
 tm_tagmanager.o

Modified: trunk/tagmanager/parsers.h
===================================================================
--- trunk/tagmanager/parsers.h	2007-07-25 11:59:34 UTC (rev 1743)
+++ trunk/tagmanager/parsers.h	2007-07-26 09:50:12 UTC (rev 1744)
@@ -41,7 +41,8 @@
     JavaScriptParser, \
     HaskellParser, \
     CsharpParser, \
-    FreeBasicParser
+    FreeBasicParser,\
+    HaxeParser
 
 /*
 langType of each parser
@@ -72,6 +73,7 @@
 24	HaskellParser
 25	CsharpParser
 26	FreeBasicParser
+27  Haxe
 */
 #endif	/* _PARSERS_H */
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Commits mailing list