mirror of
https://github.com/notepad-plus-plus/notepad-plus-plus.git
synced 2025-07-29 00:34:24 +02:00
Prevent HTML tags with no closing tags from being autocompleted.
Closes #1068
This commit is contained in:
parent
624e5fa1ae
commit
74a0c8c398
@ -364,11 +364,12 @@ bool AutoCompletion::showFunctionComplete()
|
||||
return false;
|
||||
}
|
||||
|
||||
void AutoCompletion::getCloseTag(char *closeTag, size_t closeTagSize, size_t caretPos)
|
||||
void AutoCompletion::getCloseTag(char *closeTag, size_t closeTagSize, size_t caretPos, bool isHTML)
|
||||
{
|
||||
int flags = SCFIND_REGEXP | SCFIND_POSIX;
|
||||
_pEditView->execute(SCI_SETSEARCHFLAGS, flags);
|
||||
TCHAR tag2find[] = TEXT("<[^\\s>]*");
|
||||
|
||||
int targetStart = _pEditView->searchInTarget(tag2find, lstrlen(tag2find), caretPos, 0);
|
||||
|
||||
if (targetStart == -1 || targetStart == -2)
|
||||
@ -382,8 +383,8 @@ void AutoCompletion::getCloseTag(char *closeTag, size_t closeTagSize, size_t car
|
||||
if (size_t(foundTextLen) > closeTagSize - 2) // buffer size is not large enough. -2 for '/' & '\0'
|
||||
return;
|
||||
|
||||
char tagHead[5];
|
||||
_pEditView->getText(tagHead, targetStart, targetStart+4);
|
||||
char tagHead[10];
|
||||
_pEditView->getText(tagHead, targetStart, targetStart+9);
|
||||
|
||||
if (tagHead[1] == '/') // "</toto>" will be ignored
|
||||
return;
|
||||
@ -391,6 +392,16 @@ void AutoCompletion::getCloseTag(char *closeTag, size_t closeTagSize, size_t car
|
||||
if (strncmp(tagHead, "<!--", 4) == 0) // Comments will be ignored
|
||||
return;
|
||||
|
||||
if (isHTML) // for HTML: "br", "hr", "img", "link" and "meta" will be ignored
|
||||
{
|
||||
char *disallowed_tags[] = { "br", "hr", "img", "link", "meta" };
|
||||
for (int i = 0; i < 5; ++i)
|
||||
{
|
||||
if (strnicmp(tagHead + 1, disallowed_tags[i], strlen(disallowed_tags[i])) == 0)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
char tagTail[2];
|
||||
_pEditView->getText(tagTail, caretPos-2, caretPos-1);
|
||||
|
||||
@ -615,7 +626,7 @@ void AutoCompletion::insertMatchedChars(int character, const MatchedPairConf & m
|
||||
{
|
||||
if (matchedPairConf._doHtmlXmlTag && (_curLang == L_HTML || _curLang == L_XML))
|
||||
{
|
||||
getCloseTag(closeTag, closeTagLen, caretPos);
|
||||
getCloseTag(closeTag, closeTagLen, caretPos, _curLang == L_HTML);
|
||||
if (closeTag[0] != '\0')
|
||||
matchedChars = closeTag;
|
||||
}
|
||||
|
@ -90,7 +90,7 @@ public:
|
||||
void insertMatchedChars(int character, const MatchedPairConf & matchedPairConf);
|
||||
void update(int character);
|
||||
void callTipClick(int direction);
|
||||
void getCloseTag(char *closeTag, size_t closeTagLen, size_t caretPos);
|
||||
void getCloseTag(char *closeTag, size_t closeTagLen, size_t caretPos, bool isHTML);
|
||||
|
||||
private:
|
||||
bool _funcCompletionActive;
|
||||
|
Loading…
x
Reference in New Issue
Block a user