QScintilla: рдЕрдкрдирд╛ рд▓реАрдХрд░ рд▓рд┐рдЦрдирд╛

рд╣рд╛рдп, рд╣реЗрдмреНрд░!

рдпреВрдкреАрдбреА : рдЪрдХреНрд░ рдХрд╛ рддреАрд╕рд░рд╛ рднрд╛рдЧред

рдпрд╣ QScintilla рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рджреВрд╕рд░рд╛ рд▓реЗрдЦ рд╣реИред рдкрд╣рд▓реЗ рд╡рд╛рд▓рд╛ рдпрд╣рд╛рдБ рд╣реИ ред рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЙрди рд╕рднреА рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдореБрдЭреЗ рдХрд░реНрдордпреЛрдЧ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рд╛! рдЕрдм рдЖрдк рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЬ рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ? рд╣рдо рдЕрд╕реЗрдВрдмрд▓рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦреЗрдВрдЧреЗ! "рдмреЙрдХреНрд╕ рдореЗрдВ" рдпрд╣ рдирд╣реАрдВ рд╣реИ - рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛, рдЕрдкрдиреЗ рдЖрдк рдХреЛ рд▓рд┐рдЦреЗрдВ! рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛рдлреА рд▓рдВрдмреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдереЛрдбрд╝рд╛ рдХрдо рд▓рд┐рдЦреВрдВрдЧрд╛ рдФрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░реВрдВрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рдЕрд╕реЗрдВрдмрд▓реА рд▓реИрдВрдЧреНрд╡реЗрдЬ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд▓реЗрдХреНрд╕рд░ рдмрд╣реБрдд рдЖрджрд┐рдо рд╣реЛрдЧрд╛ рдФрд░ рдХреЗрд╡рд▓ рдХрдорд╛рдВрдб рдФрд░ рдХрдореЗрдВрдЯ рдкреЗрдВрдЯ рдХрд░реЗрдЧрд╛ред

рдЬреИрд╕рд╛ рдХрд┐ рдЧрдЧрд╛рд░рд┐рди рдиреЗ рдХрд╣рд╛ - "рдЪрд▓реЛ рдЪрд▓реЗрдВ!"

рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд▓реЗрдЦ (рдКрдкрд░ рджреЗрдЦреЗрдВ) рдкрдврд╝рд╛ рд╣реИ рдФрд░ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд╕рдВрдкрд╛рджрдХ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╣рдо рдЙрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд┐рдЫрд▓реА рдмрд╛рд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдерд╛ рдФрд░ рдЙрд╕реА рдЙрдкрдХрд░рдг рдХреЗ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде (рдпрд╣рд╛рдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реЗ рд▓реЗрдЦ рдХреЛ рдирд╣реАрдВ рдкрдврд╝рд╛ рдерд╛, рд╡реЗ рдкрдХрдбрд╝реЗ рдЧрдП)ред

рдХрд╛рд░реНрдп рдФрд░ рд╡рд┐рдЪрд╛рд░


рдЕрд╕реЗрдВрдмрд▓рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд░рдВрдЧ рд▓рд┐рдЦреЗрдВред рд▓реЗрдХрд┐рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ QScintilla рдореЗрдВ рд▓реЗрдХреНрд╕рд░ (рд░рдВрдЧ рдпреЛрдЬрдирд╛рдПрдВ) рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВред рдХреБрдЫ рдирд╣реАрдВ, рд▓рд┐рдЦреЛред рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ QsciLexerCustom рд╡рд░реНрдЧ рд╣реИ (рдЧреБрдкреНрдд рд░реВрдк рд╕реЗ: рдЗрд╕рдореЗрдВ рдЖрднрд╛рд╕реА рддрд░реАрдХреЗ рд╣реИрдВ)ред

рдлреМрдЬреЛрдВ рдХреЛ рдШрд░ рджреЗрдирд╛


рдЖрдЗрдП рд╣рдорд╛рд░реЗ рд▓реЗрд╕рд░ рдХреЗ рд╕рд╛рде рдЖрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░реЗрдВред рд░рд┐рдХреНрдд рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

class QsciLexerASM : public QsciLexerCustom { Q_OBJECT public: explicit QsciLexerASM(QObject *parent = 0); ~QsciLexerASM(); //!     (  ) void styleText(int start, int end); //!    (  styleText()) void paintKeywords(const QString &source, int start); void paintComments(const QString &source, int start); //!   (   ASM const char * language() const; //!    QColor defaultColor(int style) const; //!   QString description(int style) const; //!   enum { Default = 0, Comment = 1, Keyword = 2 }; private: QsciLexerASM(const QsciLexerASM &); QsciLexerASM &operator=(const QsciLexerASM &); QStringList keywordsList; }; 


рдпрд╣рд╛рдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдХреНрдпреВрд╕реЗрдВрдЯрд┐рд▓рд╛ рджреНрд╡рд╛рд░рд╛ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдЙрдирдХреА рдЬрд░реВрд░рдд рд╣реИ, рддреЛ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдореЗрдирд╡рд┐рдВрдбреЛ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗред

 QString QsciLexerASM::description(int style) const { switch(style) { case Default: return "Default"; case Comment: return "Comment"; case Keyword: return "Keyword"; } return QString(style); } const char * QsciLexerASM::language() { return "ASM"; } 


рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдФрд░ рдЖрдЧреЗ рдЪрд▓рддреЗ рд╣реИрдВред рдЕрдм рд╣рдореЗрдВ рд╕рднреА рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░рдВрдЧ рд░рдВрдЧ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 QColor QsciLexerASM::defaultColor(int style) const { switch(style) { case Comment: return Qt::darkGreen; case Keyword: return Qt::blue; } return Qt::black; } 


рдФрд░ рдХреЗрд╡рд▓ рдЕрдм рд╣рдо рдЕрдкрдирд╛ рдХреЛрдб рдХрд▓рд░ рдХрд░реЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдХреЛрдбрд╛рдВрддрд░рдХ рдореЗрдВ рдХреМрди рд╕реЗ рдХреАрд╡рд░реНрдб рд╣реИрдВред рдореБрдЭреЗ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкрд░ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдХреАрд╡рд░реНрдб рдХреЛ рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВ:

 QsciLexerASM::QsciLexerASM(QObject *parent) : QsciLexerCustom(parent) { keywordsList << "mov" << "add" << "sub" << "imul" << "or" << "and" << "xor" << "shr" << "jmp" << "loop" << "ret" << "int"; } 


рдЪрд▓рд┐рдП рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рдЕрдм рд╣рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ - рд╣рдо рдЙрд╕ рдЬрдЧрд╣ рдкрд░ рдЖрдП рдЬрд╣рд╛рдВ рд╣рдо рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд░рдВрдЧ рджреЗрдВрдЧреЗ! рдореИрдВ рд╕реНрдЯрд╛рдЗрд▓рдЯреЗрдХреНрд╕реНрдЯ () рдлрд╝рдВрдХреНрд╢рди рдХреА рдХреЛрдб рд╕реВрдЪреА рджреВрдВрдЧрд╛, рдФрд░ рдлрд┐рд░ рдЙрд╕ рдкрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЯрд┐рдкреНрдкрдгреА рдХрд░реВрдВрдЧрд╛:

 void QsciLexerASM::styleText(int start, int end) { if(!editor()) return; //        char * data = new char[end - start + 1]; //   Scintilla editor()->SendScintilla(QsciScintilla::SCI_GETTEXTRANGE, start, end, data); QString source(data); delete [] data; if(source.isEmpty()) return; //  ! paintKeywords(source, start); paintComments(source, start); } 


рдПрдХ рдкрд▓ред рд╡рд┐рдзрд┐ рдХреА рдЕрдВрддрд┐рдо рджреЛ рдкрдВрдХреНрддрд┐рдпрд╛рдБред PaintKeyword () рдФрд░ paintComments () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд░рдорд╢рдГ рдХреАрд╡рд░реНрдб рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд░рдВрдЧ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдЯреАрдореЛрдВ рдХреЗ рд░рдВрдЧ рдХреЛ рдмреБрд▓рд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдЯрд┐рдкреНрдкрдгреА рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпреЛрдВ? рд▓рдЧрддрд╛ред

рдЕрдм рд╕рдм рдареАрдХ рд╣реИред рд▓рдЧрднрдЧ рд╕рднреА рддрд░реАрдХреЗ рд▓рд╛рдЧреВ рд╣реИрдВред рдпрд╣ рдХреЗрд╡рд▓ рдкреЗрдВрдЯрдХреЗрдпрд░ () рдФрд░ рдкреЗрдВрдЯрдХреЙрдореЗрдВрдЯреНрд╕ () рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ:

 void QsciLexerASM::paintKeywords(const QString &source, int start) { foreach(QString word, keywordsList) { //    if(source.contains(word)) { int p = source.count(word); //   int index = 0; //    c 0 while(p != 0) { int begin = source.indexOf(word, index); //    index = begin+1; //       startStyling(start + begin); //      setStyling(word.length(), Keyword); //   word.length   Keyword startStyling(start + begin); //   p--; } } } } void QsciLexerASM::paintComments(const QString &source, int start) { int p = source.count(";"); //     if(p == 0) return; int index = 0; //    ";"  0 while(p != 0) { int begin = source.indexOf(";", index); //    int length=0; //   index = begin+1; //       for(int k = begin; source[k] != '\n'; k++) //  source    length++; startStyling(start + begin); //      setStyling(length, Comment); //   length   Comment startStyling(start + begin); //   p--; } } 


рд╣реЛ рдЧрдпрд╛ред рдЕрдм рд╣рдорд╛рд░реЗ рд▓реАрдХрд░ рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред рдЖрдк рд╕рдВрдХрд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рдБ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рдВ, рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкрд░рд┐рдгрд╛рдо


рдореИрдВрдиреЗ рдЕрд╕реЗрдВрдмрд▓рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред рддреЛ рдмреЗрддрд╣рд╛рд╢рд╛ рдЕрдлрд╝рд╕реЛрд╕ред рдореИрдВ рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рднреА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рд╣рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд▓рд╛ рд╣реИ:




рдХреБрдЫ рдХреАрдбрд╝реЗ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢рдмреНрдж "рдбреЙрд░реНрдб" рдПрдХ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ "рдпрд╛" рдХреА рдШрдЯрдирд╛ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдХреЙрдорд░реЗрдб рдереЗрд╣рд░реНрд╕ рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ - рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдкрд╛рда рдореЗрдВ рдХреАрд╡рд░реНрдб рдХреА рдШрдЯрдирд╛ рдХреЛ рд╡рд┐рднрд╛рдЬрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рддрдХ, рдореИрдВ рдЗрддрдирд╛ рдердХ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рдмрдЧ рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджрд┐рдпрд╛ :)

рдФрд░ рдпрд╣рд╛рдБ рд╣рдорд╛рд░реА рд░рдЪрдирд╛ рд╣реИ: qscintilla-Demo-2

рдзрдиреНрдпрд╡рд╛рдж, рдФрд░ рдлрд┐рд░ рд╕реЗ рдореИрдВ рднрд╛рд╖рд╛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдлреА рдорд╛рдБрдЧрддрд╛ рд╣реВрдБред

Source: https://habr.com/ru/post/In144714/


All Articles