SF.net SVN: geany:[3018] trunk

eht16 at users.sourceforge.net eht16 at xxxxx
Sun Sep 28 16:32:51 UTC 2008


Revision: 3018
          http://geany.svn.sourceforge.net/geany/?rev=3018&view=rev
Author:   eht16
Date:     2008-09-28 16:32:49 +0000 (Sun, 28 Sep 2008)

Log Message:
-----------
Add new filetype 'Gettext translation file' (closes #2131985).

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/data/filetype_extensions.conf
    trunk/scintilla/KeyWords.cxx
    trunk/scintilla/LexOthers.cxx
    trunk/scintilla/include/SciLexer.h
    trunk/scintilla/include/Scintilla.iface
    trunk/src/editor.c
    trunk/src/filetypes.c
    trunk/src/filetypes.h
    trunk/src/highlighting.c
    trunk/src/plugindata.h
    trunk/src/templates.c

Added Paths:
-----------
    trunk/data/filetypes.po

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2008-09-28 15:17:00 UTC (rev 3017)
+++ trunk/ChangeLog	2008-09-28 16:32:49 UTC (rev 3018)
@@ -3,6 +3,12 @@
  * geany.glade, src/interface.c, src/notebook.c:
    Revert previous notebook focus changes as this disables the tab
    scroll arrows.
+ * scintilla/include/SciLexer.h, scintilla/include/Scintilla.iface,
+   scintilla/KeyWords.cxx, scintilla/LexOthers.cxx, src/templates.c,
+   src/highlighting.c, src/plugindata.h, src/filetypes.c,
+   src/filetypes.h, src/editor.c, data/filetype_extensions.conf,
+   data/filetypes.po:
+   Add new filetype 'Gettext translation file' (closes #2131985).
 
 
 2008-09-27  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>

Modified: trunk/data/filetype_extensions.conf
===================================================================
--- trunk/data/filetype_extensions.conf	2008-09-28 15:17:00 UTC (rev 3017)
+++ trunk/data/filetype_extensions.conf	2008-09-28 16:32:49 UTC (rev 3018)
@@ -13,7 +13,7 @@
 F77=*.f;*.for;*.ftn;*.f77;
 Fortran=*.f90;*.f95;*.f03;
 FreeBasic=*.bas;*.bi;
-GLSL=*.glsl;*.frag;*.vert
+GLSL=*.glsl;*.frag;*.vert;
 Haskell=*.hs;*.lhs;
 Haxe=*.hx;
 Java=*.java;*.jsp;
@@ -40,4 +40,5 @@
 LaTeX=*.tex;*.sty;*.idx;*.ltx;
 reStructuredText=*.rest;*.reST;*.rst;
 SQL=*.sql;
+Po=*.po;*.pot;
 None=*;

Added: trunk/data/filetypes.po
===================================================================
--- trunk/data/filetypes.po	                        (rev 0)
+++ trunk/data/filetypes.po	2008-09-28 16:32:49 UTC (rev 3018)
@@ -0,0 +1,45 @@
+# For complete documentation of this file, please see Geany's main documentation
+[styling]
+# foreground;background;bold;italic
+default=0x7f0000;0xffffff;false;false
+comment=0x808080;0xffffff;false;false
+msgid=0x00007f;0xffffff;true;false
+msgid_text=0x00007f;0xffffff;false;false
+msgstr=0x7f0000;0xffffff;true;false
+msgstr_text=0x7f0000;0xffffff;false;false
+msgctxt=0x007f00;0xffffff;true;false
+msgctxt_text=0x007f00;0xffffff;false;false
+fuzzy=0xffa500;0xffffff;true;false
+
+# the lexer don't support keywords
+
+
+[settings]
+# default extension used when saving files
+#extension=po
+
+# 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=msgfmt --check --check-accelerators=_ "%f"
+


Property changes on: trunk/data/filetypes.po
___________________________________________________________________
Added: svn:keywords
   + Author Date Id Revision
Added: svn:eol-style
   + native

Modified: trunk/scintilla/KeyWords.cxx
===================================================================
--- trunk/scintilla/KeyWords.cxx	2008-09-28 15:17:00 UTC (rev 3017)
+++ trunk/scintilla/KeyWords.cxx	2008-09-28 16:32:49 UTC (rev 3018)
@@ -167,6 +167,7 @@
 	LINK_LEXER(lmPerl);
 	LINK_LEXER(lmPHP);
 	LINK_LEXER(lmPHPSCRIPT);
+	LINK_LEXER(lmPo);
 	LINK_LEXER(lmProps);
 	LINK_LEXER(lmPython);
 	LINK_LEXER(lmR);

Modified: trunk/scintilla/LexOthers.cxx
===================================================================
--- trunk/scintilla/LexOthers.cxx	2008-09-28 15:17:00 UTC (rev 3017)
+++ trunk/scintilla/LexOthers.cxx	2008-09-28 16:32:49 UTC (rev 3018)
@@ -24,6 +24,10 @@
 using namespace Scintilla;
 #endif
 
+static bool strstart(const char *haystack, const char *needle) {
+	return strncmp(haystack, needle, strlen(needle)) == 0;
+}
+
 static bool Is0To9(char ch) {
 	return (ch >= '0') && (ch <= '9');
 }
@@ -582,7 +586,78 @@
 	} while (static_cast<int>(startPos) + length > curLineStart);
 }
 
+static void ColourisePoLine(
+    char *lineBuffer,
+    unsigned int lengthLine,
+    unsigned int startLine,
+    unsigned int endPos,
+    Accessor &styler) {
 
+	unsigned int i = 0;
+	static unsigned int state = SCE_PO_DEFAULT;
+	unsigned int state_start = SCE_PO_DEFAULT;
+
+	while ((i < lengthLine) && isspacechar(lineBuffer[i]))	// Skip initial spaces
+		i++;
+	if (i < lengthLine) {
+		if (lineBuffer[i] == '#') {
+			// check if the comment contains any flags ("#, ") and
+			// then whether the flags contain "fuzzy"
+			if (strstart(lineBuffer, "#, ") && strstr(lineBuffer, "fuzzy"))
+				styler.ColourTo(endPos, SCE_PO_FUZZY);
+			else
+				styler.ColourTo(endPos, SCE_PO_COMMENT);
+		} else {
+			if (lineBuffer[0] == '"') {
+				// line continuation, use previous style
+				styler.ColourTo(endPos, state);
+				return;
+			// this implicitly also matches "msgid_plural"
+			} else if (strstart(lineBuffer, "msgid")) {
+				state_start = SCE_PO_MSGID;
+				state = SCE_PO_MSGID_TEXT;
+			} else if (strstart(lineBuffer, "msgstr")) {
+				state_start = SCE_PO_MSGSTR;
+				state = SCE_PO_MSGSTR_TEXT;
+			} else if (strstart(lineBuffer, "msgctxt")) {
+				state_start = SCE_PO_MSGCTXT;
+				state = SCE_PO_MSGCTXT_TEXT;
+			}
+			if (state_start != SCE_PO_DEFAULT) {
+				// find the next space
+				while ((i < lengthLine) && ! isspacechar(lineBuffer[i]))
+					i++;
+				styler.ColourTo(startLine + i - 1, state_start);
+				styler.ColourTo(startLine + i, SCE_PO_DEFAULT);
+				styler.ColourTo(endPos, state);
+			}
+		}
+	} else {
+		styler.ColourTo(endPos, SCE_PO_DEFAULT);
+	}
+}
+
+static void ColourisePoDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler) {
+	char lineBuffer[1024];
+	styler.StartAt(startPos);
+	styler.StartSegment(startPos);
+	unsigned int linePos = 0;
+	unsigned int startLine = startPos;
+	for (unsigned int i = startPos; i < startPos + length; i++) {
+		lineBuffer[linePos++] = styler[i];
+		if (AtEOL(styler, i) || (linePos >= sizeof(lineBuffer) - 1)) {
+			// End of line (or of line buffer) met, colourise it
+			lineBuffer[linePos] = '\0';
+			ColourisePoLine(lineBuffer, linePos, startLine, i, styler);
+			linePos = 0;
+			startLine = i + 1;
+		}
+	}
+	if (linePos > 0) {	// Last line does not have ending characters
+		ColourisePoLine(lineBuffer, linePos, startLine, startPos + length - 1, styler);
+	}
+}
+
 static void ColourisePropsLine(
     char *lineBuffer,
     unsigned int lengthLine,
@@ -815,10 +890,6 @@
 	}
 }
 
-static bool strstart(const char *haystack, const char *needle) {
-	return strncmp(haystack, needle, strlen(needle)) == 0;
-}
-
 static int RecogniseErrorListLine(const char *lineBuffer, unsigned int lengthLine, int &startValue) {
 	if (lineBuffer[0] == '>') {
 		// Command or return status
@@ -1170,6 +1241,7 @@
 
 LexerModule lmBatch(SCLEX_BATCH, ColouriseBatchDoc, "batch", 0, batchWordListDesc);
 LexerModule lmDiff(SCLEX_DIFF, ColouriseDiffDoc, "diff", FoldDiffDoc, emptyWordListDesc);
+LexerModule lmPo(SCLEX_PO, ColourisePoDoc, "po", 0, emptyWordListDesc);
 LexerModule lmProps(SCLEX_PROPERTIES, ColourisePropsDoc, "props", FoldPropsDoc, emptyWordListDesc);
 LexerModule lmMake(SCLEX_MAKEFILE, ColouriseMakeDoc, "makefile", 0, emptyWordListDesc);
 LexerModule lmErrorList(SCLEX_ERRORLIST, ColouriseErrorListDoc, "errorlist", 0, emptyWordListDesc);

Modified: trunk/scintilla/include/SciLexer.h
===================================================================
--- trunk/scintilla/include/SciLexer.h	2008-09-28 15:17:00 UTC (rev 3017)
+++ trunk/scintilla/include/SciLexer.h	2008-09-28 16:32:49 UTC (rev 3018)
@@ -102,6 +102,7 @@
 #define SCLEX_MAGIK 87
 #define SCLEX_POWERSHELL 88
 #define SCLEX_OMS 89
+#define SCLEX_PO 90
 #define SCLEX_AUTOMATIC 1000
 #define SCE_P_DEFAULT 0
 #define SCE_P_COMMENTLINE 1
@@ -1234,6 +1235,15 @@
 #define SCE_POWERSHELL_KEYWORD 8
 #define SCE_POWERSHELL_CMDLET 9
 #define SCE_POWERSHELL_ALIAS 10
+#define SCE_PO_DEFAULT 0
+#define SCE_PO_COMMENT 1
+#define SCE_PO_MSGID 2
+#define SCE_PO_MSGID_TEXT 3
+#define SCE_PO_MSGSTR 4
+#define SCE_PO_MSGSTR_TEXT 5
+#define SCE_PO_MSGCTXT 6
+#define SCE_PO_MSGCTXT_TEXT 7
+#define SCE_PO_FUZZY 8
 #define SCLEX_ASP 29
 #define SCLEX_PHP 30
 /*--Autogenerated -- end of section automatically generated from Scintilla.iface*/

Modified: trunk/scintilla/include/Scintilla.iface
===================================================================
--- trunk/scintilla/include/Scintilla.iface	2008-09-28 15:17:00 UTC (rev 3017)
+++ trunk/scintilla/include/Scintilla.iface	2008-09-28 16:32:49 UTC (rev 3018)
@@ -1997,6 +1997,7 @@
 val SCLEX_R=86
 val SCLEX_MAGIK=87
 val SCLEX_POWERSHELL=88
+val SCLEX_PO=90
 
 # When a lexer specifies its language as SCLEX_AUTOMATIC it receives a
 # value assigned in sequence from SCLEX_AUTOMATIC+1.
@@ -3294,6 +3295,17 @@
 val SCE_POWERSHELL_KEYWORD=8
 val SCE_POWERSHELL_CMDLET=9
 val SCE_POWERSHELL_ALIAS=10
+# Lexical state for SCLEX_PO
+lex Po=SCLEX_PO SCE_PO_
+val SCE_PO_DEFAULT=0
+val SCE_PO_COMMENT=1
+val SCE_PO_MSGID=2
+val SCE_PO_MSGID_TEXT=3
+val SCE_PO_MSGSTR=4
+val SCE_PO_MSGSTR_TEXT=5
+val SCE_PO_MSGCTXT=6
+val SCE_PO_MSGCTXT_TEXT=7
+val SCE_PO_FUZZY=8
 
 # Events
 

Modified: trunk/src/editor.c
===================================================================
--- trunk/src/editor.c	2008-09-28 15:17:00 UTC (rev 3017)
+++ trunk/src/editor.c	2008-09-28 16:32:49 UTC (rev 3018)
@@ -2793,6 +2793,9 @@
 		case SCLEX_PROPERTIES:
 			return (style == SCE_PROPS_COMMENT);
 
+		case SCLEX_PO:
+			return (style == SCE_PO_COMMENT);
+
 		case SCLEX_LATEX:
 			return (style == SCE_L_COMMENT);
 

Modified: trunk/src/filetypes.c
===================================================================
--- trunk/src/filetypes.c	2008-09-28 15:17:00 UTC (rev 3017)
+++ trunk/src/filetypes.c	2008-09-28 16:32:49 UTC (rev 3018)
@@ -450,6 +450,17 @@
 	ft->comment_close = NULL;
 	ft->group = GEANY_FILETYPE_GROUP_MISC;
 
+#define PO
+	ft = filetypes[GEANY_FILETYPES_PO];
+	ft->lang = -2;
+	ft->name = g_strdup("Po");
+	ft->title = g_strdup(_("Gettext translation file"));
+	ft->extension = g_strdup("po");
+	ft->pattern = utils_strv_new("*.po", "*.pot", NULL);
+	ft->comment_open = g_strdup("#");
+	ft->comment_close = NULL;
+	ft->group = GEANY_FILETYPE_GROUP_MISC;
+
 #define HAXE
 	ft = filetypes[GEANY_FILETYPES_HAXE];
 	ft->lang = 27;

Modified: trunk/src/filetypes.h
===================================================================
--- trunk/src/filetypes.h	2008-09-28 15:17:00 UTC (rev 3017)
+++ trunk/src/filetypes.h	2008-09-28 16:32:49 UTC (rev 3018)
@@ -78,6 +78,7 @@
 	GEANY_FILETYPES_LATEX,
 	GEANY_FILETYPES_REST,
 	GEANY_FILETYPES_SQL,
+	GEANY_FILETYPES_PO,
 
 	GEANY_FILETYPES_NONE,	/* must be last filetype */
 	GEANY_MAX_BUILT_IN_FILETYPES	/* Use filetypes_array->len instead */

Modified: trunk/src/highlighting.c
===================================================================
--- trunk/src/highlighting.c	2008-09-28 15:17:00 UTC (rev 3017)
+++ trunk/src/highlighting.c	2008-09-28 16:32:49 UTC (rev 3018)
@@ -2027,6 +2027,47 @@
 }
 
 
+static void styleset_po_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
+{
+	new_style_array(GEANY_FILETYPES_PO, 9);
+	get_keyfile_hex(config, config_home, "styling", "default", "0x7f0000", "0xffffff", "false", &style_sets[GEANY_FILETYPES_PO].styling[0]);
+	get_keyfile_hex(config, config_home, "styling", "comment", "0x808080", "0xffffff", "false", &style_sets[GEANY_FILETYPES_PO].styling[1]);
+	get_keyfile_hex(config, config_home, "styling", "msgid", "0x00007f", "0xffffff", "true", &style_sets[GEANY_FILETYPES_PO].styling[2]);
+	get_keyfile_hex(config, config_home, "styling", "msgid_text", "0x00007f", "0xffffff", "false", &style_sets[GEANY_FILETYPES_PO].styling[3]);
+	get_keyfile_hex(config, config_home, "styling", "msgstr", "0x7f0000", "0xffffff", "true", &style_sets[GEANY_FILETYPES_PO].styling[4]);
+	get_keyfile_hex(config, config_home, "styling", "msgstr_text", "0x7f0000", "0xffffff", "false", &style_sets[GEANY_FILETYPES_PO].styling[5]);
+	get_keyfile_hex(config, config_home, "styling", "msgctxt", "0x007f00", "0xffffff", "true", &style_sets[GEANY_FILETYPES_PO].styling[6]);
+	get_keyfile_hex(config, config_home, "styling", "msgctxt_text", "0x007f00", "0xffffff", "false", &style_sets[GEANY_FILETYPES_PO].styling[7]);
+	get_keyfile_hex(config, config_home, "styling", "fuzzy", "0xffa500", "0xffffff", "true", &style_sets[GEANY_FILETYPES_PO].styling[8]);
+
+	style_sets[GEANY_FILETYPES_PO].keywords = NULL;
+
+	get_keyfile_wordchars(config, config_home,
+		&style_sets[GEANY_FILETYPES_PO].wordchars);
+}
+
+
+static void styleset_po(ScintillaObject *sci)
+{
+	const filetype_id ft_id = GEANY_FILETYPES_PO;
+
+	styleset_common(sci, 5, ft_id);
+
+	apply_filetype_properties(sci, SCLEX_PO, ft_id);
+
+	set_sci_style(sci, STYLE_DEFAULT, GEANY_FILETYPES_PO, 0);
+	set_sci_style(sci, SCE_PO_DEFAULT, GEANY_FILETYPES_PO, 0);
+	set_sci_style(sci, SCE_PO_COMMENT, GEANY_FILETYPES_PO, 1);
+	set_sci_style(sci, SCE_PO_MSGID, GEANY_FILETYPES_PO, 2);
+	set_sci_style(sci, SCE_PO_MSGID_TEXT, GEANY_FILETYPES_PO, 3);
+	set_sci_style(sci, SCE_PO_MSGSTR, GEANY_FILETYPES_PO, 4);
+	set_sci_style(sci, SCE_PO_MSGSTR_TEXT, GEANY_FILETYPES_PO, 5);
+	set_sci_style(sci, SCE_PO_MSGCTXT, GEANY_FILETYPES_PO, 6);
+	set_sci_style(sci, SCE_PO_MSGCTXT_TEXT, GEANY_FILETYPES_PO, 7);
+	set_sci_style(sci, SCE_PO_FUZZY, GEANY_FILETYPES_PO, 8);
+}
+
+
 static void styleset_conf_init(gint ft_id, GKeyFile *config, GKeyFile *config_home)
 {
 	new_style_array(GEANY_FILETYPES_CONF, 6);
@@ -3102,6 +3143,7 @@
 		init_styleset_case(GEANY_FILETYPES_PASCAL,	pascal);
 		init_styleset_case(GEANY_FILETYPES_PERL,	perl);
 		init_styleset_case(GEANY_FILETYPES_PHP,		php);
+		init_styleset_case(GEANY_FILETYPES_PO,		po);
 		init_styleset_case(GEANY_FILETYPES_PYTHON,	python);
 		init_styleset_case(GEANY_FILETYPES_R,		r);
 		init_styleset_case(GEANY_FILETYPES_RUBY,	ruby);
@@ -3157,6 +3199,7 @@
 		styleset_case(GEANY_FILETYPES_PASCAL,	pascal);
 		styleset_case(GEANY_FILETYPES_PERL,		perl);
 		styleset_case(GEANY_FILETYPES_PHP,		php);
+		styleset_case(GEANY_FILETYPES_PO,		po);
 		styleset_case(GEANY_FILETYPES_PYTHON,	python);
 		styleset_case(GEANY_FILETYPES_R,		r);
 		styleset_case(GEANY_FILETYPES_RUBY,		ruby);

Modified: trunk/src/plugindata.h
===================================================================
--- trunk/src/plugindata.h	2008-09-28 15:17:00 UTC (rev 3017)
+++ trunk/src/plugindata.h	2008-09-28 16:32:49 UTC (rev 3018)
@@ -41,7 +41,7 @@
 enum {
 	/** The Application Programming Interface (API) version, incremented
 	 * whenever any plugin data types are modified or appended to. */
-	GEANY_API_VERSION = 97,
+	GEANY_API_VERSION = 98,
 
 	/** The Application Binary Interface (ABI) version, incremented whenever
 	 * existing fields in the plugin data types have to be changed or reordered. */

Modified: trunk/src/templates.c
===================================================================
--- trunk/src/templates.c	2008-09-28 15:17:00 UTC (rev 3017)
+++ trunk/src/templates.c	2008-09-28 16:32:49 UTC (rev 3018)
@@ -534,6 +534,7 @@
 		case GEANY_FILETYPES_TCL:
 		case GEANY_FILETYPES_OMS:
 		case GEANY_FILETYPES_CONF:
+		case GEANY_FILETYPES_PO:
 		{
 			line_prefix = "#";
 			break;


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