Advertisement
Guest User

Untitled

a guest
Feb 9th, 2021
21
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.12 KB | None | 0 0
  1. #include "SyntaxPartisaner.h"
  2.  
  3. SyntaxPartisaner::SyntaxPartisaner(QTextDocument *parent,QColor keywordColor,
  4. QColor classColor,QColor singleCommentColor,QColor multiCommentColor,
  5. QColor quotationColor,QColor funcColor): QSyntaxHighlighter(parent)
  6. {
  7. HighlightingRule rule;
  8.  
  9. keywordFormat.setForeground(keywordColor);
  10. keywordFormat.setFontWeight(QFont::Bold);
  11. QStringList keywordPatterns;
  12. keywordPatterns << "\\bchar\\b" << "\\bclass\\b" << "\\bconst\\b"
  13. << "\\bdouble\\b" << "\\benum\\b" << "\\bexplicit\\b"
  14. << "\\bfriend\\b" << "\\binline\\b" << "\\bint\\b"
  15. << "\\blong\\b" << "\\bnamespace\\b" << "\\boperator\\b"
  16. << "\\bprivate\\b" << "\\bprotected\\b" << "\\bpublic\\b"
  17. << "\\bshort\\b" << "\\bsignals\\b" << "\\bsigned\\b"
  18. << "\\bslots\\b" << "\\bstatic\\b" << "\\bstruct\\b"
  19. << "\\btemplate\\b" << "\\btypedef\\b" << "\\btypename\\b"
  20. << "\\bunion\\b" << "\\bunsigned\\b" << "\\bvirtual\\b"
  21. << "\\bvoid\\b" << "\\bvolatile\\b" <<"\\bwhile\\b"
  22. << "\\bfor\\b" <<"\\bif\\b" <<"\\bor\\b" <<"\\band\\b"
  23. << "\\belse\\b" << "\\bbool\\b" << "\\btry\\b" << "\\bcatch\\b"
  24. << "\\bthrow\\b" << "\\bassert\\b" << "\\btrue\\b" << "\\bfalse\\b";
  25.  
  26. for(const QString &pattern: keywordPatterns) {
  27. rule.pattern = QRegExp(pattern);
  28. rule.format = keywordFormat;
  29. highlightingRules.append(rule);
  30. }
  31.  
  32. classFormat.setFontWeight(QFont::Bold);
  33. classFormat.setForeground(classColor);
  34. rule.pattern = QRegExp("\\bQ[A-Za-z]+\\b");
  35. rule.format = classFormat;
  36. highlightingRules.append(rule);
  37.  
  38. singleLineCommentFormat.setForeground(singleCommentColor);
  39. rule.pattern = QRegExp("//[^\n]*");
  40. rule.format = singleLineCommentFormat;
  41. highlightingRules.append(rule);
  42.  
  43. multiLineCommentFormat.setForeground(multiCommentColor);
  44.  
  45. quotationFormat.setForeground(quotationColor);
  46. rule.pattern = QRegExp("\".*\"");
  47. rule.format = quotationFormat;
  48. highlightingRules.append(rule);
  49.  
  50. functionFormat.setFontItalic(true);
  51. functionFormat.setForeground(funcColor);
  52. rule.pattern = QRegExp("\\b[A-Za-z0-9_]+(?=\\()");
  53. rule.format = functionFormat;
  54. highlightingRules.append(rule);
  55.  
  56. commentStartExpression = QRegExp("/\\*");
  57. commentEndExpression = QRegExp("\\*/");
  58. }
  59.  
  60. SyntaxPartisaner::SyntaxPartisaner(QTextDocument *parent) : QSyntaxHighlighter(parent)
  61. {
  62. HighlightingRule rule;
  63.  
  64. QStringList keywordPatterns;
  65.  
  66. if(not keywordPatterns.isEmpty()){
  67. for(const QString &pattern: keywordPatterns) {
  68. rule.pattern = QRegExp(pattern);
  69. rule.format = keywordFormat;
  70. highlightingRules.append(rule);
  71. }
  72. }
  73.  
  74. commentStartExpression = QRegExp("/\\*");
  75. commentEndExpression = QRegExp("\\*/");
  76. }
  77. SyntaxPartisaner::~SyntaxPartisaner(){}
  78. void SyntaxPartisaner::highlightBlock(const QString &text)
  79. {
  80. for(const HighlightingRule &rule: highlightingRules) {
  81. QRegExp expression(rule.pattern);
  82. int index = expression.indexIn(text);
  83. while(index >= 0) {
  84. int length = expression.matchedLength();
  85. setFormat(index, length, rule.format);
  86. index = expression.indexIn(text, index + length);
  87. }
  88. }
  89.  
  90. setCurrentBlockState(0);
  91.  
  92. int startIndex = 0;
  93. if(previousBlockState() != 1)
  94. startIndex = commentStartExpression.indexIn(text);
  95.  
  96.  
  97. while(startIndex >= 0) {
  98. int endIndex = commentEndExpression.indexIn(text, startIndex);
  99. int commentLength;
  100. if(endIndex == -1) {
  101. setCurrentBlockState(1);
  102. commentLength = text.length() - startIndex;
  103. }else{
  104. commentLength = endIndex - startIndex + commentEndExpression.matchedLength();
  105. }
  106. setFormat(startIndex, commentLength, multiLineCommentFormat);
  107. startIndex = commentStartExpression.indexIn(text, startIndex + commentLength);
  108. }
  109. }
  110.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement