Skip to content

Commit

Permalink
Merge pull request #121 from vmkononenko/master
Browse files Browse the repository at this point in the history
PairTagHighlighter: changes in highlighting
  • Loading branch information
frlan committed Oct 30, 2013
2 parents fa3190d + 9586c57 commit c5482de
Showing 1 changed file with 49 additions and 21 deletions.
70 changes: 49 additions & 21 deletions pairtaghighlighter/src/pair_tag_highlighter.c
Expand Up @@ -14,11 +14,13 @@
#include "Scintilla.h" /* for the SCNotification struct */
#include "SciLexer.h"

/* If to set indicator >8, highlighting will be of grey color.
* Light grey line highlighter covers higher values of indicator. */
#define INDICATOR_TAGMATCH 0
#define INDICATOR_TAGMATCH 9
#define MAX_TAG_NAME 64

#define MATCHING_PAIR_COLOR 0x00ff00 /* green */
#define NONMATCHING_PAIR_COLOR 0xff0000 /* red */
#define EMPTY_TAG_COLOR 0xffff00 /* yellow */

/* These items are set by Geany before plugin_init() is called. */
GeanyPlugin *geany_plugin;
GeanyData *geany_data;
Expand Down Expand Up @@ -82,18 +84,42 @@ static gint findBracket(ScintillaObject *sci, gint position, gint endOfSearchPos
}


static void highlight_tag(ScintillaObject *sci, gint openingBracket, gint closingBracket)
static gint rgb2bgr(gint color)
{
guint r, g, b;

r = color >> 16;
g = (0x00ff00 & color) >> 8;
b = (0x0000ff & color);

color = (r | (g << 8) | (b << 16));

return color;
}


static void highlight_tag(ScintillaObject *sci, gint openingBracket,
gint closingBracket, gint color)
{
scintilla_send_message(sci, SCI_SETINDICATORCURRENT, INDICATOR_TAGMATCH, 0);
scintilla_send_message(sci, SCI_INDICSETSTYLE,
INDICATOR_TAGMATCH, INDIC_ROUNDBOX);
scintilla_send_message(sci, SCI_INDICSETFORE, 0, 0x00d000); /* green */
scintilla_send_message(sci, SCI_INDICSETFORE, INDICATOR_TAGMATCH, rgb2bgr(color));
scintilla_send_message(sci, SCI_INDICSETALPHA, INDICATOR_TAGMATCH, 60);
scintilla_send_message(sci, SCI_INDICATORFILLRANGE,
openingBracket, closingBracket-openingBracket+1);
}


static void highlight_matching_pair(ScintillaObject *sci)
{
highlight_tag(sci, highlightedBrackets[0], highlightedBrackets[1],
MATCHING_PAIR_COLOR);
highlight_tag(sci, highlightedBrackets[2], highlightedBrackets[3],
MATCHING_PAIR_COLOR);
}


static void clear_previous_highlighting(ScintillaObject *sci, gint rangeStart, gint rangeEnd)
{
scintilla_send_message(sci, SCI_SETINDICATORCURRENT, INDICATOR_TAGMATCH, 0);
Expand Down Expand Up @@ -184,12 +210,14 @@ static void findMatchingOpeningTag(ScintillaObject *sci, gchar *tagName, gint op
if(openingTagsCount == closingTagsCount)
{
/* matching tag is found */
highlight_tag(sci, matchingOpeningBracket, matchingClosingBracket);
highlightedBrackets[2] = matchingOpeningBracket;
highlightedBrackets[3] = matchingClosingBracket;
break;
highlight_matching_pair(sci);
return;
}
}
highlight_tag(sci, highlightedBrackets[0], highlightedBrackets[1],
NONMATCHING_PAIR_COLOR);
}


Expand Down Expand Up @@ -237,25 +265,31 @@ static void findMatchingClosingTag(ScintillaObject *sci, gchar *tagName, gint cl
if(openingTagsCount == closingTagsCount)
{
/* matching tag is found */
highlight_tag(sci, matchingOpeningBracket, matchingClosingBracket);
highlightedBrackets[2] = matchingOpeningBracket;
highlightedBrackets[3] = matchingClosingBracket;
break;
highlight_matching_pair(sci);
return;
}
}
highlight_tag(sci, highlightedBrackets[0], highlightedBrackets[1],
NONMATCHING_PAIR_COLOR);
}


static void findMatchingTag(ScintillaObject *sci, gint openingBracket, gint closingBracket)
{
gchar tagName[MAX_TAG_NAME];
gboolean isTagOpening = is_tag_opening(sci, openingBracket);
get_tag_name(sci, openingBracket, closingBracket, tagName, isTagOpening);

if(TRUE == isTagOpening)
findMatchingClosingTag(sci, tagName, closingBracket);
else
findMatchingOpeningTag(sci, tagName, openingBracket);
if(is_tag_self_closing(sci, closingBracket)) {
highlight_tag(sci, openingBracket, closingBracket, EMPTY_TAG_COLOR);
} else {
get_tag_name(sci, openingBracket, closingBracket, tagName, isTagOpening);
if(isTagOpening)
findMatchingClosingTag(sci, tagName, closingBracket);
else
findMatchingOpeningTag(sci, tagName, openingBracket);
}
}


Expand Down Expand Up @@ -290,13 +324,7 @@ static void run_tag_highlighter(ScintillaObject *sci)
highlightedBrackets[0] = openingBracket;
highlightedBrackets[1] = closingBracket;

/* Highlight current tag. Matching tag will be highlighted from
* findMatchingTag() functiong */
highlight_tag(sci, openingBracket, closingBracket);

/* Find matching tag only if a tag is not self-closing */
if(FALSE == is_tag_self_closing(sci, closingBracket))
findMatchingTag(sci, openingBracket, closingBracket);
findMatchingTag(sci, openingBracket, closingBracket);
}


Expand Down

0 comments on commit c5482de

Please sign in to comment.