Partage
  • Partager sur Facebook
  • Partager sur Twitter

Plugin (M)ASM pour Sublime Text

regex et comment* ... *

    26 avril 2021 à 18:55:11

    Bonjour à tous, je teste un peu l'assembleur en suivant le tuto des archives du SdZ.

    Pour faire des commentaires multi-lignes (/* ... */ en C/C++), il faut écrire

    comment* ... *
    
    Un autre symbole que * convient aussi, lorsqu'il est répété, il marque la fin du commentaire

    J'utilise Sublime Text 3 en tant qu'éditeur de texte, et j'ai trouvé un plugin plutôt pas mal sur GitHub.

    J'ai voulu bidouiller un peu le code (du YAML avec des balises HTML-style) pour ajouter la coloration syntaxique qui va avec (c'est pas tout à fait vrai, je vais "juste" indiquer à l'éditeur que tout ce qui est dans comment* ... * est un commentaire "block" et à colorer).

    Comme YAML nécessite des regex pour les caractères, je suis allé me renseigner sur Wikipédia mais je ne sais pas trop comment m'y prendre.

    Voici ce que j'ai essayé :

    <key>begin</key>
    <string>\b(comment+\w)\b</string>
    <key>end</key>
    <string>\b(/^{9}/)\b</string>

    Où begin indique le texte qui permet de reconnaître le début d'un commentaire de type bloc (comment + 1 caractère) et end la fin (le même caractère).

    -
    Edité par Chi_Iroh 26 avril 2021 à 19:02:25

    • Partager sur Facebook
    • Partager sur Twitter
      27 avril 2021 à 11:03:02

      je pense que c'est plus simplement dans le fichier Classic.tmTheme (https://github.com/MakiseKurisu/MasmAssembly/blob/master/Classic.tmTheme) que tu dois modifier la couleur du foreground de comment (ligne 36 ici)
      • Partager sur Facebook
      • Partager sur Twitter
        27 avril 2021 à 11:38:11

        Merci pour ta réponse, mais ici, c'est la syntaxe qui pose problème :

        <key>begin</key>
        <string>comment\t\*</string>
        <key>end</key>
        <string>\t\*</string>
        <key>name</key>
        <string>comment.block</string>

        Ce bout de code (l'original) colore un commentaire qui suit exactement la syntaxe ci-dessous :

        comment    * ... *
        
        mot-clé 'comment' + tabulation + '*' jusqu'au prochain '*'

        C'est valable mais j'aimerais généraliser pour avoir comme ici (§ deuxième méthode), il faut indiquer à Sublime Text que le bloc s'arrête à la 2e occurrence du caractère suivant comment.


        • Partager sur Facebook
        • Partager sur Twitter
          27 avril 2021 à 18:03:33

          c'est ce que ça doit déjà faire avec le mot clé end, non ? dans le code original, il faut une tabulation et l'étoile pour indiquer la fin du bloc;  si tu veux te passer de la tabulation, supprime le \t dans la rubrique <string> de <end>
          • Partager sur Facebook
          • Partager sur Twitter
            27 avril 2021 à 20:35:34

            J'avais déjà essayé, mais cela ne résout pas le "problème" initial, je vais essayer de reformuler.

            Le mot-clé comment peut utiliser n'importe quel caractère, comme dit dans le tuto.

            Par exemple :

            comment& ... &
            comment* ... *
            commentV ... V <- lettres pas recommandées mais valides
            comment3 ... 3

            C'est pour cela que je voulais repérer le caractère de fin en le comparant à celui après 'comment'.

            -
            Edité par Chi_Iroh 27 avril 2021 à 20:36:19

            • Partager sur Facebook
            • Partager sur Twitter
              28 avril 2021 à 12:18:44

              ok j'avais mal compris la demande. Je ne suis pas sûr que l'on puisse généraliser (je tenterai peut-être un ? après comment et à la fin à la place du \* précédent)

              • Partager sur Facebook
              • Partager sur Twitter
                28 avril 2021 à 16:59:03

                J'ai donc mis :

                <key>begin</key>
                <string>comment?</string>
                <key>end</key>
                <string>?</string>
                <key>name</key>
                <string>comment.block</string>

                Mais dès que je sauvegarde, Sublime Text me balance une erreur :

                Error loadinf synatx file
                "Packages/User/MasmAssembly/MasmAssembly.tmLanguage":
                Error in regex: target of repeat operator is not specifed in regex ?
                • Partager sur Facebook
                • Partager sur Twitter
                  28 avril 2021 à 18:12:15

                  en fait ? ne marche pas.

                  je viens de tester cette regex, qui devrait peut-être marcher https://regex101.com/r/2Dq42G/2 

                  comment (?<separateur>\S).+(\k<separateur>)

                  donc  peut-être comme ça:

                  <key>begin</key>
                  <string>comment (?<separateur>\S)<string>
                  <key>end</key>
                  <string>(\k<separateur>)</string>
                  <key>name</key>
                  <string>comment.block</string>

                  ressources pour éventuellement creuser:

                   https://raw.githubusercontent.com/kkos/oniguruma/master/doc/RE 

                  https://sublime-text-unofficial-documentation.readthedocs.io/en/latest/extensibility/syntaxdefs.html#begin-end-rules 



                  • Partager sur Facebook
                  • Partager sur Twitter
                    29 avril 2021 à 21:26:56

                    Effectivement, sur le site tout a l'air de fonctionner, je suis allé cherché les règles de syntaxe des regex et ça a l'air correct.

                    Cependant, Sublime Text n'apprécie pas, j'obtiens une belle erreur :

                    Error loading syntax file
                    <file> : Error parsing xml: unexpected end of data in file <file> on line: 718

                    Le fichier est ici et je n'ai modifié que la portion de code que vous m'avez donné dans le précédent message.

                    Est-ce le fait qu'il considère <separateur> comme une balise XML dont il n'a pas trouvé la fermeture </separateur> ?

                    • Partager sur Facebook
                    • Partager sur Twitter
                      30 avril 2021 à 10:34:46

                      ça peut être ça oui :o
                      • Partager sur Facebook
                      • Partager sur Twitter
                        30 avril 2021 à 11:54:56

                        J'ai essayé d'insérer un peu partout des balises </separateur> mais toujours la même erreur.

                        Donc j'imagine qu'il faut que je "traduise" le fichier .tmLanguage en YAML (.sublime-syntax) ?

                        • Partager sur Facebook
                        • Partager sur Twitter
                          30 avril 2021 à 13:09:35

                          remplace les <separateur> par 'separateur' (avec les guillemets simples) c'est la 2ème notation possible

                          <key>begin</key>
                          <string>comment (?'separateur'\S)<string>
                          <key>end</key>
                          <string>(\k'separateur')</string>
                          <key>name</key>
                          <string>comment.block</string>



                          • Partager sur Facebook
                          • Partager sur Twitter
                            30 avril 2021 à 18:59:24

                            Malheureusement, j'obtiens toujours la même erreur (j'ai aussi tenté des \' mais rien à faire).

                            Je peut-être essayer la traduction si je suis motivé, et puis sinon je laisserais tel quel (de toute façon le plugin est déjà bien foutu).

                            Merci d'avoir eu la patience d'essayer de m'aider même si la solution n'a pas été trouvée.

                            -
                            Edité par Chi_Iroh 30 avril 2021 à 18:59:45

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Plugin (M)ASM pour Sublime Text

                            × 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