Partage
  • Partager sur Facebook
  • Partager sur Twitter

Matchs imbriqués avec QRegularExpression

SyntaxHighlighter

Sujet résolu
    9 avril 2019 à 9:22:11

    Hellow ! :)

    Je suis en train d'essayer de faire un syntax highlighter avec Qt en m'aidant de l'exemple officiel :

    https://doc.qt.io/qt-5/qtwidgets-richtext-syntaxhighlighter-example.html

    avec un code comme :

    void highlightBock(const QString& text)
    {
        for (const HighlightingRule& rule : m_highlightingRules)
        {
            QRegularExpressionMatchIterator it = rule.pattern.globalMatch(text);
            while (it.hasNext())
            {
                const QRegularExpressionMatch match = it.next();
                setFormat(match.capturedStart(), match.capturedLength(), rule.format);
            }
        }
    }

    Avec comme regex pour les commentaires : #[^\n]*

    Et pour les chaines de caractères : "[^"]*"

    L'exemple est buggé vu que la coloration ne fonctionne pas avec des consommations de token mais des regex. Du coup en fonction de l'ordre des règles, on a l'un ou l'autre des bugs :

    J'ai résolu cette étape en prenant les matchs dans l'ordre d'apparition sur la ligne, peu importe la règle. Mais il me reste le cas suivant :

     "Utilise le #Perdu " quand ton code ne marche plus # To be fixed

    Ici si on oublie les guillemets, on a un 2e commentaire dans le 1er qui commence à #Perdu. Mais comme il ne s'applique pas à cause des guillemets, il faut colorer le 2e. Seulement le global match ne le trouve pas.
    Ici le soucis ne vient pas de la coloration mais du match des regex. Est-il possible de récupérer les nested match avec cette classe ?

    Merci ! ;)

    EDIT : On m'a donné la regex suivante qui fonctionne. :) (?=(#.*))

    -
    Edité par Maluna34 9 avril 2019 à 19:37:11

    • Partager sur Facebook
    • Partager sur Twitter

    Matchs imbriqués avec QRegularExpression

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown