Community
    • Login

    Perl language syntax highlighting troubles (bug or limitation ?)

    Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
    112 Posts 6 Posters 44.0k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • EkopalypseE
      Ekopalypse @Gilles Maisonneuve
      last edited by

      @Gilles-Maisonneuve

      I get 1 returned if the language is set to Normal Text.
      Sorry for asking, but sure you have set the language to Perl?

      1 Reply Last reply Reply Quote 1
      • Gilles MaisonneuveG
        Gilles Maisonneuve @Ekopalypse
        last edited by Gilles Maisonneuve

        @Ekopalypse

        >>> editor.getLexerLanguage()
        'perl'
        

        Would it be (more) convenient for you to connect directly on my machine ? (DWservice) ?

        EkopalypseE 1 Reply Last reply Reply Quote 0
        • EkopalypseE
          Ekopalypse @Gilles Maisonneuve
          last edited by

          @Gilles-Maisonneuve

          Could it be that you have two views open, one with a perl document and one with a normal text document?

          1 Reply Last reply Reply Quote 0
          • Gilles MaisonneuveG
            Gilles Maisonneuve
            last edited by Gilles Maisonneuve

            I have many documents opened in different Windows ([edited]TABS). Is this what you mean by “views” ?

            No double Windows at a time like in “compare” or so.

            EkopalypseE 1 Reply Last reply Reply Quote 1
            • EkopalypseE
              Ekopalypse @Gilles Maisonneuve
              last edited by

              @Gilles-Maisonneuve

              No double Windows at a time like in “compare” or so.

              Ok, then it seems we have learned that the id is not always the same.
              Gimme a second to see what needs to be changed to use editor.getLexerLanguage() instead.

              1 Reply Last reply Reply Quote 2
              • Gilles MaisonneuveG
                Gilles Maisonneuve
                last edited by Gilles Maisonneuve

                all right, take your time.
                i’ll be there late tonight.

                about DWservice, it’s GNU, hosted in DE I guess, not smthg like Teamviewer. But perhaps you are right, one should always be paranoiac.

                EkopalypseE 1 Reply Last reply Reply Quote 0
                • EkopalypseE
                  Ekopalypse @Gilles Maisonneuve
                  last edited by

                  @Gilles-Maisonneuve

                  I’m living in DE but have to admit, that I haven’t heard of DWservice before, shame on me :-)

                  Changes
                  line 9 to BUILTIN_LEXER = 'perl'
                  line 111 self.lexer_name = BUILTIN_LEXER.lower()
                  line 219 to self.doc_is_of_interest = True if editor.getLexerLanguage().lower() == self.lexer_name else False

                  As python is very picky about whitespaces make sure that you either use
                  spaces or tabs for indentation only. Best python practice is to set
                  Settings->Preferences->Language->TabSettings->Python
                  Tab size = 4 and check replace by space checkbox
                  (if this isn’t your default setting, of course)

                  Gilles MaisonneuveG 1 Reply Last reply Reply Quote 2
                  • Gilles MaisonneuveG
                    Gilles Maisonneuve @Ekopalypse
                    last edited by Gilles Maisonneuve

                    @Ekopalypse

                    Oops, I must have made some mistakes but can’t find where… Here is the console log:

                    Traceback (most recent call last):
                      File "C:\Users\gm\AppData\Roaming\Notepad++\plugins\Config\PythonScript\scripts\startup.py", line 1, in <module>
                        import EnhancePerlLexer
                      File "C:\Users\gm\AppData\Roaming\Notepad++\plugins\Config\PythonScript\scripts\EnhancePerlLexer.py", line 283, in <module>
                        EnhanceBuiltinLexer().main()
                      File "C:\Users\gm\AppData\Roaming\Notepad++\plugins\Config\PythonScript\scripts\EnhancePerlLexer.py", line 280, in main
                        self.on_bufferactivated(None)
                      File "C:\Users\gm\AppData\Roaming\Notepad++\plugins\Config\PythonScript\scripts\EnhancePerlLexer.py", line 237, in on_bufferactivated
                        self.check_lexer()
                      File "C:\Users\gm\AppData\Roaming\Notepad++\plugins\Config\PythonScript\scripts\EnhancePerlLexer.py", line 224, in check_lexer
                        self.doc_is_of_interest = True if editor.getLexerLanguage().lower() == self.lexer_name else False
                    AttributeError: 'EnhanceBuiltinLexer' object has no attribute 'lexer_name'
                    Python 2.7.15 (v2.7.15:ca079a3ea3, Apr 30 2018, 16:30:26) [MSC v.1500 64 bit (AMD64)]
                    Initialisation took 343ms
                    Ready.
                    
                    Traceback (most recent call last):
                      File "C:\Users\gm\AppData\Roaming\Notepad++\plugins\Config\PythonScript\scripts\EnhancePerlLexer.py", line 73, in <module>
                        EnhanceBuiltinLexer().main()
                      File "C:\Users\gm\AppData\Roaming\Notepad++\plugins\Config\PythonScript\scripts\EnhancePerlLexer.py", line 280, in main
                        self.on_bufferactivated(None)
                      File "C:\Users\gm\AppData\Roaming\Notepad++\plugins\Config\PythonScript\scripts\EnhancePerlLexer.py", line 237, in on_bufferactivated
                        self.check_lexer()
                      File "C:\Users\gm\AppData\Roaming\Notepad++\plugins\Config\PythonScript\scripts\EnhancePerlLexer.py", line 224, in check_lexer
                        self.doc_is_of_interest = True if editor.getLexerLanguage().lower() == self.lexer_name else False
                    AttributeError: 'EnhanceBuiltinLexer' object has no attribute 'lexer_name'
                    

                    Line numbers don’t match because I already commented out some of your lines but kept them in the file, and duplicated them with my own changes. But I did do the changes at the places you told me to do them.

                    EkopalypseE 1 Reply Last reply Reply Quote 1
                    • EkopalypseE
                      Ekopalypse @Gilles Maisonneuve
                      last edited by

                      @Gilles-Maisonneuve

                      check line 111 - it defines the lexer_name

                      Gilles MaisonneuveG 1 Reply Last reply Reply Quote 2
                      • Gilles MaisonneuveG
                        Gilles Maisonneuve
                        last edited by

                        OOPS, yours :== self.lexer_name, mine :== self_lexer_name, I am really a dumb when dealing with OO programming, can’t realize that ‘self’ is the current object and of course separated by a dot.

                        Colour has changed for q* keywords and there text (black on dark blue, can’t read but now just need to ajust the colors).
                        No change for here docs, but don’t know if I properly set the colors, have to check.

                        Send you a screen copy in a few minutes.

                        1 Reply Last reply Reply Quote 2
                        • Gilles MaisonneuveG
                          Gilles Maisonneuve @Ekopalypse
                          last edited by Gilles Maisonneuve

                          @Ekopalypse

                          All right, nearly done: with the following regexp in your python code:

                          regexes[(1, (255,0,128))] = (r'\bq[rwqx]{0,1}\b([^\h]).*?\1|(\bq[rwqx]{0,1}\b\h+(\w).*?\3)', [0])
                          regexes[(2, (255,0,128))] = (r'\bq[rwqx]{0,1}\b\h*(\(.+?\)|\[.+?\]|\{.+?\})', [0])
                          regexes[(3, (0,0,0))] = (r'(?s)((<<)"*(\w+?)"*;.*?\3)', [2])
                          regexes[(4, (0,0,0))] = (r'(?s)((<<)\h+"(\w+?)";.*?\3)', [2,3])
                          

                          I get the following colors:

                          q* colors OK, here docs no

                          Q* colors are good {well I might have an uggly taste in colors but at least they match ;-)) }

                          Would you have any clue about why the here docs= are still not handled properly ? They should be black, I think.

                          EkopalypseE 1 Reply Last reply Reply Quote 2
                          • EkopalypseE
                            Ekopalypse @Gilles Maisonneuve
                            last edited by

                            @Gilles-Maisonneuve

                            the regexes assumes double quotes and semicolon directly attached to EOT.
                            Like

                            print << "EOT";
                            
                            --------------------- separation line ------------------
                            
                            EOT
                            

                            Is there a rule how this is specified?

                            1 Reply Last reply Reply Quote 2
                            • Gilles MaisonneuveG
                              Gilles Maisonneuve
                              last edited by Gilles Maisonneuve

                              I think I found why.
                              Your regexp says :
                              r'(?s)((<<)"*(\w+?)"*;.*?\3)'
                              would not it be better if :
                              r'(?s)(\h*(<<)\h*"*(\w+?)"*\h*;.*?\3)'

                              ???

                              To answer your question:

                              Perl allows

                              1. <<TEXT,
                              2. << TEXT
                              3. <<‘TEXT’ / << ‘TEXT’
                              4. <<“TEXT” / << “TEXT”

                              meanings differ in each case…

                              1 Reply Last reply Reply Quote 2
                              • EkopalypseE
                                Ekopalypse
                                last edited by

                                To be honest - I’m not a regex expert at all :-D
                                If you, as a perl developer, say so I would absolutely believe it is :-)

                                Gilles MaisonneuveG 1 Reply Last reply Reply Quote 1
                                • Gilles MaisonneuveG
                                  Gilles Maisonneuve @Ekopalypse
                                  last edited by

                                  @Ekopalypse

                                  In your Python regexp, what’s the meaning of:

                                  1. “\3”
                                  2. “, [2]” and “[2,3]” ?

                                  If I can understand what I think I could translate a Perl regex code into python (for this case at least).

                                  1 Reply Last reply Reply Quote 0
                                  • EkopalypseE
                                    Ekopalypse
                                    last edited by

                                    What about using this
                                    (?s)((<<)\h+(["|'])(\w+?)\3\h*;.*?\4)

                                    Gilles MaisonneuveG 1 Reply Last reply Reply Quote 0
                                    • EkopalypseE
                                      Ekopalypse
                                      last edited by

                                      1. is the boost:regex convention to denote match group 3
                                        and
                                      2. defines which match group actually should be painted

                                      Like if you have:

                                      r'(word1)(word2)(word3)', [2,3]
                                      

                                      would mean that only word2 and word3 would be painted
                                      whereas if you would specify

                                      r'(word1)(word2)(word3)', [0]
                                      

                                      everything would be colored.

                                      Does this makes sense to you?

                                      Gilles MaisonneuveG 1 Reply Last reply Reply Quote 0
                                      • Gilles MaisonneuveG
                                        Gilles Maisonneuve @Ekopalypse
                                        last edited by

                                        @Ekopalypse

                                        I don’t understand your regexp syntax. Perhaps too ‘pythonized’ for me.

                                        (?s) : what does it mean ? is it ‘s///’ ? or really a non capturing group of ‘s’ ???
                                        \3 \4 : are they $3 $4, I don’t think as I can’t see a 4th accumulator

                                        1 Reply Last reply Reply Quote 0
                                        • EkopalypseE
                                          Ekopalypse
                                          last edited by Ekopalypse

                                          (?s) is a modifier telling the engine that the dot matches line endings
                                          and yes, the engine uses \1 and $1

                                          Here the link to the documentation - maybe easier for you.

                                          1 Reply Last reply Reply Quote 0
                                          • EkopalypseE
                                            Ekopalypse
                                            last edited by

                                            ooppps

                                            (?s)((<<)\h+(["|'])(\w+?)\3\h*;.*?\3)

                                            :-D

                                            Gilles MaisonneuveG 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post
                                            The Community of users of the Notepad++ text editor.
                                            Powered by NodeBB | Contributors