[geany/geany-plugins] 22bec4: Merge pull request #100 from b4n/fixes/pair-tag-highlighter

Frank Lanitz git-noreply at xxxxx
Fri May 10 06:36:30 UTC 2013


Branch:      refs/heads/master
Author:      Frank Lanitz <frank at frank.uvena.de>
Committer:   Frank Lanitz <frank at frank.uvena.de>
Date:        Fri, 10 May 2013 06:36:30 UTC
Commit:      22bec45559dad767df53dbfd945f139b30f34ba1
             https://github.com/geany/geany-plugins/commit/22bec45559dad767df53dbfd945f139b30f34ba1

Log Message:
-----------
Merge pull request #100 from b4n/fixes/pair-tag-highlighter

Fix crash on unloading plugin PairTagHighlighter


Modified Paths:
--------------
    pairtaghighlighter/src/pair_tag_highlighter.c

Modified: pairtaghighlighter/src/pair_tag_highlighter.c
84 files changed, 42 insertions(+), 42 deletions(-)
===================================================================
@@ -24,8 +24,6 @@
 GeanyData       *geany_data;
 GeanyFunctions  *geany_functions;
 
-static ScintillaObject *sci;
-
 /* Is needed for clearing highlighting after moving cursor out
  * from the tag */
 static gint highlightedBrackets[] = {0, 0, 0, 0};
@@ -43,7 +41,7 @@
  * FALSE - to the left
  * from the current cursor position to the start of the line.
  */
-static gint findBracket(gint position, gint endOfSearchPos,
+static gint findBracket(ScintillaObject *sci, gint position, gint endOfSearchPos,
                         gchar searchedBracket, gchar breakBracket, gboolean direction)
 {
     gint foundBracket = -1;
@@ -84,7 +82,7 @@ static gint findBracket(gint position, gint endOfSearchPos,
 }
 
 
-static void highlight_tag(gint openingBracket, gint closingBracket)
+static void highlight_tag(ScintillaObject *sci, gint openingBracket, gint closingBracket)
 {
     scintilla_send_message(sci, SCI_SETINDICATORCURRENT, INDICATOR_TAGMATCH, 0);
     scintilla_send_message(sci, SCI_INDICSETSTYLE,
@@ -96,14 +94,14 @@ static void highlight_tag(gint openingBracket, gint closingBracket)
 }
 
 
-static void clear_previous_highlighting(gint rangeStart, gint rangeEnd)
+static void clear_previous_highlighting(ScintillaObject *sci, gint rangeStart, gint rangeEnd)
 {
     scintilla_send_message(sci, SCI_SETINDICATORCURRENT, INDICATOR_TAGMATCH, 0);
     scintilla_send_message(sci, SCI_INDICATORCLEARRANGE, rangeStart, rangeEnd+1);
 }
 
 
-static gboolean is_tag_self_closing(gint closingBracket)
+static gboolean is_tag_self_closing(ScintillaObject *sci, gint closingBracket)
 {
     gboolean isTagSelfClosing = FALSE;
     gchar charBeforeBracket = sci_get_char_at(sci, closingBracket-1);
@@ -114,7 +112,7 @@ static gboolean is_tag_self_closing(gint closingBracket)
 }
 
 
-static gboolean is_tag_opening(gint openingBracket)
+static gboolean is_tag_opening(ScintillaObject *sci, gint openingBracket)
 {
     gboolean isTagOpening = TRUE;
     gchar charAfterBracket = sci_get_char_at(sci, openingBracket+1);
@@ -125,7 +123,7 @@ static gboolean is_tag_opening(gint openingBracket)
 }
 
 
-static void get_tag_name(gint openingBracket, gint closingBracket,
+static void get_tag_name(ScintillaObject *sci, gint openingBracket, gint closingBracket,
                     gchar tagName[], gboolean isTagOpening)
 {
     gint nameStart = openingBracket + (TRUE == isTagOpening ? 1 : 2);
@@ -144,7 +142,7 @@ static void get_tag_name(gint openingBracket, gint closingBracket,
 }
 
 
-static void findMatchingOpeningTag(gchar *tagName, gint openingBracket)
+static void findMatchingOpeningTag(ScintillaObject *sci, gchar *tagName, gint openingBracket)
 {
     gint pos;
     gint openingTagsCount = 0;
@@ -155,16 +153,16 @@ static void findMatchingOpeningTag(gchar *tagName, gint openingBracket)
         /* are we inside tag? */
         gint lineNumber = sci_get_line_from_position(sci, pos);
         gint lineStart = sci_get_position_from_line(sci, lineNumber);
-        gint matchingOpeningBracket = findBracket(pos, lineStart, '<', '\0', FALSE);
-        gint matchingClosingBracket = findBracket(pos, lineStart, '>', '\0', FALSE);
+        gint matchingOpeningBracket = findBracket(sci, pos, lineStart, '<', '\0', FALSE);
+        gint matchingClosingBracket = findBracket(sci, pos, lineStart, '>', '\0', FALSE);
 
         if(-1 != matchingOpeningBracket && -1 != matchingClosingBracket
             && (matchingClosingBracket > matchingOpeningBracket))
         {
             /* we are inside of some tag. Let us check what tag*/
             gchar matchingTagName[MAX_TAG_NAME];
-            gboolean isMatchingTagOpening = is_tag_opening(matchingOpeningBracket);
-            get_tag_name(matchingOpeningBracket, matchingClosingBracket,
+            gboolean isMatchingTagOpening = is_tag_opening(sci, matchingOpeningBracket);
+            get_tag_name(sci, matchingOpeningBracket, matchingClosingBracket,
                             matchingTagName, isMatchingTagOpening);
             if(strcmp(tagName, matchingTagName) == 0)
             {
@@ -186,7 +184,7 @@ static void findMatchingOpeningTag(gchar *tagName, gint openingBracket)
         if(openingTagsCount == closingTagsCount)
         {
             /* matching tag is found */
-            highlight_tag(matchingOpeningBracket, matchingClosingBracket);
+            highlight_tag(sci, matchingOpeningBracket, matchingClosingBracket);
             highlightedBrackets[2] = matchingOpeningBracket;
             highlightedBrackets[3] = matchingClosingBracket;
             break;
@@ -195,7 +193,7 @@ static void findMatchingOpeningTag(gchar *tagName, gint openingBracket)
 }
 
 
-static void findMatchingClosingTag(gchar *tagName, gint closingBracket)
+static void findMatchingClosingTag(ScintillaObject *sci, gchar *tagName, gint closingBracket)
 {
     gint pos;
     gint linesInDocument = sci_get_line_count(sci);
@@ -208,16 +206,16 @@ static void findMatchingClosingTag(gchar *tagName, gint closingBracket)
         /* are we inside tag? */
         gint lineNumber = sci_get_line_from_position(sci, pos);
         gint lineEnd = sci_get_line_end_position(sci, lineNumber);
-        gint matchingOpeningBracket = findBracket(pos, endOfDocument, '<', '\0', TRUE);
-        gint matchingClosingBracket = findBracket(pos, endOfDocument, '>', '\0', TRUE);
+        gint matchingOpeningBracket = findBracket(sci, pos, endOfDocument, '<', '\0', TRUE);
+        gint matchingClosingBracket = findBracket(sci, pos, endOfDocument, '>', '\0', TRUE);
 
         if(-1 != matchingOpeningBracket && -1 != matchingClosingBracket
             && (matchingClosingBracket > matchingOpeningBracket))
         {
             /* we are inside of some tag. Let us check what tag*/
             gchar matchingTagName[64];
-            gboolean isMatchingTagOpening = is_tag_opening(matchingOpeningBracket);
-            get_tag_name(matchingOpeningBracket, matchingClosingBracket,
+            gboolean isMatchingTagOpening = is_tag_opening(sci, matchingOpeningBracket);
+            get_tag_name(sci, matchingOpeningBracket, matchingClosingBracket,
                             matchingTagName, isMatchingTagOpening);
             if(strcmp(tagName, matchingTagName) == 0)
             {
@@ -239,7 +237,7 @@ static void findMatchingClosingTag(gchar *tagName, gint closingBracket)
         if(openingTagsCount == closingTagsCount)
         {
             /* matching tag is found */
-            highlight_tag(matchingOpeningBracket, matchingClosingBracket);
+            highlight_tag(sci, matchingOpeningBracket, matchingClosingBracket);
             highlightedBrackets[2] = matchingOpeningBracket;
             highlightedBrackets[3] = matchingClosingBracket;
             break;
@@ -248,33 +246,33 @@ static void findMatchingClosingTag(gchar *tagName, gint closingBracket)
 }
 
 
-static void findMatchingTag(gint openingBracket, gint closingBracket)
+static void findMatchingTag(ScintillaObject *sci, gint openingBracket, gint closingBracket)
 {
     gchar tagName[MAX_TAG_NAME];
-    gboolean isTagOpening = is_tag_opening(openingBracket);
-    get_tag_name(openingBracket, closingBracket, tagName, isTagOpening);
+    gboolean isTagOpening = is_tag_opening(sci, openingBracket);
+    get_tag_name(sci, openingBracket, closingBracket, tagName, isTagOpening);
 
     if(TRUE == isTagOpening)
-        findMatchingClosingTag(tagName, closingBracket);
+        findMatchingClosingTag(sci, tagName, closingBracket);
     else
-        findMatchingOpeningTag(tagName, openingBracket);
+        findMatchingOpeningTag(sci, tagName, openingBracket);
 }
 
 
-static void run_tag_highlighter(void)
+static void run_tag_highlighter(ScintillaObject *sci)
 {
     gint position = sci_get_current_position(sci);
     gint lineNumber = sci_get_current_line(sci);
     gint lineStart = sci_get_position_from_line(sci, lineNumber);
     gint lineEnd = sci_get_line_end_position(sci, lineNumber);
-    gint openingBracket = findBracket(position, lineStart, '<', '>', FALSE);
-    gint closingBracket = findBracket(position, lineEnd, '>', '<', TRUE);
+    gint openingBracket = findBracket(sci, position, lineStart, '<', '>', FALSE);
+    gint closingBracket = findBracket(sci, position, lineEnd, '>', '<', TRUE);
     int i;
 
     if(-1 == openingBracket || -1 == closingBracket)
     {
-        clear_previous_highlighting(highlightedBrackets[0], highlightedBrackets[1]);
-        clear_previous_highlighting(highlightedBrackets[2], highlightedBrackets[3]);
+        clear_previous_highlighting(sci, highlightedBrackets[0], highlightedBrackets[1]);
+        clear_previous_highlighting(sci, highlightedBrackets[2], highlightedBrackets[3]);
         for(i=0; i<3; i++)
             highlightedBrackets[i] = 0;
         return;
@@ -285,8 +283,8 @@ static void run_tag_highlighter(void)
     if(openingBracket != highlightedBrackets[0] ||
         closingBracket != highlightedBrackets[1])
     {
-        clear_previous_highlighting(highlightedBrackets[0], highlightedBrackets[1]);
-        clear_previous_highlighting(highlightedBrackets[2], highlightedBrackets[3]);
+        clear_previous_highlighting(sci, highlightedBrackets[0], highlightedBrackets[1]);
+        clear_previous_highlighting(sci, highlightedBrackets[2], highlightedBrackets[3]);
     }
 
     highlightedBrackets[0] = openingBracket;
@@ -294,11 +292,11 @@ static void run_tag_highlighter(void)
 
     /* Highlight current tag. Matching tag will be highlighted from
      * findMatchingTag() functiong */
-    highlight_tag(openingBracket, closingBracket);
+    highlight_tag(sci, openingBracket, closingBracket);
 
     /* Find matching tag only if a tag is not self-closing */
-    if(FALSE == is_tag_self_closing(closingBracket))
-        findMatchingTag(openingBracket, closingBracket);
+    if(FALSE == is_tag_self_closing(sci, closingBracket))
+        findMatchingTag(sci, openingBracket, closingBracket);
 }
 
 
@@ -308,10 +306,7 @@ static gboolean on_editor_notify(GObject *obj, GeanyEditor *editor,
 {
     gint lexer;
 
-    /* setting global sci variable to be available in other functions */
-    sci = editor->sci;
-
-    lexer = sci_get_lexer(sci);
+    lexer = sci_get_lexer(editor->sci);
     if(lexer != SCLEX_HTML)
     {
         return FALSE;
@@ -321,7 +316,7 @@ static gboolean on_editor_notify(GObject *obj, GeanyEditor *editor,
     switch (nt->nmhdr.code)
     {
         case SCN_UPDATEUI:
-            run_tag_highlighter();
+            run_tag_highlighter(editor->sci);
             break;
     }
 
@@ -344,6 +339,11 @@ void plugin_init(GeanyData *data)
 
 void plugin_cleanup(void)
 {
-    clear_previous_highlighting(highlightedBrackets[0], highlightedBrackets[1]);
-    clear_previous_highlighting(highlightedBrackets[2], highlightedBrackets[3]);
+    GeanyDocument *doc = document_get_current();
+
+    if (doc)
+    {
+        clear_previous_highlighting(doc->editor->sci, highlightedBrackets[0], highlightedBrackets[1]);
+        clear_previous_highlighting(doc->editor->sci, highlightedBrackets[2], highlightedBrackets[3]);
+    }
 }



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Plugins-Commits mailing list