summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGergo Mocsi <gmocsi91@gmail.com>2013-08-19 13:53:38 +0200
committerGergo Mocsi <gmocsi91@gmail.com>2013-09-02 18:17:00 +0200
commit67596f4cc67cab14ccd3005be1f1c7c9ef6df557 (patch)
treed67f9e863da8157db459eed7443d7749d0d9390a
parent2f3f5dced8aa9b8010a33176bc941d5879986bfb (diff)
GSOC work, autocorrect procedures+variables
Fixed some small issue with the right arrow key in the ListBox. Autocorrection now correct all variable types and procedure names. Change-Id: Iff1abaf10c621aef04772837faa272bb6f987e37
-rw-r--r--basctl/source/basicide/baside2b.cxx29
-rw-r--r--basic/source/classes/codecompletecache.cxx6
-rw-r--r--basic/source/classes/sbxmod.cxx29
-rw-r--r--include/basic/codecompletecache.hxx2
4 files changed, 33 insertions, 33 deletions
diff --git a/basctl/source/basicide/baside2b.cxx b/basctl/source/basicide/baside2b.cxx
index 78a77dc949d1..f25a41fbca44 100644
--- a/basctl/source/basicide/baside2b.cxx
+++ b/basctl/source/basicide/baside2b.cxx
@@ -590,11 +590,12 @@ void EditorWindow::HandleAutoCorrect()
if( CodeCompleteOptions::IsExtendedTypeDeclaration() )
{
rModulWindow.UpdateModule();
- rModulWindow.GetSbModule()->GetCodeCompleteDataFromParse(aCodeCompleteCache);
+ rModulWindow.GetSbModule()->GetCodeCompleteDataFromParse( aCodeCompleteCache );
}
TextSelection aSel = GetEditView()->GetSelection();
sal_uLong nLine = aSel.GetStart().GetPara();
OUString aLine( pEditEngine->GetText( nLine ) ); // the line being modified
+ const OUString& sActSubName = GetActualSubName( nLine ); // the actual procedure
HighlightPortions aPortions;
aHighlighter.getHighlightPortions( nLine, aLine, aPortions );
@@ -625,14 +626,30 @@ void EditorWindow::HandleAutoCorrect()
}
if( r.tokenType == TT_IDENTIFIER )
{// correct uno types
- OUString sStr = aLine.copy(r.nBegin, r.nEnd - r.nBegin);
- if( sStr != aCodeCompleteCache.GetCorrectCaseVarName(sStr) )
+ const OUString& sVarName = aLine.copy(r.nBegin, r.nEnd - r.nBegin);
+ if( !aCodeCompleteCache.GetCorrectCaseVarName( sVarName, sActSubName ).isEmpty() )
{
- sStr = aCodeCompleteCache.GetCorrectCaseVarName(sStr);
+ const OUString& sStr = aCodeCompleteCache.GetCorrectCaseVarName( sVarName, sActSubName );
TextPaM aStart(nLine, aSel.GetStart().GetIndex() - sStr.getLength() );
TextSelection sTextSelection(aStart, TextPaM(nLine, aSel.GetStart().GetIndex()));
pEditEngine->ReplaceText( sTextSelection, sStr );
pEditView->SetSelection( aSel );
+ return;
+ }
+
+ //autocorrect procedures
+ SbxArray* pArr = rModulWindow.GetSbModule()->GetMethods();
+ for( sal_uInt32 i=0; i< pArr->Count32(); ++i )
+ {
+ if( pArr->Get32(i)->GetName().equalsIgnoreAsciiCase( sVarName ) )
+ {
+ const OUString& sStr = pArr->Get32(i)->GetName();
+ TextPaM aStart(nLine, aSel.GetStart().GetIndex() - sStr.getLength() );
+ TextSelection sTextSelection(aStart, TextPaM(nLine, aSel.GetStart().GetIndex()));
+ pEditEngine->ReplaceText( sTextSelection, sStr );
+ pEditView->SetSelection( aSel );
+ return;
+ }
}
}
}
@@ -786,7 +803,7 @@ void EditorWindow::HandleCodeCompletition()
TextPaM aStart(nLine, aLine.indexOf(sBaseName) );
TextPaM aEnd(nLine, aLine.indexOf(sBaseName) + sBaseName.getLength() );
TextSelection sTextSelection(aStart, aEnd);
- pEditEngine->ReplaceText( sTextSelection, aCodeCompleteCache.GetCorrectCaseVarName(sBaseName) );
+ pEditEngine->ReplaceText( sTextSelection, aCodeCompleteCache.GetCorrectCaseVarName(sBaseName, GetActualSubName(nLine)) );
pEditView->SetSelection( aSel );
}
@@ -2638,7 +2655,7 @@ void CodeCompleteListBox::KeyInput( const KeyEvent& rKeyEvt )
case KEY_RIGHT:
{
TextSelection aTextSelection( GetParentEditView()->GetSelection() );
- if( aTextSelection.GetEnd().GetPara() != pCodeCompleteWindow->GetTextSelection().GetEnd().GetPara() )
+ if( aTextSelection.GetEnd().GetPara() != pCodeCompleteWindow->GetTextSelection().GetEnd().GetPara()-1 )
{
HideAndRestoreFocus();
}
diff --git a/basic/source/classes/codecompletecache.cxx b/basic/source/classes/codecompletecache.cxx
index 9d78455cf2b9..a5b9ce6a8601 100644
--- a/basic/source/classes/codecompletecache.cxx
+++ b/basic/source/classes/codecompletecache.cxx
@@ -182,20 +182,20 @@ OUString CodeCompleteDataCache::GetVarType( const OUString& sVarName ) const
return OUString(""); //not found
}
-OUString CodeCompleteDataCache::GetCorrectCaseVarName( const OUString& sVarName ) const
+OUString CodeCompleteDataCache::GetCorrectCaseVarName( const OUString& sVarName, const OUString& sActProcName ) const
{
for( CodeCompleteVarScopes::const_iterator aIt = aVarScopes.begin(); aIt != aVarScopes.end(); ++aIt )
{
CodeCompleteVarTypes aTypes = aIt->second;
for( CodeCompleteVarTypes::const_iterator aOtherIt = aTypes.begin(); aOtherIt != aTypes.end(); ++aOtherIt )
{
- if( aOtherIt->first.equalsIgnoreAsciiCase( sVarName ) )
+ if( aOtherIt->first.equalsIgnoreAsciiCase( sVarName ) && aIt->first.equalsIgnoreAsciiCase( sActProcName ) )
{
return aOtherIt->first;
}
}
}
- //not a local, search global scope
+ // search global scope
for( CodeCompleteVarTypes::const_iterator aIt = aGlobalVars.begin(); aIt != aGlobalVars.end(); ++aIt )
{
if( aIt->first.equalsIgnoreAsciiCase( sVarName ) )
diff --git a/basic/source/classes/sbxmod.cxx b/basic/source/classes/sbxmod.cxx
index a3fa77931e1c..567d26fa0993 100644
--- a/basic/source/classes/sbxmod.cxx
+++ b/basic/source/classes/sbxmod.cxx
@@ -1790,40 +1790,23 @@ void SbModule::GetCodeCompleteDataFromParse(CodeCompleteDataCache& aCache)
while( pParser->Parse() ) {}
SbiSymPool* pPool = pParser->pPool;
- //CodeCompleteVarTypes aGlobVarTypes;
aCache.Clear();
for( sal_uInt16 i = 0; i < pPool->GetSize(); ++i )
{
SbiSymDef* pSymDef = pPool->Get(i);
- //std::cerr << "i: " << i << ", type: " << pSymDef->GetType() << std::endl;
- if( pSymDef->GetType() == SbxOBJECT )
- {
- if( !pParser->aGblStrings.Find( pSymDef->GetTypeId() ).isEmpty() )
- {
- //aGlobVarTypes.insert( CodeCompleteVarTypes::value_type( pSymDef->GetName(), pParser->aGblStrings.Find( pSymDef->GetTypeId() ) ) );
- aCache.InsertGlobalVar( pSymDef->GetName(), pParser->aGblStrings.Find(pSymDef->GetTypeId()) );
- }
- }
+ //std::cerr << "i: " << i << ", type: " << pSymDef->GetType() << "; name:" << pSymDef->GetName() << std::endl;
+ if( (pSymDef->GetType() != SbxEMPTY) || (pSymDef->GetType() != SbxNULL) )
+ aCache.InsertGlobalVar( pSymDef->GetName(), pParser->aGblStrings.Find(pSymDef->GetTypeId()) );
SbiSymPool& pChildPool = pSymDef->GetPool();
- //CodeCompleteVarTypes aLocVarTypes;
for(sal_uInt16 j = 0; j < pChildPool.GetSize(); ++j )
{
SbiSymDef* pChildSymDef = pChildPool.Get(j);
- //std::cerr << "j: " << j << ", type: " << pChildSymDef->GetType() << std::endl;
- if( pChildSymDef->GetType() == SbxOBJECT )
- {
- if( !pParser->aGblStrings.Find( pChildSymDef->GetTypeId() ).isEmpty() )
- {
- //aLocVarTypes.insert( CodeCompleteVarTypes::value_type( pChildSymDef->GetName(), pParser->aGblStrings.Find( pChildSymDef->GetTypeId() ) ) );
- aCache.InsertLocalVar( pSymDef->GetName(), pChildSymDef->GetName(), pParser->aGblStrings.Find(pChildSymDef->GetTypeId()) );
- }
- }
+ //std::cerr << "j: " << j << ", type: " << pChildSymDef->GetType() << "; name:" << pChildSymDef->GetName() << std::endl;
+ if( (pChildSymDef->GetType() != SbxEMPTY) || (pChildSymDef->GetType() != SbxNULL) )
+ aCache.InsertLocalVar( pSymDef->GetName(), pChildSymDef->GetName(), pParser->aGblStrings.Find(pChildSymDef->GetTypeId()) );
}
- //aCache.InsertProcedure( pSymDef->GetName(), aLocVarTypes );
}
- //aCache.InsertProcedure( CodeCompleteDataCache::GLOB_KEY, aGlobVarTypes );
-
delete pParser;
}
diff --git a/include/basic/codecompletecache.hxx b/include/basic/codecompletecache.hxx
index d455fa75ec52..e85b0d8b599c 100644
--- a/include/basic/codecompletecache.hxx
+++ b/include/basic/codecompletecache.hxx
@@ -93,7 +93,7 @@ public:
void InsertGlobalVar( const OUString& sVarName, const OUString& sVarType );
void InsertLocalVar( const OUString& sProcName, const OUString& sVarName, const OUString& sVarType );
OUString GetVarType( const OUString& sVarName ) const;
- OUString GetCorrectCaseVarName( const OUString& sVarName ) const;
+ OUString GetCorrectCaseVarName( const OUString& sVarName, const OUString& sActProcName ) const;
void print() const; // wrapper for operator<<, prints to std::cerr
void Clear();
};