[NEW_FEATURE] Add indent guide line highlighting for html/xml tags.
git-svn-id: svn://svn.tuxfamily.org/svnroot/notepadplus/repository/trunk@571 f5eea248-9336-0410-98b8-ebc06183d4e3
This commit is contained in:
parent
a6bffa9666
commit
215b5c0049
@ -2688,7 +2688,36 @@ BOOL Notepad_plus::notify(SCNotification *notification)
|
|||||||
if (nppGui._enableTagsMatchHilite)
|
if (nppGui._enableTagsMatchHilite)
|
||||||
{
|
{
|
||||||
XmlMatchedTagsHighlighter xmlTagMatchHiliter(_pEditView);
|
XmlMatchedTagsHighlighter xmlTagMatchHiliter(_pEditView);
|
||||||
xmlTagMatchHiliter.tagMatch(nppGui._enableTagAttrsHilite);
|
pair<int, int> tagPos = xmlTagMatchHiliter.tagMatch(nppGui._enableTagAttrsHilite);
|
||||||
|
|
||||||
|
int braceAtCaret = tagPos.first;
|
||||||
|
int braceOpposite = tagPos.second;
|
||||||
|
|
||||||
|
if ((braceAtCaret != -1) && (braceOpposite == -1))
|
||||||
|
{
|
||||||
|
_pEditView->execute(SCI_SETHIGHLIGHTGUIDE, 0);
|
||||||
|
}
|
||||||
|
else if (_pEditView->isShownIndentGuide())
|
||||||
|
{
|
||||||
|
int columnAtCaret = int(_pEditView->execute(SCI_GETCOLUMN, braceAtCaret));
|
||||||
|
int columnOpposite = int(_pEditView->execute(SCI_GETCOLUMN, braceOpposite));
|
||||||
|
|
||||||
|
int lineAtCaret = int(_pEditView->execute(SCI_LINEFROMPOSITION, braceAtCaret));
|
||||||
|
int lineOpposite = int(_pEditView->execute(SCI_LINEFROMPOSITION, braceOpposite));
|
||||||
|
if (lineAtCaret != lineOpposite)
|
||||||
|
{
|
||||||
|
StyleArray & stylers = nppParam->getMiscStylerArray();
|
||||||
|
int iFind = stylers.getStylerIndexByID(SCE_UNIVERSAL_TAGMATCH);
|
||||||
|
if (iFind)
|
||||||
|
{
|
||||||
|
Style *pStyle = &(stylers.getStyler(iFind));
|
||||||
|
_pEditView->execute(SCI_STYLESETFORE, STYLE_BRACELIGHT, pStyle->_bgColor);
|
||||||
|
}
|
||||||
|
// braceAtCaret - 1, braceOpposite-1 : walk around to not highlight the '<'
|
||||||
|
_pEditView->execute(SCI_BRACEHIGHLIGHT, braceAtCaret-1, braceOpposite-1);
|
||||||
|
_pEditView->execute(SCI_SETHIGHLIGHTGUIDE, (columnAtCaret < columnOpposite)?columnAtCaret:columnOpposite);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nppGui._enableSmartHilite)
|
if (nppGui._enableSmartHilite)
|
||||||
@ -3090,7 +3119,7 @@ void Notepad_plus::braceMatch()
|
|||||||
if ((braceAtCaret != -1) && (braceOpposite == -1))
|
if ((braceAtCaret != -1) && (braceOpposite == -1))
|
||||||
{
|
{
|
||||||
_pEditView->execute(SCI_BRACEBADLIGHT, braceAtCaret);
|
_pEditView->execute(SCI_BRACEBADLIGHT, braceAtCaret);
|
||||||
_pEditView->execute(SCI_SETHIGHLIGHTGUIDE);
|
_pEditView->execute(SCI_SETHIGHLIGHTGUIDE, 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -439,7 +439,7 @@ vector< pair<int, int> > XmlMatchedTagsHighlighter::getAttributesPos(int start,
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void XmlMatchedTagsHighlighter::tagMatch(bool doHiliteAttr)
|
pair<int, int> XmlMatchedTagsHighlighter::tagMatch(bool doHiliteAttr)
|
||||||
{
|
{
|
||||||
// Clean up all marks of previous action
|
// Clean up all marks of previous action
|
||||||
_pEditView->clearIndicator(SCE_UNIVERSAL_TAGMATCH);
|
_pEditView->clearIndicator(SCE_UNIVERSAL_TAGMATCH);
|
||||||
@ -449,7 +449,7 @@ void XmlMatchedTagsHighlighter::tagMatch(bool doHiliteAttr)
|
|||||||
LangType lang = (_pEditView->getCurrentBuffer())->getLangType();
|
LangType lang = (_pEditView->getCurrentBuffer())->getLangType();
|
||||||
|
|
||||||
if (lang != L_XML && lang != L_HTML && lang != L_PHP && lang != L_ASP)
|
if (lang != L_XML && lang != L_HTML && lang != L_PHP && lang != L_ASP)
|
||||||
return;
|
return pair<int, int>(-1, -1);
|
||||||
|
|
||||||
// Get the original targets and search options to restore after tag matching operation
|
// Get the original targets and search options to restore after tag matching operation
|
||||||
int originalStartPos = _pEditView->execute(SCI_GETTARGETSTART);
|
int originalStartPos = _pEditView->execute(SCI_GETTARGETSTART);
|
||||||
@ -490,4 +490,6 @@ void XmlMatchedTagsHighlighter::tagMatch(bool doHiliteAttr)
|
|||||||
_pEditView->execute(SCI_SETTARGETSTART, originalStartPos);
|
_pEditView->execute(SCI_SETTARGETSTART, originalStartPos);
|
||||||
_pEditView->execute(SCI_SETTARGETEND, originalEndPos);
|
_pEditView->execute(SCI_SETTARGETEND, originalEndPos);
|
||||||
_pEditView->execute(SCI_SETSEARCHFLAGS, originalSearchFlags);
|
_pEditView->execute(SCI_SETSEARCHFLAGS, originalSearchFlags);
|
||||||
|
|
||||||
|
return pair<int, int>(xmlTags.tagOpenStart, xmlTags.tagCloseStart);
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ enum TagCateg {tagOpen, tagClose, inSingleTag, outOfTag, invalidTag, unknownPb};
|
|||||||
class XmlMatchedTagsHighlighter {
|
class XmlMatchedTagsHighlighter {
|
||||||
public:
|
public:
|
||||||
XmlMatchedTagsHighlighter(ScintillaEditView *pEditView):_pEditView(pEditView){};
|
XmlMatchedTagsHighlighter(ScintillaEditView *pEditView):_pEditView(pEditView){};
|
||||||
void tagMatch(bool doHiliteAttr);
|
pair<int, int> tagMatch(bool doHiliteAttr);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct XmlMatchedTagsPos {
|
struct XmlMatchedTagsPos {
|
||||||
|
Loading…
Reference in New Issue
Block a user