From: Leon W. <moo...@us...> - 2005-11-01 19:39:56
|
Update of /cvsroot/anyedit/AnyEditv2 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9754 Modified Files: ConfigFile.cpp ConfigFile.h FileTypeManager.cpp ScintillaEx.cpp ScintillaEx.h Log Message: Added Smart Tag feature. This feature automatically adds a closing tag for html/xml tags. It also takes in account the indentation of the tags. Index: FileTypeManager.cpp =================================================================== RCS file: /cvsroot/anyedit/AnyEditv2/FileTypeManager.cpp,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -d -r1.30 -r1.31 *** FileTypeManager.cpp 16 Oct 2005 12:13:31 -0000 1.30 --- FileTypeManager.cpp 1 Nov 2005 19:39:46 -0000 1.31 *************** *** 488,491 **** --- 488,492 ---- pScintilla->SetSmartInsert(pConfigFile->GetSmartInsert()); pScintilla->SetSmartTab(pConfigFile->GetSmartTab()); + pScintilla->SetSmartTag(pConfigFile->GetSmartTag()); // Ok now restyle the document. Index: ScintillaEx.cpp =================================================================== RCS file: /cvsroot/anyedit/AnyEditv2/ScintillaEx.cpp,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -d -r1.29 -r1.30 *** ScintillaEx.cpp 18 Oct 2005 17:46:31 -0000 1.29 --- ScintillaEx.cpp 1 Nov 2005 19:39:46 -0000 1.30 *************** *** 69,72 **** --- 69,73 ---- m_bSmartInsert = false; m_bSmartTab = false; + m_bSmartTag = false; } *************** *** 300,303 **** --- 301,308 ---- } } + if( m_bSmartTag && scn->ch == '>' ) + { + SmartTag(); + } CharacterRange crange = GetSelection(); int selStart = crange.cpMin; *************** *** 1167,1173 **** if( GetEOLMode() == SC_EOL_CRLF ) --pos; ! // Do we have a '{', ')' or ':' ! if( GetCharAt( pos ) == '{' || GetCharAt( pos ) == ')' || GetCharAt( pos ) == ':' ) { // Add an extra indent to the current line. if(GetIndent() == 0) --- 1172,1192 ---- if( GetEOLMode() == SC_EOL_CRLF ) --pos; ! // Do we have a '{', ')', ':' or '>' ! if( GetCharAt( pos ) == '{' || ! GetCharAt( pos ) == ')' || ! GetCharAt( pos ) == ':' || ! ( GetCharAt( pos - 1 ) != '/' && GetCharAt( pos ) == '>' ) ) { + int count = 1; + while( ( GetCharAt( pos + count ) == '\r' || + GetCharAt( pos + count ) == '\n' ) && + count <= 2 ) ++ count; + // Add an extra EOL if we have a cl + if( GetCharAt( pos + count ) == '}' || + ( GetCharAt( pos + count ) == '<' && GetCharAt( pos + count + 1 ) == '/' ) ) + { + InsertEOL(pos + count); + SetLineIndentationEx(GetCurLineNumber()+1, iIndentation); + } // Add an extra indent to the current line. if(GetIndent() == 0) *************** *** 1241,1244 **** --- 1260,1310 ---- } + // Automatically insert closing tag for html/xml tags. + void CScintillaEx::SmartTag() + { + long lCurrentPos = GetCurrentPos(); + + // If it was an empty tag we don't have a closing tag. + if( '/' != GetCharAt( lCurrentPos - 2 ) ) + { + long lPos = lCurrentPos - 1; + while( lPos >= 0 ) + { + if( '<' == GetCharAt( lPos ) ) + { + // If this is a closing tag or xml declaration skip this action. + if( '/' == GetCharAt( lPos + 1 ) || '?' == GetCharAt( lPos + 1 ) ) break; + + if( lCurrentPos - lPos < 1024 ) + { + SetSel(lPos,lCurrentPos); + CString text = GetSelText(); + int pos = text.Find(' '); + if( -1 == pos ) + { + text.Insert(1,'/'); + } + else + { + text = text.Left(pos); + text.Insert(1,'/'); + text += ">"; + } + BeginUndoAction(); + SetSel(lCurrentPos,lCurrentPos); + AddText(text.GetLength(), text); + SetSel(lCurrentPos,lCurrentPos); + EndUndoAction(); + break; + } + } + else + { + -- lPos; + } + } + } + } + /// Convert begin and end of target to a selection. void CScintillaEx::SelectionFromTarget() *************** *** 2832,2833 **** --- 2898,2908 ---- } + bool CScintillaEx::GetSmartTag() + { + return m_bSmartTag; + } + + void CScintillaEx::SetSmartTag( bool bSmartTag ) + { + m_bSmartTag = bSmartTag; + } Index: ScintillaEx.h =================================================================== RCS file: /cvsroot/anyedit/AnyEditv2/ScintillaEx.h,v retrieving revision 1.20 retrieving revision 1.21 diff -C2 -d -r1.20 -r1.21 *** ScintillaEx.h 17 Oct 2005 17:36:45 -0000 1.20 --- ScintillaEx.h 1 Nov 2005 19:39:46 -0000 1.21 *************** *** 171,174 **** --- 171,175 ---- bool m_bSmartTab; bool m_bSmartInsert; + bool m_bSmartTag; void EliminateDuplicateWords(const char *words); bool m_bAutoCompleteIgnoreCase; *************** *** 214,217 **** --- 215,221 ---- /// Bookmark reference counter int m_iBookmarkCount; + + /// Insert the end tag for html/xml tags. + void SmartTag(); public: CString SelectionURL(int pos); *************** *** 258,261 **** --- 262,268 ---- void EnsureFinalNewLine(); CString SelectionFilename(void); + + bool GetSmartTag(); + void SetSmartTag( bool bSmartTag ); }; Index: ConfigFile.h =================================================================== RCS file: /cvsroot/anyedit/AnyEditv2/ConfigFile.h,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** ConfigFile.h 16 Oct 2005 12:04:32 -0000 1.24 --- ConfigFile.h 1 Nov 2005 19:39:46 -0000 1.25 *************** *** 90,93 **** --- 90,94 ---- #define TAG_EDITOR_SMARTINSERT "SmartInsert" #define TAG_EDITOR_SMARTTAB "SmartTab" + #define TAG_EDITOR_SMARTTAG "SmartTag" // Editor attributes *************** *** 514,517 **** --- 515,524 ---- /// Set smart insert of ([{"' bool SetSmartInsert(bool bSmartInsert); + + /// Get smart tag inserting end tags + bool GetSmartTag(); + + /// Set smart tag inserting end tags + bool SetSmartTag( bool bSmartTag ); }; Index: ConfigFile.cpp =================================================================== RCS file: /cvsroot/anyedit/AnyEditv2/ConfigFile.cpp,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -d -r1.25 -r1.26 *** ConfigFile.cpp 16 Oct 2005 12:04:32 -0000 1.25 --- ConfigFile.cpp 1 Nov 2005 19:39:46 -0000 1.26 *************** *** 1209,1210 **** --- 1209,1222 ---- return SetBoolToXMLFile( TAG_EDITOR, TAG_EDITOR_SMARTTAB, bSmartTab ); } + + // Get smart tag inserting end tags + bool CConfigFile::GetSmartTag() + { + return GetBoolFromXMLFile( TAG_EDITOR, TAG_EDITOR_SMARTTAG ); + } + + // Set smart tag inserting end tags + bool CConfigFile::SetSmartTag( bool bSmartTag ) + { + return SetBoolToXMLFile( TAG_EDITOR, TAG_EDITOR_SMARTTAG, bSmartTag ); + } |