示例#1
0
void AbbreviationPlugin::InitDefaults()
{
    // check to see if there are any abbreviations configured
    AbbreviationJSONEntry jsonData;
    if ( !m_config.ReadItem(&jsonData) ) {
        // merge the data from the old configuration
        AbbreviationEntry data;
        m_mgr->GetConfigTool()->ReadObject(wxT("AbbreviationsData"), &data);
    
        jsonData.SetAutoInsert( data.GetAutoInsert() );
        jsonData.SetEntries( data.GetEntries() );
        m_config.WriteItem( &jsonData );
    }

    // search for the old item
    if (jsonData.GetEntries().empty()) {
        // fill some default abbreviations
        JSONElement::wxStringMap_t entries;
        entries[wxT("main")] = wxT("int main(int argc, char **argv) {\n    |\n}\n");
        entries[wxT("while")] = wxT("while ( | ) {\n    \n}\n");
        entries[wxT("dowhile")] = wxT("do {\n    \n} while ( | );\n");
        entries[wxT("for_size")] = wxT("for ( size_t i=0; i<|; ++i ) {    \n}\n");
        entries[wxT("for_int")] = wxT("for ( int i=0; i<|; ++i ) {    \n}\n");
        jsonData.SetEntries(entries);
        m_config.WriteItem( &jsonData );
    }
}
示例#2
0
void AbbreviationPlugin::OnAbbreviations(wxCommandEvent& e)
{
    IEditor *editor = m_mgr->GetActiveEditor();
    if (!editor) {
        return;
    }

    AbbreviationJSONEntry jsonData;
    if ( !m_config.ReadItem( &jsonData ) ) {
        // merge the data from the old configuration
        AbbreviationEntry data;
        m_mgr->GetConfigTool()->ReadObject(wxT("AbbreviationsData"), &data);
    
        jsonData.SetAutoInsert( data.GetAutoInsert() );
        jsonData.SetEntries( data.GetEntries() );
        m_config.WriteItem( &jsonData );
    }
    
    wxString wordAtCaret = editor->GetWordAtCaret();
    
    bool autoInsert = (jsonData.IsAutoInsert() && wordAtCaret.IsEmpty() == false);
    if  ( autoInsert ){
        autoInsert = InsertExpansion(wordAtCaret);
    }
    
    if ( !autoInsert ) {
        static wxBitmap bmp = LoadBitmapFile(wxT("abbrev.png")) ;
        if (bmp.IsOk()) {
            editor->RegisterImageForKind(wxT("Abbreviation"), bmp);
            std::vector<TagEntryPtr> tags;

            // search for the old item
            const JSONElement::wxStringMap_t& entries = jsonData.GetEntries();
            JSONElement::wxStringMap_t::const_iterator iter = entries.begin();
            for (; iter != entries.end(); ++iter) {
                TagEntryPtr t(new TagEntry());
                t->SetName(iter->first);
                t->SetKind(wxT("Abbreviation"));
                tags.push_back(t);
            }
            editor->ShowCompletionBox(tags, editor->GetWordAtCaret(), false, this);
        }
    }
}
示例#3
0
bool
AbbreviationTable::GetAbbreviationEntry(uint32 code, AbbreviationEntry& entry)
{
	AbbreviationTableEntry* tableEntry = fEntryTable.Lookup(code);
	if (tableEntry == NULL)
		return false;

	entry.SetTo(code, fData + tableEntry->offset, tableEntry->size);
	return true;
}
示例#4
0
void AbbreviationPlugin::OnAbbreviations(wxCommandEvent& e)
{
    IEditor* editor = m_mgr->GetActiveEditor();
    if(!editor) {
        return;
    }

    AbbreviationJSONEntry jsonData;
    if(!m_config.ReadItem(&jsonData)) {
        // merge the data from the old configuration
        AbbreviationEntry data;
        m_mgr->GetConfigTool()->ReadObject(wxT("AbbreviationsData"), &data);

        jsonData.SetAutoInsert(data.GetAutoInsert());
        jsonData.SetEntries(data.GetEntries());
        m_config.WriteItem(&jsonData);
    }

    wxString wordAtCaret = editor->GetWordAtCaret();

    bool autoInsert = (jsonData.IsAutoInsert() && wordAtCaret.IsEmpty() == false);
    if(autoInsert) {
        autoInsert = InsertExpansion(wordAtCaret);
    }

    if(!autoInsert) {
        static wxBitmap bmp = LoadBitmapFile(wxT("abbrev.png"));
        if(bmp.IsOk()) {
            wxCodeCompletionBoxEntry::Vec_t ccEntries;
            wxCodeCompletionBox::BmpVec_t bitmaps;
            bitmaps.push_back(bmp);

            // search for the old item
            const JSONElement::wxStringMap_t& entries = jsonData.GetEntries();
            JSONElement::wxStringMap_t::const_iterator iter = entries.begin();
            for(; iter != entries.end(); ++iter) {
                ccEntries.push_back(wxCodeCompletionBoxEntry::New(iter->first, 0));
            }
            wxCodeCompletionBoxManager::Get().ShowCompletionBox(
                editor->GetCtrl(), ccEntries, bitmaps, wxCodeCompletionBox::kNone, wxNOT_FOUND, this);
        }
    }
}
AbbreviationsSettingsDlg::AbbreviationsSettingsDlg( wxWindow* parent, IManager *mgr )
    : AbbreviationsSettingsBase( parent )
    , m_mgr(mgr)
    , m_data()
    , m_dirty(false)
    , m_currSelection(wxNOT_FOUND)
    , m_config("abbreviations.conf")
{
    WindowAttrManager::Load(this, wxT("AbbreviationsSettingsDlg"), m_mgr->GetConfigTool());
    if ( !m_config.ReadItem(&m_data) ) {
        // merge the data from the old configuration
        AbbreviationEntry data;
        m_mgr->GetConfigTool()->ReadObject(wxT("AbbreviationsData"), &data);

        m_data.SetAutoInsert( data.GetAutoInsert() );
        m_data.SetEntries( data.GetEntries() );
        m_config.WriteItem( &m_data );
    }
    DoPopulateItems();
}
示例#6
0
bool AbbreviationPlugin::InsertExpansion(const wxString& abbreviation)
{
    // get the active editor
    IEditor *editor = m_mgr->GetActiveEditor();

    if (!editor || !abbreviation)
        return false;

    // hide the completion box
    if (editor->IsCompletionBoxShown()) {
        editor->HideCompletionBox();
    }

    // search for abbreviation that matches str
    // prepate list of abbreviations
    AbbreviationJSONEntry jsonData;
    if ( !m_config.ReadItem(&jsonData) ) {
        // merge the data from the old configuration
        AbbreviationEntry data;
        m_mgr->GetConfigTool()->ReadObject(wxT("AbbreviationsData"), &data);
    
        jsonData.SetAutoInsert( data.GetAutoInsert() );
        jsonData.SetEntries( data.GetEntries() );
        m_config.WriteItem( &jsonData );
    }

    // search for the old item
    const JSONElement::wxStringMap_t& entries = jsonData.GetEntries();
    JSONElement::wxStringMap_t::const_iterator iter = entries.find(abbreviation);

    if (iter != entries.end()) {

        wxString text = iter->second;
        int selStart = editor->WordStartPos(editor->GetCurrentPosition(), true);
        int selEnd   = editor->WordEndPos(editor->GetCurrentPosition(), true);
        int curPos   = editor->GetCurrentPosition();
        int typedWordLen = curPos - selStart;    

        if (typedWordLen < 0) {
            typedWordLen = 0;
        }

        // format the text to insert
        bool appendEol(false);
        if (text.EndsWith(wxT("\r")) || text.EndsWith(wxT("\n"))) {
            appendEol = true;
        }            

        text = editor->FormatTextKeepIndent(text, selStart, Format_Text_Save_Empty_Lines);    

        // remove the first line indenation that might have been placed by CL
        text.Trim(false).Trim();

        if (appendEol) {
            wxString eol;
            switch (editor->GetEOL()) {
            case 1:
                eol = wxT("\r");
                break;
            case 0:
                eol = wxT("\r\n");
                break;
            case 2:
                eol = wxT("\n");
                break;
            }
            text << eol;
        }

        //--------------------------------------------
        // replace any place holders
        //--------------------------------------------
        wxString project;
        text = MacroManager::Instance()->Expand(text, m_mgr, editor->GetProjectName());
        
        // locate the caret
        int where = text.Find(wxT("|"));
        if (where == wxNOT_FOUND) {
            where = text.length();
        }

        // remove the pipe (|) character
        text.Replace(wxT("|"), wxT(""));

        if (selEnd - selStart >= 0) {
            editor->SelectText(selStart, selEnd - selStart);
            editor->ReplaceSelection(text);
            editor->SetCaretAt(curPos + where - typedWordLen);
        }
        return true;
    } else
        return false;
}