SF.net SVN: geany: [1510] trunk

eht16 at users.sourceforge.net eht16 at xxxxx
Sun May 6 14:05:43 UTC 2007


Revision: 1510
          http://svn.sourceforge.net/geany/?rev=1510&view=rev
Author:   eht16
Date:     2007-05-06 07:05:43 -0700 (Sun, 06 May 2007)

Log Message:
-----------
Added new filetype Haskell (patch by Guillaume Hoffmann, thanks).

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/THANKS
    trunk/scintilla/KeyWords.cxx
    trunk/scintilla/Makefile.am
    trunk/scintilla/makefile.win32
    trunk/src/filetypes.c
    trunk/src/filetypes.h
    trunk/src/highlighting.c
    trunk/src/highlighting.h
    trunk/src/sci_cb.c

Added Paths:
-----------
    trunk/data/filetypes.haskell
    trunk/scintilla/LexHaskell.cxx

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2007-05-05 17:01:59 UTC (rev 1509)
+++ trunk/ChangeLog	2007-05-06 14:05:43 UTC (rev 1510)
@@ -1,3 +1,12 @@
+2007-05-06  Enrico Tröger  <enrico.troeger at uvena.de>
+
+ * data/filetypes.haskell, scintilla/KeyWords.cxx,
+   scintilla/LexHaskell.cxx, scintilla/Makefile.am,
+   scintilla/makefile.win32, src/filetypes.c, src/filetypes.h,
+   src/highlighting.c, src/highlighting.h, src/sci_cb.c, THANKS:
+   Added new filetype Haskell (patch by Guillaume Hoffmann, thanks).
+
+
 2007-05-05  Nick Treleaven  <nick.treleaven at btinternet.com>
 
  * src/keybindings.c:

Modified: trunk/THANKS
===================================================================
--- trunk/THANKS	2007-05-05 17:01:59 UTC (rev 1509)
+++ trunk/THANKS	2007-05-06 14:05:43 UTC (rev 1510)
@@ -24,9 +24,10 @@
 Jeff Pohlmeyer <yetanothergeek(at)gmail(dot)com> - "Allow DnD", "Use tabs" and other great patches
 Tomás Vírseda <kaskaras(at)gmail(dot)com> - sort open files patch
 Dirk Weber <dietrich-weber(at)web(dot)de>
-Slava Semushin <slava(dot)semushin(at)gmail(dot)com> - patch to improve SVN checks in cofigure script
+Slava Semushin <slava(dot)semushin(at)gmail(dot)com> - patch to improve SVN checks in configure script
 John Gabriele <jmg3000(at)gmail(dot)com> - documentation patches
 Anh Phạm <cs(dot)phamtuananh(at)gmail(dot)com> - various patches
+Guillaume Hoffmann <guillaumh(at)gmail(dot)com> - Haskell filetype patch
 
 Translators:
 ----------------------------------

Added: trunk/data/filetypes.haskell
===================================================================
--- trunk/data/filetypes.haskell	                        (rev 0)
+++ trunk/data/filetypes.haskell	2007-05-06 14:05:43 UTC (rev 1510)
@@ -0,0 +1,52 @@
+# For complete documentation of this file, please see Geany's main documentation
+[styling]
+# foreground;background;bold;italic
+default=0x000000;0xffffff;false;false
+commentline=0x808080;0xffffff;false;false
+commentblock=0x808080;0xffffff;false;false
+commentblock2=0x808080;0xffffff;false;false
+commentblock3=0x808080;0xffffff;false;false
+number=0x007f00;0xffffff;false;false
+keyword=0x00007f;0xffffff;true;false
+import=0x991111;0xffffff;false;false
+string=0xff901e;0xffffff;false;false
+character=0x7f007f;0xffffff;false;false
+class=0x0000d0;0xffffff;false;false
+operator=0x301010;0xffffff;false;false
+identifier=0x000000;0xffffff;false;false
+instance=0x000000;0xffffff;false;false
+capital=0x635b00;0xffffff;false;false
+module=0x007f7f;0xffffff;false;false
+data=0x000000;0xffffff;false;false
+
+[keywords]
+# all items must be in one line
+keywords=as case class data deriving do else if import in infixl infixr instance let module of primitive qualified then type where
+
+
+[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=
+linker=
+run_cmd=

Modified: trunk/scintilla/KeyWords.cxx
===================================================================
--- trunk/scintilla/KeyWords.cxx	2007-05-05 17:01:59 UTC (rev 1509)
+++ trunk/scintilla/KeyWords.cxx	2007-05-06 14:05:43 UTC (rev 1510)
@@ -168,6 +168,7 @@
 	LINK_LEXER(lmVHDL);
 	LINK_LEXER(lmD);
 	LINK_LEXER(lmLua);
+	LINK_LEXER(lmHaskell);
 
 //--Autogenerated -- end of automatically generated section
 

Added: trunk/scintilla/LexHaskell.cxx
===================================================================
--- trunk/scintilla/LexHaskell.cxx	                        (rev 0)
+++ trunk/scintilla/LexHaskell.cxx	2007-05-06 14:05:43 UTC (rev 1510)
@@ -0,0 +1,263 @@
+/******************************************************************
+ *    LexHaskell.cxx
+ *
+ *    A haskell lexer for the scintilla code control.
+ *    Some stuff "lended" from LexPython.cxx and LexCPP.cxx.
+ *    External lexer stuff inspired from the caml external lexer.
+ *
+ *    Written by Tobias Engvall - tumm at dtek dot chalmers dot se
+ *
+ *
+ *    TODO:
+ *    * Implement a folder :)
+ *    * Nice Character-lexing (stuff inside '\''), LexPython has
+ *      this.
+ *
+ *
+ *****************************************************************/
+
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdio.h>
+#include <stdarg.h>
+
+#include "Platform.h"
+
+#include "PropSet.h"
+#include "Accessor.h"
+#include "StyleContext.h"
+#include "KeyWords.h"
+#include "Scintilla.h"
+#include "SciLexer.h"
+
+#ifdef BUILD_AS_EXTERNAL_LEXER
+
+#include "ExternalLexer.h"
+#include "WindowAccessor.h"
+
+#define BUILD_EXTERNAL_LEXER 0
+
+#endif
+
+// Max level of nested comments
+#define SCE_HA_COMMENTMAX SCE_HA_COMMENTBLOCK3
+
+
+enum kwType { kwOther, kwClass, kwData, kwInstance, kwImport, kwModule, kwType};
+
+static inline bool IsNewline(const int ch) {
+   return (ch == '\n' || ch == '\r');
+}
+
+static inline bool IsWhitespace(const int ch) {
+   return (  ch == ' '
+          || ch == '\t'
+          || IsNewline(ch) );
+}
+
+static inline bool IsAWordStart(const int ch) {
+   return (ch < 0x80) && (isalnum(ch) || ch == '_');
+}
+
+static inline bool IsAWordChar(const int ch) {
+   return (ch < 0x80) && (isalnum(ch) || ch == '.' || ch == '_' || ch == '\'');
+}
+
+static void ColorizeHaskellDoc(unsigned int startPos, int length, int initStyle,
+                               WordList *keywordlists[], Accessor &styler) {
+
+   WordList &keywords = *keywordlists[0];
+
+   int kwLast = kwOther;
+
+   StyleContext sc(startPos, length, initStyle, styler);
+
+   for (; sc.More(); sc.Forward()) {
+
+      // Check for state end
+         // Operator
+      if (sc.state == SCE_HA_OPERATOR) {
+         kwLast = kwOther;
+         sc.SetState(SCE_HA_DEFAULT);
+      }
+         // String
+      else if (sc.state == SCE_HA_STRING) {
+         if (sc.ch == '\"') {
+            sc.ForwardSetState(SCE_HA_DEFAULT);
+         }
+      }
+         // Char
+      else if (sc.state == SCE_HA_CHARACTER) {
+         if (sc.ch == '\'') {
+            sc.ForwardSetState(SCE_HA_DEFAULT);
+         }
+      }
+         // Number
+      else if (sc.state == SCE_HA_NUMBER) {
+         if (!IsADigit(sc.ch)) {
+            sc.SetState(SCE_HA_DEFAULT);
+         }
+      }
+         // Types, constructors, etc.
+      else if (sc.state == SCE_HA_CAPITAL) {
+         if (!IsAWordChar(sc.ch) || sc.ch == '.') {
+            sc.SetState(SCE_HA_DEFAULT);
+         }
+      }
+         // Identifier
+      else if (sc.state == SCE_HA_IDENTIFIER) {
+         if (!IsAWordChar(sc.ch)) {
+            char s[100];
+            sc.GetCurrent(s, sizeof(s));
+            int style = SCE_HA_IDENTIFIER;
+            if ((kwLast == kwImport) || (strcmp(s,"qualified") == 0) || (strcmp(s,"as") == 0)) {
+               style = SCE_HA_IMPORT;
+            } else if (keywords.InList(s)) {
+               style = SCE_HA_KEYWORD;
+            } else if (kwLast == kwData) {
+               style = SCE_HA_DATA;
+            } else if (kwLast == kwClass) {
+               style = SCE_HA_CLASS;
+            } else if (kwLast == kwModule) {
+               style = SCE_HA_MODULE;
+            } else if (isupper(s[0])) {
+               style = SCE_HA_CAPITAL;
+            }
+            sc.ChangeState(style);
+            sc.SetState(SCE_HA_DEFAULT);
+            if (style == SCE_HA_KEYWORD) {
+               if (0 == strcmp(s, "class"))
+                  kwLast = kwClass;
+               else if (0 == strcmp(s, "data"))
+                  kwLast = kwData;
+               else if (0 == strcmp(s, "instance"))
+                  kwLast = kwInstance;
+               else if (0 == strcmp(s, "import"))
+                  kwLast = kwImport;
+               else if (0 == strcmp(s, "module"))
+                  kwLast = kwModule;
+               else
+                  kwLast = kwOther;
+            } else if (style == SCE_HA_CLASS || style == SCE_HA_IMPORT ||
+                       style == SCE_HA_MODULE || style == SCE_HA_CAPITAL ||
+                       style == SCE_HA_DATA || style == SCE_HA_INSTANCE) {
+               kwLast = kwOther;
+            }
+         }
+      }
+         // Comments
+            // Oneliner
+      else if (sc.state == SCE_HA_COMMENTLINE) {
+         if (IsNewline(sc.ch))
+            sc.SetState(SCE_HA_DEFAULT);
+      }
+            // Nested
+      else if (sc.state >= SCE_HA_COMMENTBLOCK) {
+         if (sc.Match("{-")) {
+            if (sc.state < SCE_HA_COMMENTMAX)
+               sc.SetState(sc.state + 1);
+         }
+         else if (sc.Match("-}")) {
+            sc.Forward();
+            if (sc.state == SCE_HA_COMMENTBLOCK)
+               sc.ForwardSetState(SCE_HA_DEFAULT);
+            else
+               sc.ForwardSetState(sc.state - 1);
+         }
+      }
+      // New state?
+      if (sc.state == SCE_HA_DEFAULT) {
+         // Digit
+         if (IsADigit(sc.ch) || (sc.ch == '.' && IsADigit(sc.chNext))) {
+            sc.SetState(SCE_HA_NUMBER);
+         }
+         // Comment line
+         else if (sc.Match("--")) {
+            sc.SetState(SCE_HA_COMMENTLINE);
+         // Comment block
+         }
+         else if (sc.Match("{-")) {
+            sc.SetState(SCE_HA_COMMENTBLOCK);
+         }
+         // String
+         else if (sc.Match('\"')) {
+            sc.SetState(SCE_HA_STRING);
+         }
+         // Character
+         else if (sc.Match('\'') && IsWhitespace(sc.GetRelative(-1)) ) {
+            sc.SetState(SCE_HA_CHARACTER);
+         }
+         // Stringstart
+         else if (sc.Match('\"')) {
+            sc.SetState(SCE_HA_STRING);
+         }
+         // Operator
+         else if (isascii(sc.ch) && isoperator(static_cast<char>(sc.ch))) {
+            sc.SetState(SCE_HA_OPERATOR);
+         }
+         // Keyword
+         else if (IsAWordStart(sc.ch)) {
+               sc.SetState(SCE_HA_IDENTIFIER);
+         }
+
+      }
+   }
+   sc.Complete();
+}
+
+// External stuff - used for dynamic-loading, not implemented in wxStyledTextCtrl yet.
+// Inspired by the caml external lexer - Credits to Robert Roessler - http://www.rftp.com
+#ifdef BUILD_EXTERNAL_LEXER
+static const char* LexerName = "haskell";
+
+void EXT_LEXER_DECL Lex(unsigned int lexer, unsigned int startPos, int length, int initStyle,
+                        char *words[], WindowID window, char *props)
+{
+   PropSet ps;
+   ps.SetMultiple(props);
+   WindowAccessor wa(window, ps);
+
+   int nWL = 0;
+   for (; words[nWL]; nWL++) ;
+   WordList** wl = new WordList* [nWL + 1];
+   int i = 0;
+   for (; i<nWL; i++)
+   {
+      wl[i] = new WordList();
+      wl[i]->Set(words[i]);
+   }
+   wl[i] = 0;
+
+   ColorizeHaskellDoc(startPos, length, initStyle, wl, wa);
+   wa.Flush();
+   for (i=nWL-1;i>=0;i--)
+      delete wl[i];
+   delete [] wl;
+}
+
+void EXT_LEXER_DECL Fold (unsigned int lexer, unsigned int startPos, int length, int initStyle,
+                        char *words[], WindowID window, char *props)
+{
+
+}
+
+int EXT_LEXER_DECL GetLexerCount()
+{
+   return 1;
+}
+
+void EXT_LEXER_DECL GetLexerName(unsigned int Index, char *name, int buflength)
+{
+   if (buflength > 0) {
+      buflength--;
+      int n = strlen(LexerName);
+      if (n > buflength)
+         n = buflength;
+      memcpy(name, LexerName, n), name[n] = '\0';
+   }
+}
+#endif
+
+LexerModule lmHaskell(SCLEX_HASKELL, ColorizeHaskellDoc, "haskell");
+

Modified: trunk/scintilla/Makefile.am
===================================================================
--- trunk/scintilla/Makefile.am	2007-05-05 17:01:59 UTC (rev 1509)
+++ trunk/scintilla/Makefile.am	2007-05-06 14:05:43 UTC (rev 1510)
@@ -27,7 +27,8 @@
 LexRuby.cxx \
 LexSQL.cxx \
 LexTCL.cxx \
-LexVHDL.cxx
+LexVHDL.cxx \
+LexHaskell.cxx
 
 SRCS= \
 CallTip.cxx \

Modified: trunk/scintilla/makefile.win32
===================================================================
--- trunk/scintilla/makefile.win32	2007-05-05 17:01:59 UTC (rev 1509)
+++ trunk/scintilla/makefile.win32	2007-05-06 14:05:43 UTC (rev 1510)
@@ -62,7 +62,7 @@
 LEXOBJS=\
 LexBash.o LexAsm.o LexCSS.o LexConf.o LexCPP.o LexCrontab.o LexHTML.o LexOthers.o LexPascal.o \
 LexPerl.o LexPython.o LexSQL.o LexCaml.o LexOMS.o LexTCL.o LexRuby.o LexFortran.o LexVHDL.o \
-LexD.o LexLua.o
+LexD.o LexLua.o LexHaskell.o
 #--Autogenerated -- end of automatically generated section
 
 all: $(COMPLIB)

Modified: trunk/src/filetypes.c
===================================================================
--- trunk/src/filetypes.c	2007-05-05 17:01:59 UTC (rev 1509)
+++ trunk/src/filetypes.c	2007-05-06 14:05:43 UTC (rev 1510)
@@ -70,7 +70,8 @@
 	FILETYPE_UID_HTML,		// 25
 	FILETYPE_UID_VHDL,		// 26
 	FILETYPE_UID_JS,		// 27
-	FILETYPE_UID_LUA		// 28
+	FILETYPE_UID_LUA,		// 28
+	FILETYPE_UID_HASKELL	// 29
 };
 
 
@@ -113,6 +114,7 @@
 		case FILETYPE_UID_VHDL:		return filetypes[GEANY_FILETYPES_VHDL];
 		case FILETYPE_UID_JS:		return filetypes[GEANY_FILETYPES_JS];
 		case FILETYPE_UID_LUA:		return filetypes[GEANY_FILETYPES_LUA];
+		case FILETYPE_UID_HASKELL:	return filetypes[GEANY_FILETYPES_HASKELL];
 		default: 					return NULL;
 	}
 }
@@ -343,6 +345,19 @@
 	filetypes[GEANY_FILETYPES_FERITE]->comment_open = g_strdup("/*");
 	filetypes[GEANY_FILETYPES_FERITE]->comment_close = g_strdup("*/");
 
+#define HASKELL
+	filetypes[GEANY_FILETYPES_HASKELL]->id = GEANY_FILETYPES_HASKELL;
+	filetypes[GEANY_FILETYPES_HASKELL]->uid = FILETYPE_UID_HASKELL;
+	filetypes[GEANY_FILETYPES_HASKELL]->lang = -2;
+	filetypes[GEANY_FILETYPES_HASKELL]->name = g_strdup("Haskell");
+	filetypes[GEANY_FILETYPES_HASKELL]->has_tags = FALSE;
+	filetypes[GEANY_FILETYPES_HASKELL]->title = g_strdup(_("Haskell source file"));
+	filetypes[GEANY_FILETYPES_HASKELL]->extension = g_strdup("hs");
+	filetypes[GEANY_FILETYPES_HASKELL]->pattern = utils_strv_new("*.hs", "*.lhs", NULL);
+	filetypes[GEANY_FILETYPES_HASKELL]->style_func_ptr = styleset_haskell;
+	filetypes[GEANY_FILETYPES_HASKELL]->comment_open = g_strdup("--");
+	filetypes[GEANY_FILETYPES_HASKELL]->comment_close = NULL;
+
 #define SH
 	filetypes[GEANY_FILETYPES_SH]->id = GEANY_FILETYPES_SH;
 	filetypes[GEANY_FILETYPES_SH]->uid = FILETYPE_UID_SH;

Modified: trunk/src/filetypes.h
===================================================================
--- trunk/src/filetypes.h	2007-05-05 17:01:59 UTC (rev 1509)
+++ trunk/src/filetypes.h	2007-05-06 14:05:43 UTC (rev 1510)
@@ -51,6 +51,7 @@
 	GEANY_FILETYPES_TCL,
 	GEANY_FILETYPES_LUA,
 	GEANY_FILETYPES_FERITE,
+	GEANY_FILETYPES_HASKELL,
 	GEANY_FILETYPES_SH,
 	GEANY_FILETYPES_MAKE,
  	GEANY_FILETYPES_XML,

Modified: trunk/src/highlighting.c
===================================================================
--- trunk/src/highlighting.c	2007-05-05 17:01:59 UTC (rev 1509)
+++ trunk/src/highlighting.c	2007-05-06 14:05:43 UTC (rev 1510)
@@ -2379,6 +2379,79 @@
 }
 
 
+static void styleset_haskell_init(void)
+{
+	GKeyFile *config = g_key_file_new();
+	GKeyFile *config_home = g_key_file_new();
+
+	load_keyfiles(config, config_home, GEANY_FILETYPES_HASKELL);
+
+	new_style_array(GEANY_FILETYPES_HASKELL, 17);
+
+	get_keyfile_hex(config, config_home, "styling", "default", "0x000000", "0xffffff", "false", &style_sets[GEANY_FILETYPES_HASKELL].styling[0]);
+	get_keyfile_hex(config, config_home, "styling", "commentline", "0x808080", "0xffffff", "false", &style_sets[GEANY_FILETYPES_HASKELL].styling[1]);
+	get_keyfile_hex(config, config_home, "styling", "commentblock", "0x808080", "0xffffff", "false", &style_sets[GEANY_FILETYPES_HASKELL].styling[2]);
+	get_keyfile_hex(config, config_home, "styling", "commentblock2", "0x808080", "0xffffff", "false", &style_sets[GEANY_FILETYPES_HASKELL].styling[3]);
+	get_keyfile_hex(config, config_home, "styling", "commentblock3", "0x808080", "0xffffff", "false", &style_sets[GEANY_FILETYPES_HASKELL].styling[4]);
+	get_keyfile_hex(config, config_home, "styling", "number", "0x007f00", "0xffffff", "false", &style_sets[GEANY_FILETYPES_HASKELL].styling[5]);
+	get_keyfile_hex(config, config_home, "styling", "keyword", "0x00007f", "0xffffff", "true", &style_sets[GEANY_FILETYPES_HASKELL].styling[6]);
+	get_keyfile_hex(config, config_home, "styling", "import", "0x991111", "0xffffff", "false", &style_sets[GEANY_FILETYPES_HASKELL].styling[7]);
+	get_keyfile_hex(config, config_home, "styling", "string", "0xff901e", "0xffffff", "false", &style_sets[GEANY_FILETYPES_HASKELL].styling[8]);
+	get_keyfile_hex(config, config_home, "styling", "character", "0xff901e", "0xffffff", "false", &style_sets[GEANY_FILETYPES_HASKELL].styling[9]);
+	get_keyfile_hex(config, config_home, "styling", "class", "0x0000d0", "0xffffff", "false", &style_sets[GEANY_FILETYPES_HASKELL].styling[10]);
+	get_keyfile_hex(config, config_home, "styling", "operator", "0x301010", "0xffffff", "false", &style_sets[GEANY_FILETYPES_HASKELL].styling[11]);
+	get_keyfile_hex(config, config_home, "styling", "identifier", "0x000000", "0xffffff", "false", &style_sets[GEANY_FILETYPES_HASKELL].styling[12]);
+	get_keyfile_hex(config, config_home, "styling", "instance", "0x000000", "0xffffff", "false", &style_sets[GEANY_FILETYPES_HASKELL].styling[13]);
+	get_keyfile_hex(config, config_home, "styling", "capital", "0x635b00", "0xffffff", "false", &style_sets[GEANY_FILETYPES_HASKELL].styling[14]);
+	get_keyfile_hex(config, config_home, "styling", "module", "0x007f7f", "0xffffff", "false", &style_sets[GEANY_FILETYPES_HASKELL].styling[15]);
+	get_keyfile_hex(config, config_home, "styling", "data", "0x000000", "0xffffff", "false", &style_sets[GEANY_FILETYPES_HASKELL].styling[16]);
+
+	style_sets[GEANY_FILETYPES_HASKELL].keywords = g_new(gchar*, 2);
+	get_keyfile_keywords(config, config_home, "keywords", "keywords", GEANY_FILETYPES_HASKELL, 0,
+			"as case class data deriving do else if import in infixl infixr instance let module of primitive qualified then type where");
+	style_sets[GEANY_FILETYPES_HASKELL].keywords[1] = NULL;
+
+	get_keyfile_wordchars(config, config_home, &style_sets[GEANY_FILETYPES_HASKELL].wordchars);
+	filetypes_get_config(config, config_home, GEANY_FILETYPES_HASKELL);
+
+	g_key_file_free(config);
+	g_key_file_free(config_home);
+}
+
+
+void styleset_haskell(ScintillaObject *sci)
+{
+	styleset_common(sci, 5);
+	if (style_sets[GEANY_FILETYPES_HASKELL].styling == NULL) styleset_haskell_init();
+
+	SSM(sci, SCI_SETWORDCHARS, 0, (sptr_t) style_sets[GEANY_FILETYPES_HASKELL].wordchars);
+	SSM(sci, SCI_AUTOCSETMAXHEIGHT, app->autocompletion_max_height, 0);
+
+	SSM(sci, SCI_SETLEXER, SCLEX_HASKELL, 0);
+
+	SSM(sci, SCI_SETKEYWORDS, 0, (sptr_t) style_sets[GEANY_FILETYPES_HASKELL].keywords[0]);
+
+	set_sci_style(sci, STYLE_DEFAULT, GEANY_FILETYPES_HASKELL, 0);
+	set_sci_style(sci, SCE_HA_DEFAULT, GEANY_FILETYPES_HASKELL, 0);
+	set_sci_style(sci, SCE_HA_COMMENTLINE, GEANY_FILETYPES_HASKELL, 1);
+	set_sci_style(sci, SCE_HA_COMMENTBLOCK, GEANY_FILETYPES_HASKELL, 2);
+	set_sci_style(sci, SCE_HA_COMMENTBLOCK2, GEANY_FILETYPES_HASKELL, 3);
+	set_sci_style(sci, SCE_HA_COMMENTBLOCK3, GEANY_FILETYPES_HASKELL, 4);
+	set_sci_style(sci, SCE_HA_NUMBER, GEANY_FILETYPES_HASKELL, 5);
+	set_sci_style(sci, SCE_HA_KEYWORD, GEANY_FILETYPES_HASKELL, 6);
+	set_sci_style(sci, SCE_HA_IMPORT, GEANY_FILETYPES_HASKELL, 7);
+	set_sci_style(sci, SCE_HA_STRING, GEANY_FILETYPES_HASKELL, 8);
+	set_sci_style(sci, SCE_HA_CHARACTER, GEANY_FILETYPES_HASKELL, 9);
+	set_sci_style(sci, SCE_HA_CLASS, GEANY_FILETYPES_HASKELL, 10);
+	set_sci_style(sci, SCE_HA_OPERATOR, GEANY_FILETYPES_HASKELL, 11);
+	set_sci_style(sci, SCE_HA_IDENTIFIER, GEANY_FILETYPES_HASKELL, 12);
+	set_sci_style(sci, SCE_HA_INSTANCE, GEANY_FILETYPES_HASKELL, 13);
+	set_sci_style(sci, SCE_HA_CAPITAL, GEANY_FILETYPES_HASKELL, 14);
+	set_sci_style(sci, SCE_HA_MODULE, GEANY_FILETYPES_HASKELL, 15);
+	set_sci_style(sci, SCE_HA_DATA, GEANY_FILETYPES_HASKELL, 16);
+}
+
+
 static void styleset_caml_init(void)
 {
 	GKeyFile *config = g_key_file_new();
@@ -2452,6 +2525,8 @@
 }
 
 
+
+
 static void styleset_oms_init(void)
 {
 	GKeyFile *config = g_key_file_new();

Modified: trunk/src/highlighting.h
===================================================================
--- trunk/src/highlighting.h	2007-05-05 17:01:59 UTC (rev 1509)
+++ trunk/src/highlighting.h	2007-05-06 14:05:43 UTC (rev 1510)
@@ -77,6 +77,8 @@
 
 void styleset_caml(ScintillaObject *sci);
 
+void styleset_haskell(ScintillaObject *sci);
+
 void styleset_oms(ScintillaObject *sci);
 
 void styleset_tcl(ScintillaObject *sci);

Modified: trunk/src/sci_cb.c
===================================================================
--- trunk/src/sci_cb.c	2007-05-05 17:01:59 UTC (rev 1509)
+++ trunk/src/sci_cb.c	2007-05-06 14:05:43 UTC (rev 1510)
@@ -2102,6 +2102,17 @@
 				result = TRUE;
 			break;
 		}
+		case SCLEX_HASKELL:
+		{
+			if (style == SCE_HA_COMMENTLINE ||
+				style == SCE_HA_COMMENTBLOCK ||
+				style == SCE_HA_COMMENTBLOCK2 ||
+				style == SCE_HA_COMMENTBLOCK3 ||
+				style == SCE_HA_CHARACTER ||
+				style == SCE_HA_STRING)
+				result = TRUE;
+			break;
+		}
 		case SCLEX_HTML:
 		{
 			if (style == SCE_HPHP_SIMPLESTRING ||


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