Revision: 3399 http://geany.svn.sourceforge.net/geany/?rev=3399&view=rev Author: eht16 Date: 2008-12-18 17:46:41 +0000 (Thu, 18 Dec 2008)
Log Message: ----------- Fix too ambitious auto tag closing in HTML files inside embedded scripting languages. Complete HTML styles in is_comment_style() and is_string_style().
Modified Paths: -------------- trunk/ChangeLog trunk/src/editor.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2008-12-18 17:28:11 UTC (rev 3398) +++ trunk/ChangeLog 2008-12-18 17:46:41 UTC (rev 3399) @@ -1,3 +1,11 @@ +2008-12-18 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> + + * src/editor.c: + Fix too ambitious auto tag closing in HTML files inside embedded + scripting languages. + Complete HTML styles in is_comment_style() and is_string_style(). + + 2008-12-18 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
* tagmanager/html.c: @@ -6,7 +14,7 @@ On quitting, sort list of active plugins by plugin name.
- 2008-12-17 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> +2008-12-17 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
* src/keyfile.c: Fix broken session file support on Windows.
Modified: trunk/src/editor.c =================================================================== --- trunk/src/editor.c 2008-12-18 17:28:11 UTC (rev 3398) +++ trunk/src/editor.c 2008-12-18 17:46:41 UTC (rev 3399) @@ -85,10 +85,11 @@
static void on_new_line_added(GeanyEditor *editor); -static gboolean handle_xml(GeanyEditor *editor, gchar ch); +static gboolean handle_xml(GeanyEditor *editor, gint pos, gchar ch); static void insert_indent_after_line(GeanyEditor *editor, gint line); static void auto_multiline(GeanyEditor *editor, gint pos); static gboolean is_code_style(gint lexer, gint style); +static gboolean is_string_style(gint lexer, gint style); static void auto_close_chars(ScintillaObject *sci, gint pos, gchar c); static void auto_table(GeanyEditor *editor, gint pos); static void close_block(GeanyEditor *editor, gint pos); @@ -430,7 +431,7 @@ case '>': case '/': { /* close xml-tags */ - handle_xml(editor, nt->ch); + handle_xml(editor, pos, nt->ch); break; } case '(': @@ -2037,11 +2038,11 @@ * @param ch The character we are dealing with, currently only works with the '>' character * @return True if handled, false otherwise */ -static gboolean handle_xml(GeanyEditor *editor, gchar ch) +static gboolean handle_xml(GeanyEditor *editor, gint pos, gchar ch) { ScintillaObject *sci = editor->sci; gint lexer = SSM(sci, SCI_GETLEXER, 0, 0); - gint pos, min; + gint min, style; gchar *str_found, sel[512]; gboolean result = FALSE;
@@ -2050,16 +2051,11 @@ if (! editor_prefs.auto_close_xml_tags || (lexer != SCLEX_HTML && lexer != SCLEX_XML)) return FALSE;
- pos = sci_get_current_position(sci); + /* return if we are inside any embedded script */ + style = sci_get_style_at(sci, pos); + if (style > SCE_H_XCCOMMENT && ! is_string_style(lexer, style)) + return FALSE;
- /* return if we are in PHP but not in a string or outside of <? ?> tags */ - if (editor->document->file_type->id == GEANY_FILETYPES_PHP) - { - gint style = sci_get_style_at(sci, pos); - if (is_style_php(style) && style != SCE_HPHP_SIMPLESTRING && style != SCE_HPHP_HSTRING) - return FALSE; - } - /* if ch is /, check for </, else quit */ if (ch == '/' && sci_get_char_at(sci, pos - 2) != '<') return FALSE; @@ -2910,14 +2906,31 @@ style == SCE_MATLAB_DOUBLEQUOTESTRING);
case SCLEX_HTML: - return (style == SCE_HPHP_SIMPLESTRING || + return ( + style == SCE_HBA_STRING || + style == SCE_HB_STRING || + style == SCE_H_CDATA || + style == SCE_H_DOUBLESTRING || + style == SCE_HJA_DOUBLESTRING || + style == SCE_HJA_SINGLESTRING || + style == SCE_HJ_DOUBLESTRING || + style == SCE_HJ_SINGLESTRING || + style == SCE_HPA_CHARACTER || + style == SCE_HPA_STRING || + style == SCE_HPA_TRIPLE || + style == SCE_HPA_TRIPLEDOUBLE || + style == SCE_HP_CHARACTER || + style == SCE_HPHP_HSTRING || style == SCE_HPHP_HSTRING || /* HSTRING is a heredoc */ style == SCE_HPHP_HSTRING_VARIABLE || - style == SCE_H_DOUBLESTRING || - style == SCE_H_SINGLESTRING || - style == SCE_H_CDATA || + style == SCE_HPHP_SIMPLESTRING || + style == SCE_HPHP_SIMPLESTRING || + style == SCE_HP_STRING || + style == SCE_HP_TRIPLE || + style == SCE_HP_TRIPLEDOUBLE || style == SCE_H_SGML_DOUBLESTRING || - style == SCE_H_SGML_SIMPLESTRING); + style == SCE_H_SGML_SIMPLESTRING || + style == SCE_H_SINGLESTRING); } return FALSE; } @@ -3013,9 +3026,20 @@ return (style == SCE_YAML_COMMENT);
case SCLEX_HTML: - return (style == SCE_HPHP_COMMENTLINE || + return ( + style == SCE_HBA_COMMENTLINE || + style == SCE_HB_COMMENTLINE || + style == SCE_H_COMMENT || + style == SCE_HJA_COMMENT || + style == SCE_HJA_COMMENTDOC || + style == SCE_HJA_COMMENTLINE || + style == SCE_HJ_COMMENT || + style == SCE_HJ_COMMENTDOC || + style == SCE_HJ_COMMENTLINE || + style == SCE_HPA_COMMENTLINE || + style == SCE_HP_COMMENTLINE || style == SCE_HPHP_COMMENT || - style == SCE_H_COMMENT || + style == SCE_HPHP_COMMENTLINE || style == SCE_H_SGML_COMMENT); } return FALSE;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.