internal static string GetCurrentFileText(int length = -1) { if (length == -1) length = Win32.SendMessage(PluginBase.GetCurrentScintilla(), SciMsg.SCI_GETLENGTH, 0, 0).ToInt32(); Sci_TextRange range = new Sci_TextRange(0, -1, length); Win32.SendMessage(PluginBase.GetCurrentScintilla(), SciMsg.SCI_GETTEXTRANGE, 0, range.NativePointer); return range.lpstrTextUtf8; }
internal static void doInsertHtmlCloseTag(char newChar) { LangType docType = LangType.L_TEXT; Win32.SendMessage(nppData._nppHandle, NppMsg.NPPM_GETCURRENTLANGTYPE, 0, ref docType); bool isDocTypeHTML = (docType == LangType.L_HTML || docType == LangType.L_XML || docType == LangType.L_PHP); if (doCloseTag && isDocTypeHTML) { if (newChar == '>') { int bufCapacity = 512; IntPtr hCurrentEditView = GetCurrentScintilla(); int currentPos = (int)Win32.SendMessage(hCurrentEditView, SciMsg.SCI_GETCURRENTPOS, 0, 0); int beginPos = currentPos - (bufCapacity - 1); int startPos = (beginPos > 0) ? beginPos : 0; int size = currentPos - startPos; if (size >= 3) { using (Sci_TextRange tr = new Sci_TextRange(startPos, currentPos, bufCapacity)) { Win32.SendMessage(hCurrentEditView, SciMsg.SCI_GETTEXTRANGE, 0, tr.NativePointer); string buf = tr.lpstrText; if (buf[size - 2] != '/') { StringBuilder insertString = new StringBuilder("</"); int pCur = size - 2; for (; (pCur > 0) && (buf[pCur] != '<') && (buf[pCur] != '>'); ) pCur--; if (buf[pCur] == '<') { pCur++; Regex regex = new Regex(@"[\._\-:\w]"); while (regex.IsMatch(buf[pCur].ToString())) { insertString.Append(buf[pCur]); pCur++; } insertString.Append('>'); if (insertString.Length > 3) { Win32.SendMessage(hCurrentEditView, SciMsg.SCI_BEGINUNDOACTION, 0, 0); Win32.SendMessage(hCurrentEditView, SciMsg.SCI_REPLACESEL, 0, insertString); Win32.SendMessage(hCurrentEditView, SciMsg.SCI_SETSEL, currentPos, currentPos); Win32.SendMessage(hCurrentEditView, SciMsg.SCI_ENDUNDOACTION, 0, 0); } } } } } } } }