Revision: 3290 http://geany.svn.sourceforge.net/geany/?rev=3290&view=rev Author: eht16 Date: 2008-11-29 12:51:50 +0000 (Sat, 29 Nov 2008)
Log Message: ----------- Add new filetype 'YAML' (patch by Walery Studennikov, thanks).
Modified Paths: -------------- trunk/ChangeLog trunk/THANKS trunk/data/filetype_extensions.conf trunk/scintilla/KeyWords.cxx trunk/scintilla/Makefile.am trunk/scintilla/makefile.win32 trunk/src/about.c trunk/src/editor.c trunk/src/filetypes.c trunk/src/filetypes.h trunk/src/highlighting.c trunk/src/plugindata.h trunk/src/templates.c trunk/wscript
Added Paths: ----------- trunk/data/filetypes.yaml trunk/scintilla/LexYAML.cxx
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2008-11-29 12:51:05 UTC (rev 3289) +++ trunk/ChangeLog 2008-11-29 12:51:50 UTC (rev 3290) @@ -8,6 +8,12 @@ src/treeviews.h: Add editor_get_calltip_text(). Add tooltips for the symbol list items. + * wscript, THANKS, data/filetypes.yaml, data/filetype_extensions.conf, + scintilla/LexYAML.cxx, scintilla/KeyWords.cxx, scintilla/Makefile.am, + scintilla/makefile.win32, src/filetypes.c, src/templates.c, + src/filetypes.h, src/highlighting.c, src/plugindata.h, src/editor.c, + src/about.c: + Add new filetype 'YAML' (patch by Walery Studennikov, thanks).
2008-11-28 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
Modified: trunk/THANKS =================================================================== --- trunk/THANKS 2008-11-29 12:51:05 UTC (rev 3289) +++ trunk/THANKS 2008-11-29 12:51:50 UTC (rev 3290) @@ -55,6 +55,7 @@ Herbert Voss <voss(at)perce(dot)de> - LaTeX file template Moritz Barsnick <barsnick(at)users(dot)sourceforge(dot)net> - Split Vertically command Tyler D'Agosta - Add missing HTML entities +Walery Studennikov <despairr(at)gmail(dot)com> - YAML filetype patch
Translators: ------------
Modified: trunk/data/filetype_extensions.conf =================================================================== --- trunk/data/filetype_extensions.conf 2008-11-29 12:51:05 UTC (rev 3289) +++ trunk/data/filetype_extensions.conf 2008-11-29 12:51:50 UTC (rev 3290) @@ -43,4 +43,5 @@ reStructuredText=*.rest;*.reST;*.rst; SQL=*.sql; Po=*.po;*.pot; +YAML=*.yaml;*.yml; None=*;
Added: trunk/data/filetypes.yaml =================================================================== --- trunk/data/filetypes.yaml (rev 0) +++ trunk/data/filetypes.yaml 2008-11-29 12:51:50 UTC (rev 3290) @@ -0,0 +1,41 @@ +# For complete documentation of this file, please see Geany's main documentation +[styling] +# foreground;background;bold;italic +default=0x000000;0xffffff;false;false +comment=0x808080;0xffffff;false;false +identifier=0x000088;0xffffff;true;false +keyword=0x991111;0xffffff;true;false +number=0x007f00;0xffffff;false;false +reference=0x008888;0xffffff;false;false +document=0x000088;0xffffff;false;false +text=0x333366;0xffffff;false;false +error=0xff0000;0xffffff;true;true +operator=0x301010;0xffffff;false;false + + +[keywords] +# all items must be in one line +keywords=true false yes no + + +[settings] +# default extension used when saving files +extension=yaml + +# 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=
Modified: trunk/scintilla/KeyWords.cxx =================================================================== --- trunk/scintilla/KeyWords.cxx 2008-11-29 12:51:05 UTC (rev 3289) +++ trunk/scintilla/KeyWords.cxx 2008-11-29 12:51:50 UTC (rev 3290) @@ -170,6 +170,7 @@ LINK_LEXER(lmTCL); LINK_LEXER(lmVHDL); LINK_LEXER(lmXML); + LINK_LEXER(lmYAML);
//--Autogenerated -- end of automatically generated section
Added: trunk/scintilla/LexYAML.cxx =================================================================== --- trunk/scintilla/LexYAML.cxx (rev 0) +++ trunk/scintilla/LexYAML.cxx 2008-11-29 12:51:50 UTC (rev 3290) @@ -0,0 +1,313 @@ +// Scintilla source code edit control +/** @file LexYAML.cxx + ** Lexer for YAML. + **/ +// Copyright 2003- by Sean O'Dell sean@celsoft.com +// Release under the same license as Scintilla/SciTE. + +#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 SCI_NAMESPACE +using namespace Scintilla; +#endif + +static const char * const yamlWordListDesc[] = { + "Keywords", + 0 +}; + +static inline bool AtEOL(Accessor &styler, unsigned int i) { + return (styler[i] == '\n') || + ((styler[i] == '\r') && (styler.SafeGetCharAt(i + 1) != '\n')); +} + +static unsigned int SpaceCount(char* lineBuffer) { + if (lineBuffer == NULL) + return 0; + + char* headBuffer = lineBuffer; + + while (*headBuffer == ' ') + headBuffer++; + + return headBuffer - lineBuffer; +} + +#define YAML_STATE_BITSIZE 16 +#define YAML_STATE_MASK (0xFFFF0000) +#define YAML_STATE_DOCUMENT (1 << YAML_STATE_BITSIZE) +#define YAML_STATE_VALUE (2 << YAML_STATE_BITSIZE) +#define YAML_STATE_COMMENT (3 << YAML_STATE_BITSIZE) +#define YAML_STATE_TEXT_PARENT (4 << YAML_STATE_BITSIZE) +#define YAML_STATE_TEXT (5 << YAML_STATE_BITSIZE) + +static void ColouriseYAMLLine( + char *lineBuffer, + unsigned int currentLine, + unsigned int lengthLine, + unsigned int startLine, + unsigned int endPos, + WordList &keywords, + Accessor &styler) { + unsigned int i = 0; + bool bInQuotes = false; + unsigned int indentAmount = SpaceCount(lineBuffer); + + if (currentLine > 0) { + int parentLineState = styler.GetLineState(currentLine - 1); + + if ((parentLineState&YAML_STATE_MASK) == YAML_STATE_TEXT || (parentLineState&YAML_STATE_MASK) == YAML_STATE_TEXT_PARENT) { + unsigned int parentIndentAmount = parentLineState&(~YAML_STATE_MASK); + if (indentAmount > parentIndentAmount) { + styler.SetLineState(currentLine, YAML_STATE_TEXT | parentIndentAmount); + styler.ColourTo(endPos, SCE_YAML_TEXT); + return; + } + } + } + styler.SetLineState(currentLine, 0); + if (strncmp(lineBuffer, "---", 3) == 0) { // Document marker + styler.SetLineState(currentLine, YAML_STATE_DOCUMENT); + styler.ColourTo(endPos, SCE_YAML_DOCUMENT); + return; + } + // Skip initial spaces + while ((i < lengthLine) && lineBuffer[i] == ' ') { // YAML always uses space, never TABS or anything else + i++; + } + if (lineBuffer[i] == '\t') { // if we skipped all spaces, and we are NOT inside a text block, this is wrong + styler.ColourTo(endPos, SCE_YAML_ERROR); + return; + } + if (lineBuffer[i] == '#') { // Comment + styler.SetLineState(currentLine, YAML_STATE_COMMENT); + styler.ColourTo(endPos, SCE_YAML_COMMENT); + return; + } + while (i < lengthLine) { + if (lineBuffer[i] == ''' || lineBuffer[i] == '"') { + bInQuotes = !bInQuotes; + } else if (lineBuffer[i] == ':' && !bInQuotes) { + styler.ColourTo(startLine + i - 1, SCE_YAML_IDENTIFIER); + styler.ColourTo(startLine + i, SCE_YAML_OPERATOR); + // Non-folding scalar + i++; + while ((i < lengthLine) && isspacechar(lineBuffer[i])) + i++; + unsigned int endValue = lengthLine - 1; + while ((endValue >= i) && isspacechar(lineBuffer[endValue])) + endValue--; + lineBuffer[endValue + 1] = '\0'; + if (lineBuffer[i] == '|' || lineBuffer[i] == '>') { + i++; + if (lineBuffer[i] == '+' || lineBuffer[i] == '-') + i++; + while ((i < lengthLine) && isspacechar(lineBuffer[i])) + i++; + if (lineBuffer[i] == '\0') { + styler.SetLineState(currentLine, YAML_STATE_TEXT_PARENT | indentAmount); + styler.ColourTo(endPos, SCE_YAML_DEFAULT); + return; + } else if (lineBuffer[i] == '#') { + styler.SetLineState(currentLine, YAML_STATE_TEXT_PARENT | indentAmount); + styler.ColourTo(startLine + i - 1, SCE_YAML_DEFAULT); + styler.ColourTo(endPos, SCE_YAML_COMMENT); + return; + } else { + styler.ColourTo(endPos, SCE_YAML_ERROR); + return; + } + } else if (lineBuffer[i] == '#') { + styler.ColourTo(startLine + i - 1, SCE_YAML_DEFAULT); + styler.ColourTo(endPos, SCE_YAML_COMMENT); + return; + } + styler.SetLineState(currentLine, YAML_STATE_VALUE); + if (lineBuffer[i] == '&' || lineBuffer[i] == '*') { + styler.ColourTo(endPos, SCE_YAML_REFERENCE); + return; + } + if (keywords.InList(&lineBuffer[i])) { // Convertible value (true/false, etc.) + styler.ColourTo(endPos, SCE_YAML_KEYWORD); + return; + } else { + unsigned int i2 = i; + while ((i < lengthLine) && lineBuffer[i]) { + if (!(isascii(lineBuffer[i]) && isdigit(lineBuffer[i])) && lineBuffer[i] != '-' && lineBuffer[i] != '.' && lineBuffer[i] != ',') { + styler.ColourTo(endPos, SCE_YAML_DEFAULT); + return; + } + i++; + } + if (i > i2) { + styler.ColourTo(endPos, SCE_YAML_NUMBER); + return; + } + } + break; // shouldn't get here, but just in case, the rest of the line is coloured the default + } + i++; + } + styler.ColourTo(endPos, SCE_YAML_DEFAULT); +} + +static void ColouriseYAMLDoc(unsigned int startPos, int length, int, WordList *keywordLists[], Accessor &styler) { + char lineBuffer[1024]; + styler.StartAt(startPos); + styler.StartSegment(startPos); + unsigned int linePos = 0; + unsigned int startLine = startPos; + unsigned int endPos = startPos + length; + unsigned int maxPos = styler.Length(); + unsigned int lineCurrent = styler.GetLine(startPos); + + for (unsigned int i = startPos; i < maxPos && i < endPos; 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'; + ColouriseYAMLLine(lineBuffer, lineCurrent, linePos, startLine, i, *keywordLists[0], styler); + linePos = 0; + startLine = i + 1; + lineCurrent++; + } + } + if (linePos > 0) { // Last line does not have ending characters + ColouriseYAMLLine(lineBuffer, lineCurrent, linePos, startLine, startPos + length - 1, *keywordLists[0], styler); + } +} + +static bool IsCommentLine(int line, Accessor &styler) { + int pos = styler.LineStart(line); + if (styler[pos] == '#') + return true; + return false; +} + +static void FoldYAMLDoc(unsigned int startPos, int length, int /*initStyle - unused*/, + WordList *[], Accessor &styler) { + const int maxPos = startPos + length; + const int maxLines = styler.GetLine(maxPos - 1); // Requested last line + const int docLines = styler.GetLine(styler.Length() - 1); // Available last line + const bool foldComment = styler.GetPropertyInt("fold.comment.yaml") != 0; + + // Backtrack to previous non-blank line so we can determine indent level + // for any white space lines + // and so we can fix any preceding fold level (which is why we go back + // at least one line in all cases) + int spaceFlags = 0; + int lineCurrent = styler.GetLine(startPos); + int indentCurrent = styler.IndentAmount(lineCurrent, &spaceFlags, NULL); + while (lineCurrent > 0) { + lineCurrent--; + indentCurrent = styler.IndentAmount(lineCurrent, &spaceFlags, NULL); + if (!(indentCurrent & SC_FOLDLEVELWHITEFLAG) && + (!IsCommentLine(lineCurrent, styler))) + break; + } + int indentCurrentLevel = indentCurrent & SC_FOLDLEVELNUMBERMASK; + + // Set up initial loop state + int prevComment = 0; + if (lineCurrent >= 1) + prevComment = foldComment && IsCommentLine(lineCurrent - 1, styler); + + // Process all characters to end of requested range + // or comment that hangs over the end of the range. Cap processing in all cases + // to end of document (in case of unclosed comment at end). + while ((lineCurrent <= docLines) && ((lineCurrent <= maxLines) || prevComment)) { + + // Gather info + int lev = indentCurrent; + int lineNext = lineCurrent + 1; + int indentNext = indentCurrent; + if (lineNext <= docLines) { + // Information about next line is only available if not at end of document + indentNext = styler.IndentAmount(lineNext, &spaceFlags, NULL); + } + const int comment = foldComment && IsCommentLine(lineCurrent, styler); + const int comment_start = (comment && !prevComment && (lineNext <= docLines) && + IsCommentLine(lineNext, styler) && (lev > SC_FOLDLEVELBASE)); + const int comment_continue = (comment && prevComment); + if (!comment) + indentCurrentLevel = indentCurrent & SC_FOLDLEVELNUMBERMASK; + if (indentNext & SC_FOLDLEVELWHITEFLAG) + indentNext = SC_FOLDLEVELWHITEFLAG | indentCurrentLevel; + + if (comment_start) { + // Place fold point at start of a block of comments + lev |= SC_FOLDLEVELHEADERFLAG; + } else if (comment_continue) { + // Add level to rest of lines in the block + lev = lev + 1; + } + + // Skip past any blank lines for next indent level info; we skip also + // comments (all comments, not just those starting in column 0) + // which effectively folds them into surrounding code rather + // than screwing up folding. + + while ((lineNext < docLines) && + ((indentNext & SC_FOLDLEVELWHITEFLAG) || + (lineNext <= docLines && IsCommentLine(lineNext, styler)))) { + + lineNext++; + indentNext = styler.IndentAmount(lineNext, &spaceFlags, NULL); + } + + const int levelAfterComments = indentNext & SC_FOLDLEVELNUMBERMASK; + const int levelBeforeComments = Platform::Maximum(indentCurrentLevel,levelAfterComments); + + // Now set all the indent levels on the lines we skipped + // Do this from end to start. Once we encounter one line + // which is indented more than the line after the end of + // the comment-block, use the level of the block before + + int skipLine = lineNext; + int skipLevel = levelAfterComments; + + while (--skipLine > lineCurrent) { + int skipLineIndent = styler.IndentAmount(skipLine, &spaceFlags, NULL); + + if ((skipLineIndent & SC_FOLDLEVELNUMBERMASK) > levelAfterComments) + skipLevel = levelBeforeComments; + + int whiteFlag = skipLineIndent & SC_FOLDLEVELWHITEFLAG; + + styler.SetLevel(skipLine, skipLevel | whiteFlag); + } + + // Set fold header on non-comment line + if (!comment && !(indentCurrent & SC_FOLDLEVELWHITEFLAG) ) { + if ((indentCurrent & SC_FOLDLEVELNUMBERMASK) < (indentNext & SC_FOLDLEVELNUMBERMASK)) + lev |= SC_FOLDLEVELHEADERFLAG; + } + + // Keep track of block comment state of previous line + prevComment = comment_start || comment_continue; + + // Set fold level for this line and move to next line + styler.SetLevel(lineCurrent, lev); + indentCurrent = indentNext; + lineCurrent = lineNext; + } + + // NOTE: Cannot set level of last line here because indentCurrent doesn't have + // header flag set; the loop above is crafted to take care of this case! + //styler.SetLevel(lineCurrent, indentCurrent); +} + +LexerModule lmYAML(SCLEX_YAML, ColouriseYAMLDoc, "yaml", FoldYAMLDoc, yamlWordListDesc);
Property changes on: trunk/scintilla/LexYAML.cxx ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native
Modified: trunk/scintilla/Makefile.am =================================================================== --- trunk/scintilla/Makefile.am 2008-11-29 12:51:05 UTC (rev 3289) +++ trunk/scintilla/Makefile.am 2008-11-29 12:51:50 UTC (rev 3290) @@ -17,6 +17,7 @@ LexFortran.cxx \ LexHaskell.cxx \ LexHTML.cxx \ +LexYAML.cxx \ LexLua.cxx \ LexOMS.cxx \ LexMatlab.cxx \
Modified: trunk/scintilla/makefile.win32 =================================================================== --- trunk/scintilla/makefile.win32 2008-11-29 12:51:05 UTC (rev 3289) +++ trunk/scintilla/makefile.win32 2008-11-29 12:51:50 UTC (rev 3290) @@ -62,7 +62,7 @@ LEXOBJS=\ LexBash.o LexAsm.o LexCSS.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 LexMatlab.o \ -LexD.o LexLua.o LexHaskell.o LexBasic.o LexR.o +LexD.o LexLua.o LexHaskell.o LexBasic.o LexR.o LexYAML.o #--Autogenerated -- end of automatically generated section
all: $(COMPLIB)
Modified: trunk/src/about.c =================================================================== --- trunk/src/about.c 2008-11-29 12:51:05 UTC (rev 3289) +++ trunk/src/about.c 2008-11-29 12:51:50 UTC (rev 3290) @@ -83,7 +83,7 @@ "Giuseppe Torelli, Guillaume Hoffmann, Herbert Voss, Jason Oster, Jean-François Wauthy, Jeff Pohlmeyer, " "John Gabriele, Josef Whiter, Kevin Ellwood, Kristoffer A. Tjernås, Marko Peric, Matti Mårds, Moritz Barsnick, " "Peter Strand, Pierre Joye, Rob van der Linde, Robert McGinley, Roland Baudin, S Jagannathan, Saleem Abdulrasool, " -"Sebastian Kraft, Shiv, Slava Semushin, Stefan Oltmanns, Tamim, Tomás Vírseda, Yura Siamashka"; +"Sebastian Kraft, Shiv, Slava Semushin, Stefan Oltmanns, Tamim, Tomás Vírseda, Walery Studennikov, Yura Siamashka";
static void header_eventbox_style_set(GtkWidget *widget);
Modified: trunk/src/editor.c =================================================================== --- trunk/src/editor.c 2008-11-29 12:51:05 UTC (rev 3289) +++ trunk/src/editor.c 2008-11-29 12:51:50 UTC (rev 3290) @@ -2934,6 +2934,9 @@ case SCLEX_FREEBASIC: return (style == SCE_B_COMMENT);
+ case SCLEX_YAML: + return (style == SCE_YAML_COMMENT); + case SCLEX_HTML: return (style == SCE_HPHP_COMMENTLINE || style == SCE_HPHP_COMMENT ||
Modified: trunk/src/filetypes.c =================================================================== --- trunk/src/filetypes.c 2008-11-29 12:51:05 UTC (rev 3289) +++ trunk/src/filetypes.c 2008-11-29 12:51:50 UTC (rev 3290) @@ -518,6 +518,17 @@ ft->comment_close = NULL; ft->group = GEANY_FILETYPE_GROUP_SCRIPT;
+#define YAML + ft = filetypes[GEANY_FILETYPES_YAML]; + ft->lang = -2; + ft->name = g_strdup("YAML"); + ft->title = g_strdup_printf(_("%s source file"), "YAML"); + ft->extension = g_strdup("yaml"); + ft->pattern = utils_strv_new("*.yaml", "*.yml", NULL); + ft->comment_open = g_strdup("#"); + ft->comment_close = NULL; + ft->group = GEANY_FILETYPE_GROUP_MISC; + #define ALL ft = filetypes[GEANY_FILETYPES_NONE]; ft->lang = -2;
Modified: trunk/src/filetypes.h =================================================================== --- trunk/src/filetypes.h 2008-11-29 12:51:05 UTC (rev 3289) +++ trunk/src/filetypes.h 2008-11-29 12:51:50 UTC (rev 3290) @@ -72,15 +72,16 @@ GEANY_FILETYPES_CSS, GEANY_FILETYPES_DOCBOOK, GEANY_FILETYPES_HTML, - GEANY_FILETYPES_XML, + GEANY_FILETYPES_XML,
/* miscellaneous languages */ GEANY_FILETYPES_CONF, GEANY_FILETYPES_DIFF, + GEANY_FILETYPES_PO, GEANY_FILETYPES_LATEX, GEANY_FILETYPES_REST, GEANY_FILETYPES_SQL, - GEANY_FILETYPES_PO, + GEANY_FILETYPES_YAML,
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-11-29 12:51:05 UTC (rev 3289) +++ trunk/src/highlighting.c 2008-11-29 12:51:50 UTC (rev 3290) @@ -2883,6 +2883,52 @@ }
+static void styleset_yaml_init(gint ft_id, GKeyFile *config, GKeyFile *config_home) +{ + new_style_array(GEANY_FILETYPES_YAML, 10); + + get_keyfile_hex(config, config_home, "styling", "default", "0x000000", "0xffffff", "false", &style_sets[GEANY_FILETYPES_YAML].styling[0]); + get_keyfile_hex(config, config_home, "styling", "comment", "0x808080", "0xffffff", "false", &style_sets[GEANY_FILETYPES_YAML].styling[1]); + get_keyfile_hex(config, config_home, "styling", "identifier", "0x000088", "0xffffff", "true", &style_sets[GEANY_FILETYPES_YAML].styling[2]); + get_keyfile_hex(config, config_home, "styling", "keyword", "0x991111", "0xffffff", "true", &style_sets[GEANY_FILETYPES_YAML].styling[3]); + get_keyfile_hex(config, config_home, "styling", "number", "0x007f00", "0xffffff", "false", &style_sets[GEANY_FILETYPES_YAML].styling[4]); + get_keyfile_hex(config, config_home, "styling", "reference", "0x008888", "0xffffff", "false", &style_sets[GEANY_FILETYPES_YAML].styling[5]); + get_keyfile_hex(config, config_home, "styling", "document", "0x000088", "0xffffff", "false", &style_sets[GEANY_FILETYPES_YAML].styling[6]); + get_keyfile_hex(config, config_home, "styling", "text", "0x333366", "0xffffff", "false", &style_sets[GEANY_FILETYPES_YAML].styling[7]); + get_keyfile_hex(config, config_home, "styling", "error", "0xff0000", "0xffffff", "true", &style_sets[GEANY_FILETYPES_YAML].styling[8]); + get_keyfile_hex(config, config_home, "styling", "operator", "0x301010", "0xffffff", "false", &style_sets[GEANY_FILETYPES_YAML].styling[9]); + + style_sets[GEANY_FILETYPES_YAML].keywords = g_new(gchar*, 2); + get_keyfile_keywords(config, config_home, "keywords", "keywords", GEANY_FILETYPES_YAML, 0, "true false yes no"); + style_sets[GEANY_FILETYPES_YAML].keywords[1] = NULL; + + get_keyfile_wordchars(config, config_home, + &style_sets[GEANY_FILETYPES_VHDL].wordchars); +} + + +static void styleset_yaml(ScintillaObject *sci) +{ + const filetype_id ft_id = GEANY_FILETYPES_YAML; + + apply_filetype_properties(sci, SCLEX_YAML, ft_id); + + SSM(sci, SCI_SETKEYWORDS, 0, (sptr_t) style_sets[GEANY_FILETYPES_YAML].keywords[0]); + + set_sci_style(sci, STYLE_DEFAULT, GEANY_FILETYPES_YAML, 0); + set_sci_style(sci, SCE_YAML_DEFAULT, GEANY_FILETYPES_YAML, 0); + set_sci_style(sci, SCE_YAML_COMMENT, GEANY_FILETYPES_YAML, 1); + set_sci_style(sci, SCE_YAML_IDENTIFIER, GEANY_FILETYPES_YAML, 2); + set_sci_style(sci, SCE_YAML_KEYWORD, GEANY_FILETYPES_YAML, 3); + set_sci_style(sci, SCE_YAML_NUMBER, GEANY_FILETYPES_YAML, 4); + set_sci_style(sci, SCE_YAML_REFERENCE, GEANY_FILETYPES_YAML, 5); + set_sci_style(sci, SCE_YAML_DOCUMENT, GEANY_FILETYPES_YAML, 6); + set_sci_style(sci, SCE_YAML_TEXT, GEANY_FILETYPES_YAML, 7); + set_sci_style(sci, SCE_YAML_ERROR, GEANY_FILETYPES_YAML, 8); + set_sci_style(sci, SCE_YAML_OPERATOR, GEANY_FILETYPES_YAML, 9); +} + + static void styleset_js_init(gint ft_id, GKeyFile *config, GKeyFile *config_home) { new_style_array(GEANY_FILETYPES_JS, 20); @@ -3208,6 +3254,7 @@ init_styleset_case(GEANY_FILETYPES_VALA, vala); init_styleset_case(GEANY_FILETYPES_VHDL, vhdl); init_styleset_case(GEANY_FILETYPES_XML, markup); + init_styleset_case(GEANY_FILETYPES_YAML, yaml); } }
@@ -3266,6 +3313,7 @@ styleset_case(GEANY_FILETYPES_VALA, vala); styleset_case(GEANY_FILETYPES_VHDL, vhdl); styleset_case(GEANY_FILETYPES_XML, xml); + styleset_case(GEANY_FILETYPES_YAML, yaml); default: styleset_case(GEANY_FILETYPES_NONE, none); }
Modified: trunk/src/plugindata.h =================================================================== --- trunk/src/plugindata.h 2008-11-29 12:51:05 UTC (rev 3289) +++ trunk/src/plugindata.h 2008-11-29 12:51:50 UTC (rev 3290) @@ -45,13 +45,13 @@ enum { /** The Application Programming Interface (API) version, incremented * whenever any plugin data types are modified or appended to. */ - GEANY_API_VERSION = 111, + GEANY_API_VERSION = 112,
/** The Application Binary Interface (ABI) version, incremented whenever * 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 = 50 + GEANY_ABI_VERSION = 51 };
/** Check the plugin can be loaded by Geany.
Modified: trunk/src/templates.c =================================================================== --- trunk/src/templates.c 2008-11-29 12:51:05 UTC (rev 3289) +++ trunk/src/templates.c 2008-11-29 12:51:50 UTC (rev 3290) @@ -577,6 +577,7 @@ case GEANY_FILETYPES_OMS: case GEANY_FILETYPES_CONF: case GEANY_FILETYPES_PO: + case GEANY_FILETYPES_YAML: { line_prefix = "#"; break;
Modified: trunk/wscript =================================================================== --- trunk/wscript 2008-11-29 12:51:05 UTC (rev 3289) +++ trunk/wscript 2008-11-29 12:51:50 UTC (rev 3290) @@ -76,7 +76,7 @@ 'scintilla/LexFortran.cxx', 'scintilla/LexHaskell.cxx', 'scintilla/LexHTML.cxx', 'scintilla/LexLua.cxx', 'scintilla/LexOMS.cxx', 'scintilla/LexOthers.cxx', 'scintilla/LexPascal.cxx', 'scintilla/LexPerl.cxx', 'scintilla/LexPython.cxx', - 'scintilla/LexR.cxx', 'scintilla/LexMatlab.cxx', + 'scintilla/LexR.cxx', 'scintilla/LexMatlab.cxx', 'scintilla/LexYAML.cxx', 'scintilla/LexRuby.cxx', 'scintilla/LexSQL.cxx', 'scintilla/LexTCL.cxx', 'scintilla/LexVHDL.cxx', 'scintilla/LineMarker.cxx', 'scintilla/PlatGTK.cxx', 'scintilla/PositionCache.cxx', 'scintilla/PropSet.cxx', 'scintilla/RESearch.cxx',
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.