Bug 364866 - Wrong highlighting of matching braces in Perl
Summary: Wrong highlighting of matching braces in Perl
Alias: None
Product: frameworks-syntax-highlighting
Classification: Frameworks and Libraries
Component: syntax (show other bugs)
Version: unspecified
Platform: Debian testing Linux
: NOR minor
Target Milestone: ---
Assignee: KWrite Developers
Depends on:
Reported: 2016-06-28 17:46 UTC by Victor Porton
Modified: 2018-09-10 08:20 UTC (History)
3 users (show)

See Also:
Latest Commit:
Version Fixed In: 5.51.0

Screenshot with a bug (14.15 KB, image/png)
2016-06-28 17:47 UTC, Victor Porton
A Perl file (169 bytes, text/x-perl)
2016-06-28 17:47 UTC, Victor Porton

Note You need to log in before you can comment on or make changes to this bug.
Description Victor Porton 2016-06-28 17:46:49 UTC
Highlighting matching brace in the attached Perl file is wrong. See the attached image.

Reproducible: Always
Comment 1 Victor Porton 2016-06-28 17:47:26 UTC
Created attachment 99743 [details]
Screenshot with a bug
Comment 2 Victor Porton 2016-06-28 17:47:44 UTC
Created attachment 99744 [details]
A Perl file
Comment 3 Buovjaga 2016-07-11 12:16:46 UTC

Arch Linux 64-bit
Kate 16.04.2
KDE Frameworks 5.23.0
Qt 5.7
xcb wm
Comment 4 Christoph Cullmann 2018-08-15 21:33:36 UTC
reproducable with current hl file.
Comment 5 Nibaldo G. 2018-09-10 08:20:03 UTC
Git commit d0c698198ec8abc2245ee3d2ab38eabf8f62f444 by Nibaldo González.
Committed on 10/09/2018 at 08:19.
Pushed by ngonzalez into branch 'master'.

Perl: fix brackets, variables, string references and others

### Fix incorrect bracket closures in RegExp patterns
Related: bug 348765, bug 355300, bug 391577

Recursive subgroups are added inside brackets `{}` and `()`, to avoid incorrect closures in RegExp patterns. This correction is in accordance with other text editors (VS Code, Atom, gedit & Sublime Text), which highlight the RegExp patterns in that way.

### Allow strings as scalar references

Previously, the characters `"` and `'` were escaped, which caused an erroneous highlight when using references such as `\'string'` (see ref. [1] and [2]).

### Fix incorrect highlighting of variables that start with underscores

This error was caused by the order of the RegExpr rules to detect variables: `[@\$][\+\-_]` had priority over `\$[#_][\w_]` (`$_` is a special variable) (ref. [3] & [4]).

### Fix incorrect highlighting of characters in variables

Previously, characters such as `()[]}` were highlighted after `*` in some variables, such as `@*)`, causing incorrect closures of brackets.

### Other fixes:

* Add variables with carret, such as: `${^Foo}` or `$^V` (ref. [3]).
* Add special variables: `%+`, `%-`, `%!` & `%^H` (ref. [3]).
* Missing escapes are added, such as `\x{NN..}`, `\o{NN..}` (full list in ref. [5]).


* [1] Perl References: https://gist.github.com/afair/2402068
* [2] PerlMonks. Constant string reference: https://www.perlmonks.org/?node_id=413500
* [3] Perl Programming Documentation. perlvar: https://perldoc.perl.org/perlvar.html
* [4] PerlMonks. Perl Special Variables Quick Reference: https://www.perlmonks.org/?node_id=353259
* [5] Perl Programming Documentation. perlrebackslash: https://perldoc.perl.org/perlrebackslash.html

FIXED-IN: 5.51.0

Reviewers: cullmann, dhaumann, #framework_syntax_highlighting

Reviewed By: cullmann, #framework_syntax_highlighting

Subscribers: kwrite-devel, kde-frameworks-devel

Tags: #kate, #frameworks

Differential Revision: https://phabricator.kde.org/D15397

M  +20   -0    autotests/folding/highlight.pl.fold
M  +20   -0    autotests/html/highlight.pl.html
M  +20   -0    autotests/input/highlight.pl
M  +20   -0    autotests/reference/highlight.pl.ref
M  +58   -13   data/syntax/perl.xml