I found that turning off all modification notifications when I load a doc and also when I have to colourise the whole thing makes a *massive* increase in speed. As well as turning off folding support.
Use SCI_SETMODEVENTMASK( 0 ) then put it back if you want it. Regards Dan Petitt coderanger.com -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Joerg Schneider Sent: 05 February 2007 09:36 To: [email protected] Subject: [scintilla] Lexer called on complete document rather than displayedpart Hi, when I integrated Scintilla in CrypTool (http://www.cryptool.org/), I noticed that the *complete document* gets lexed initially, which can cause a delay for large documents (actually the lexer gets called twice, once with the first few 100 bytes, then again with the rest of the document; later, when the document is changed, the lexer is called only for the displayed part of the document). This is not what I expected from the documentation, which states that lexers need not be coded effiently, because only the displayed portion of a document gets lexed at a time. Is this normal or did I make a mistake with the Scintilla integration? Here is the code, which activates/deactivates the lexer: void CScintillaWnd::SetShowAlphabet(BOOL show) { // we do not check if show == m_bShowAlphabet, because this method is // also used to refresh the alphabet after changes to the text options if (show) { SendMessage(SCI_STYLESETFORE, atoi(STYLE_NONEALPHABET), RGB(192,192,192)); SendMessage(SCI_SETPROPERTY, (WPARAM)_T("cryptool.nonalphabetstyle"), (LPARAM)STYLE_NONEALPHABET); SendMessage(SCI_SETPROPERTY, (WPARAM)_T("cryptool.alphabet"), (LPARAM)(LPCTSTR)theApp.TextOptions.m_alphabet); SendMessage(SCI_SETSTYLEBITS, 5, 0); SendMessage(SCI_SETLEXERLANGUAGE,0,(LPARAM)CT_LEXER_LANGUAGE ); if (SCLEX_NULL == SendMessage(SCI_GETLEXER)) { SendMessage(SCI_LOADLEXERLIBRARY,0,(LPARAM)CT_LEXER_LIB); SendMessage(SCI_SETLEXERLANGUAGE,0,(LPARAM)CT_LEXER_LANGUAGE ); if (SCLEX_NULL == SendMessage(SCI_GETLEXER)) { show = false; CString msg; msg.Format(IDS_SCINTILLA_LEXER_LOAD_ERROR,CT_LEXER_LIB); MessageBox(msg); } } SendMessage(SCI_CLEARDOCUMENTSTYLE, 0, 0); SendMessage(SCI_COLOURISE,0,(LPARAM)1); // trigger re-lexing // without this lexing is done only on the first update } else { SendMessage(SCI_SETLEXER, SCLEX_NULL); SendMessage(SCI_CLEARDOCUMENTSTYLE, 0, 0); } m_bShowAlphabet = show; } Cheers, Jörg _______________________________________________ Scintilla-interest mailing list [email protected] http://mailman.lyra.org/mailman/listinfo/scintilla-interest _______________________________________________ Scintilla-interest mailing list [email protected] http://mailman.lyra.org/mailman/listinfo/scintilla-interest
