From fdf43612de7dd034a79ccf56821fd3c9073049f8 Mon Sep 17 00:00:00 2001 From: 0xflotus <0xflotus@gmail.com> Date: Sat, 25 Apr 2020 03:52:28 +0200 Subject: [PATCH 01/24] (java): #2507 added support for hexadecimal floating point literals --- src/languages/java.js | 36 +++++++++++++----------------------- test/markup/java/numbers.txt | 2 ++ 2 files changed, 15 insertions(+), 23 deletions(-) diff --git a/src/languages/java.js b/src/languages/java.js index f349a76ad0..cea25c3753 100644 --- a/src/languages/java.js +++ b/src/languages/java.js @@ -5,7 +5,7 @@ Category: common, enterprise Website: https://www.java.com/ */ -export default function(hljs) { +export default function (hljs) { var JAVA_IDENT_RE = '[\u00C0-\u02B8a-zA-Z_$][\u00C0-\u02B8a-zA-Z_$0-9]*'; var GENERIC_IDENT_RE = JAVA_IDENT_RE + '(<' + JAVA_IDENT_RE + '(\\s*,\\s*' + JAVA_IDENT_RE + ')*>)?'; var KEYWORDS = @@ -18,7 +18,7 @@ export default function(hljs) { var ANNOTATION = { className: 'meta', begin: '@' + JAVA_IDENT_RE, - contains:[ + contains: [ { begin: /\(/, end: /\)/, @@ -26,24 +26,14 @@ export default function(hljs) { }, ] } - // https://docs.oracle.com/javase/7/docs/technotes/guides/language/underscores-literals.html - var JAVA_NUMBER_RE = '\\b' + - '(' + - '0[bB]([01]+[01_]+[01]+|[01]+)' + // 0b... - '|' + - '0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)' + // 0x... - '|' + - '(' + - '([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?' + - '|' + - '\\.([\\d]+[\\d_]+[\\d]+|[\\d]+)' + - ')' + - '([eE][-+]?\\d+)?' + // octal, decimal, float - ')' + - '[lLfF]?'; var JAVA_NUMBER_MODE = { className: 'number', - begin: JAVA_NUMBER_RE, + variants: [ + { begin: '\\b(0[bB][01]+)[lL]?' }, // binary + { begin: '\\b(0[0-7]+)[dDfFlL]?' }, // octal + { begin: '\\b0[xX](([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)?[\\.])?([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)?-?[pP]([\\d]+)[dDfF]?' }, // hexadecimal floating point literals + { begin: hljs.C_NUMBER_RE + '[dDfFlL]?' }, // hexadecimal, decimal and scientific notation + ], relevance: 0 }; @@ -57,15 +47,15 @@ export default function(hljs) { '/\\*\\*', '\\*/', { - relevance : 0, - contains : [ + relevance: 0, + contains: [ { // eat up @'s in emails to prevent them to be recognized as doctags begin: /\w+@/, relevance: 0 }, { - className : 'doctag', - begin : '@[A-Za-z]+' + className: 'doctag', + begin: '@[A-Za-z]+' } ] } @@ -80,7 +70,7 @@ export default function(hljs) { keywords: 'class interface', illegal: /[:"\[\]]/, contains: [ - {beginKeywords: 'extends implements'}, + { beginKeywords: 'extends implements' }, hljs.UNDERSCORE_TITLE_MODE ] }, diff --git a/test/markup/java/numbers.txt b/test/markup/java/numbers.txt index f68a40c7ad..5e94a02611 100644 --- a/test/markup/java/numbers.txt +++ b/test/markup/java/numbers.txt @@ -7,3 +7,5 @@ long maxLong = 0x7fff_ffff_ffff_ffffL; byte nybbles = 0b0010_0101; long bytes = 0b11010010_01101001_10010100_10010010; int n = 1234 + Contacts._ID; +float f = 0x1.4p2f; +double d = 0x.ep-6; \ No newline at end of file From 6b7457dedb7b71f1c7c8d7fe82d906ec13102e67 Mon Sep 17 00:00:00 2001 From: 0xflotus <0xflotus@gmail.com> Date: Sat, 25 Apr 2020 04:08:21 +0200 Subject: [PATCH 02/24] added more test cases --- test/markup/java/numbers.txt | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/test/markup/java/numbers.txt b/test/markup/java/numbers.txt index 5e94a02611..cffa1afe2d 100644 --- a/test/markup/java/numbers.txt +++ b/test/markup/java/numbers.txt @@ -8,4 +8,16 @@ byte nybbles = 0b0010_0101; long bytes = 0b11010010_01101001_10010100_10010010; int n = 1234 + Contacts._ID; float f = 0x1.4p2f; -double d = 0x.ep-6; \ No newline at end of file +double d = 0x.ep-6; +int octal = 0777; +float f = 2e3f; +double d = 1.2e4D; +a = 0x4fa6p2; +b = 0x.4p2; +c = 0xa.ffp3f; +d = 0x1.0p2F; +e = 0x1.0p2f; +f = 0x1p1; +g = 0x.3p4d; +h = 0x1.2ep5D; +i = 0x1.p2; From e5fca84e04e0465eee27187bc33232e831b5c7ef Mon Sep 17 00:00:00 2001 From: 0xflotus <0xflotus@gmail.com> Date: Sat, 25 Apr 2020 05:09:31 +0200 Subject: [PATCH 03/24] trying --- src/languages/java.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/languages/java.js b/src/languages/java.js index cea25c3753..f708fa9234 100644 --- a/src/languages/java.js +++ b/src/languages/java.js @@ -31,8 +31,8 @@ export default function (hljs) { variants: [ { begin: '\\b(0[bB][01]+)[lL]?' }, // binary { begin: '\\b(0[0-7]+)[dDfFlL]?' }, // octal - { begin: '\\b0[xX](([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)?[\\.])?([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)?-?[pP]([\\d]+)[dDfF]?' }, // hexadecimal floating point literals - { begin: hljs.C_NUMBER_RE + '[dDfFlL]?' }, // hexadecimal, decimal and scientific notation + { begin: '\\b0[xX]((([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)?[\\.])?([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)?[pP]-?([\\d]+)[dDfF]?|([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+))' }, + { begin: '(-?)(\\b0[xX][a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)' + '[dDfFlL]?' }, // hexadecimal, decimal and scientific notation ], relevance: 0 }; From 4c6393df5ad8b72457daae1f88629d76af475994 Mon Sep 17 00:00:00 2001 From: Josh Goebel Date: Sat, 25 Apr 2020 16:31:43 -0400 Subject: [PATCH 04/24] almost --- src/languages/java.js | 11 +++++++---- test/markup/java/numbers.expect.txt | 14 ++++++++++++++ test/markup/java/numbers.txt | 18 +++++++++--------- 3 files changed, 30 insertions(+), 13 deletions(-) diff --git a/src/languages/java.js b/src/languages/java.js index f708fa9234..1c808dab56 100644 --- a/src/languages/java.js +++ b/src/languages/java.js @@ -29,10 +29,13 @@ export default function (hljs) { var JAVA_NUMBER_MODE = { className: 'number', variants: [ - { begin: '\\b(0[bB][01]+)[lL]?' }, // binary - { begin: '\\b(0[0-7]+)[dDfFlL]?' }, // octal - { begin: '\\b0[xX]((([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)?[\\.])?([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)?[pP]-?([\\d]+)[dDfF]?|([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+))' }, - { begin: '(-?)(\\b0[xX][a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)' + '[dDfFlL]?' }, // hexadecimal, decimal and scientific notation + { begin: '\\b(0[bB][01]+[01_]*[01]+)[lL]?' }, // binary + { begin: '\\b(0[0-7]+[0-7_]*[0-7]+)[dDfFlL]?' }, // octal + { begin: '\\b[\\d]+[\\d_]*[\\d]+[lL]?' }, // decimal + { begin: '\\b([\\d]*[\\.][\\d_]*[\\d]+|[\\d]+[\\d_]*)[eE][+-]?[\\d]+[dDfF]?' }, // scientific notation + { begin: '\\b[\\d]+[\\.][\\d_]*[\\d]+[dDfF]?' }, // floating point + { begin: '\\b0[xX]((([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)?[\\.]?)?([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)?[pP][+-]?([\\d]+)[dDfF]?|([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+))[fFdD]?' }, // hexadecimal floating point + { begin: '\\b0[xX]([a-fA-F0-9]+[a-fA-F0-9_]*[a-fA-F0-9]+)[lL]?' }, // hexadecimal ], relevance: 0 }; diff --git a/test/markup/java/numbers.expect.txt b/test/markup/java/numbers.expect.txt index 713579cf6f..743771d539 100644 --- a/test/markup/java/numbers.expect.txt +++ b/test/markup/java/numbers.expect.txt @@ -7,3 +7,17 @@ byte nybbles = 0b0010_0101; long bytes = 0b11010010_01101001_10010100_10010010; int n = 1234 + Contacts._ID; +float f = 0x1.4p2f; +double d = 0x.ep-6; +int octal = 0777; +float f = 2e3f; +double d = 1.2e4D; +a = 0x4fa6p2; +b = 0x.4p2; +c = 0xa.ffp3f; +d = 0x1.0p2F; +e = 0x1.0p2f; +f = 0x1p1; +g = 0x.3p4d; +h = 0x1.2ep5D; +i = 0x1.p2; diff --git a/test/markup/java/numbers.txt b/test/markup/java/numbers.txt index cffa1afe2d..ac9408f3e9 100644 --- a/test/markup/java/numbers.txt +++ b/test/markup/java/numbers.txt @@ -12,12 +12,12 @@ double d = 0x.ep-6; int octal = 0777; float f = 2e3f; double d = 1.2e4D; -a = 0x4fa6p2; -b = 0x.4p2; -c = 0xa.ffp3f; -d = 0x1.0p2F; -e = 0x1.0p2f; -f = 0x1p1; -g = 0x.3p4d; -h = 0x1.2ep5D; -i = 0x1.p2; +a = 0x4fa6p2; +b = 0x.4p2; +c = 0xa.ffp3f; +d = 0x1.0p2F; +e = 0x1.0p2f; +f = 0x1p1; +g = 0x.3p4d; +h = 0x1.2ep5D; +i = 0x1.p2; From a227e95837c155ee7286db98484313848af7e994 Mon Sep 17 00:00:00 2001 From: 0xflotus <0xflotus@gmail.com> Date: Thu, 30 Apr 2020 16:39:06 +0200 Subject: [PATCH 05/24] changed order --- src/languages/java.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/java.js b/src/languages/java.js index 1c808dab56..011efd7cef 100644 --- a/src/languages/java.js +++ b/src/languages/java.js @@ -34,8 +34,8 @@ export default function (hljs) { { begin: '\\b[\\d]+[\\d_]*[\\d]+[lL]?' }, // decimal { begin: '\\b([\\d]*[\\.][\\d_]*[\\d]+|[\\d]+[\\d_]*)[eE][+-]?[\\d]+[dDfF]?' }, // scientific notation { begin: '\\b[\\d]+[\\.][\\d_]*[\\d]+[dDfF]?' }, // floating point + { begin: '\\b0[xX]([a-fA-F0-9]+[a-fA-F0-9_]*[a-fA-F0-9]+)[pP]?[\\d]*[lL]?' }, // hexadecimal { begin: '\\b0[xX]((([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)?[\\.]?)?([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)?[pP][+-]?([\\d]+)[dDfF]?|([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+))[fFdD]?' }, // hexadecimal floating point - { begin: '\\b0[xX]([a-fA-F0-9]+[a-fA-F0-9_]*[a-fA-F0-9]+)[lL]?' }, // hexadecimal ], relevance: 0 }; From f471eaa7719f7a3372f4ff10da1786862040c8d3 Mon Sep 17 00:00:00 2001 From: 0xflotus <0xflotus@gmail.com> Date: Wed, 13 May 2020 20:04:04 +0200 Subject: [PATCH 06/24] Update java.js --- src/languages/java.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/java.js b/src/languages/java.js index 011efd7cef..913e11298a 100644 --- a/src/languages/java.js +++ b/src/languages/java.js @@ -29,7 +29,7 @@ export default function (hljs) { var JAVA_NUMBER_MODE = { className: 'number', variants: [ - { begin: '\\b(0[bB][01]+[01_]*[01]+)[lL]?' }, // binary + { begin: '\\b(0[bB][01]+([01_]*[01]+)?)[lL]?' }, // binary { begin: '\\b(0[0-7]+[0-7_]*[0-7]+)[dDfFlL]?' }, // octal { begin: '\\b[\\d]+[\\d_]*[\\d]+[lL]?' }, // decimal { begin: '\\b([\\d]*[\\.][\\d_]*[\\d]+|[\\d]+[\\d_]*)[eE][+-]?[\\d]+[dDfF]?' }, // scientific notation From 05bf51054812f20fa1d980fe1b3fa3ba47399a93 Mon Sep 17 00:00:00 2001 From: 0xflotus <0xflotus@gmail.com> Date: Wed, 13 May 2020 20:05:41 +0200 Subject: [PATCH 07/24] Update java.js --- src/languages/java.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/java.js b/src/languages/java.js index 913e11298a..a65903b23c 100644 --- a/src/languages/java.js +++ b/src/languages/java.js @@ -30,7 +30,7 @@ export default function (hljs) { className: 'number', variants: [ { begin: '\\b(0[bB][01]+([01_]*[01]+)?)[lL]?' }, // binary - { begin: '\\b(0[0-7]+[0-7_]*[0-7]+)[dDfFlL]?' }, // octal + { begin: '\\b(0[0-7]+([0-7_]*[0-7]+)?)[dDfFlL]?' }, // octal { begin: '\\b[\\d]+[\\d_]*[\\d]+[lL]?' }, // decimal { begin: '\\b([\\d]*[\\.][\\d_]*[\\d]+|[\\d]+[\\d_]*)[eE][+-]?[\\d]+[dDfF]?' }, // scientific notation { begin: '\\b[\\d]+[\\.][\\d_]*[\\d]+[dDfF]?' }, // floating point From b83f26e888dfc55d37727e2c7d6df2e93a2dc9df Mon Sep 17 00:00:00 2001 From: 0xflotus <0xflotus@gmail.com> Date: Wed, 13 May 2020 20:10:03 +0200 Subject: [PATCH 08/24] Update java.js --- src/languages/java.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/java.js b/src/languages/java.js index a65903b23c..467368f63d 100644 --- a/src/languages/java.js +++ b/src/languages/java.js @@ -31,7 +31,7 @@ export default function (hljs) { variants: [ { begin: '\\b(0[bB][01]+([01_]*[01]+)?)[lL]?' }, // binary { begin: '\\b(0[0-7]+([0-7_]*[0-7]+)?)[dDfFlL]?' }, // octal - { begin: '\\b[\\d]+[\\d_]*[\\d]+[lL]?' }, // decimal + { begin: '\\b[\\d]+([\\d_]*[\\d]+)?[lL]?' }, // decimal { begin: '\\b([\\d]*[\\.][\\d_]*[\\d]+|[\\d]+[\\d_]*)[eE][+-]?[\\d]+[dDfF]?' }, // scientific notation { begin: '\\b[\\d]+[\\.][\\d_]*[\\d]+[dDfF]?' }, // floating point { begin: '\\b0[xX]([a-fA-F0-9]+[a-fA-F0-9_]*[a-fA-F0-9]+)[pP]?[\\d]*[lL]?' }, // hexadecimal From f8186ef15c4fee05e55a6f25b29a9102d6176153 Mon Sep 17 00:00:00 2001 From: 0xflotus <0xflotus@gmail.com> Date: Wed, 13 May 2020 20:16:23 +0200 Subject: [PATCH 09/24] Update numbers.txt --- test/markup/java/numbers.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/markup/java/numbers.txt b/test/markup/java/numbers.txt index ac9408f3e9..5878487f4b 100644 --- a/test/markup/java/numbers.txt +++ b/test/markup/java/numbers.txt @@ -21,3 +21,5 @@ f = 0x1p1; g = 0x.3p4d; h = 0x1.2ep5D; i = 0x1.p2; +int i = 23; +byte mask = 0x0f; From a4d59c3e7271b72505c66ad6f0f370bee56d5bf1 Mon Sep 17 00:00:00 2001 From: 0xflotus <0xflotus@gmail.com> Date: Wed, 13 May 2020 20:17:59 +0200 Subject: [PATCH 10/24] Update numbers.expect.txt --- test/markup/java/numbers.expect.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/markup/java/numbers.expect.txt b/test/markup/java/numbers.expect.txt index 743771d539..b1ad4fb747 100644 --- a/test/markup/java/numbers.expect.txt +++ b/test/markup/java/numbers.expect.txt @@ -21,3 +21,5 @@ f = 0x1p1; g = 0x.3p4d; h = 0x1.2ep5D; i = 0x1.p2; +int i = 23; +byte mask = 0x0f; From 2961a8587a2829c2f7fdd7c75c12d978e72cbb7f Mon Sep 17 00:00:00 2001 From: 0xflotus <0xflotus@gmail.com> Date: Wed, 13 May 2020 20:24:16 +0200 Subject: [PATCH 11/24] Update numbers.txt --- test/markup/java/numbers.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/markup/java/numbers.txt b/test/markup/java/numbers.txt index 5878487f4b..6ca58dbdec 100644 --- a/test/markup/java/numbers.txt +++ b/test/markup/java/numbers.txt @@ -23,3 +23,5 @@ h = 0x1.2ep5D; i = 0x1.p2; int i = 23; byte mask = 0x0f; +int i = 4; +byte mask = 0xa; From c991895482779abc4d832c73bf8a0d85aeb543ba Mon Sep 17 00:00:00 2001 From: 0xflotus <0xflotus@gmail.com> Date: Wed, 13 May 2020 20:25:53 +0200 Subject: [PATCH 12/24] Update numbers.expect.txt --- test/markup/java/numbers.expect.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/markup/java/numbers.expect.txt b/test/markup/java/numbers.expect.txt index b1ad4fb747..0c702bc263 100644 --- a/test/markup/java/numbers.expect.txt +++ b/test/markup/java/numbers.expect.txt @@ -23,3 +23,5 @@ h = 0x1.2ep5D; i = 0x1.p2; int i = 23; byte mask = 0x0f; +int i = 4; +byte mask = 0xa; From 33de3bda19c0deebd7aa3c1d24e63230e0e97fce Mon Sep 17 00:00:00 2001 From: 0xflotus <0xflotus@gmail.com> Date: Wed, 13 May 2020 20:30:03 +0200 Subject: [PATCH 13/24] Update numbers.txt --- test/markup/java/numbers.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/markup/java/numbers.txt b/test/markup/java/numbers.txt index 6ca58dbdec..2b85c183db 100644 --- a/test/markup/java/numbers.txt +++ b/test/markup/java/numbers.txt @@ -25,3 +25,6 @@ int i = 23; byte mask = 0x0f; int i = 4; byte mask = 0xa; +float f = 5.4; +float f = 2e3; +int n = 0b1; From 19b2cdb44d138f6bb7fd1a495499ad82615dedb8 Mon Sep 17 00:00:00 2001 From: 0xflotus <0xflotus@gmail.com> Date: Wed, 13 May 2020 20:30:53 +0200 Subject: [PATCH 14/24] Update numbers.expect.txt --- test/markup/java/numbers.expect.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/markup/java/numbers.expect.txt b/test/markup/java/numbers.expect.txt index 0c702bc263..53f7d1f26f 100644 --- a/test/markup/java/numbers.expect.txt +++ b/test/markup/java/numbers.expect.txt @@ -25,3 +25,6 @@ i = 0x1.p2; byte mask = 0x0f; int i = 4; byte mask = 0xa; +float f = 5.4; +float f = 2e3; +int n = 0b1; From dfc990b782f4e2d4171150e0370765d3cd3a03e7 Mon Sep 17 00:00:00 2001 From: 0xflotus <0xflotus@gmail.com> Date: Wed, 13 May 2020 20:33:18 +0200 Subject: [PATCH 15/24] Update java.js --- src/languages/java.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/java.js b/src/languages/java.js index 467368f63d..a65903b23c 100644 --- a/src/languages/java.js +++ b/src/languages/java.js @@ -31,7 +31,7 @@ export default function (hljs) { variants: [ { begin: '\\b(0[bB][01]+([01_]*[01]+)?)[lL]?' }, // binary { begin: '\\b(0[0-7]+([0-7_]*[0-7]+)?)[dDfFlL]?' }, // octal - { begin: '\\b[\\d]+([\\d_]*[\\d]+)?[lL]?' }, // decimal + { begin: '\\b[\\d]+[\\d_]*[\\d]+[lL]?' }, // decimal { begin: '\\b([\\d]*[\\.][\\d_]*[\\d]+|[\\d]+[\\d_]*)[eE][+-]?[\\d]+[dDfF]?' }, // scientific notation { begin: '\\b[\\d]+[\\.][\\d_]*[\\d]+[dDfF]?' }, // floating point { begin: '\\b0[xX]([a-fA-F0-9]+[a-fA-F0-9_]*[a-fA-F0-9]+)[pP]?[\\d]*[lL]?' }, // hexadecimal From b4ffefd909812fce4d799a3ee00a617f283d5b8a Mon Sep 17 00:00:00 2001 From: 0xflotus <0xflotus@gmail.com> Date: Wed, 13 May 2020 20:39:35 +0200 Subject: [PATCH 16/24] Update java.js --- src/languages/java.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/languages/java.js b/src/languages/java.js index a65903b23c..ce21af7c1a 100644 --- a/src/languages/java.js +++ b/src/languages/java.js @@ -31,11 +31,12 @@ export default function (hljs) { variants: [ { begin: '\\b(0[bB][01]+([01_]*[01]+)?)[lL]?' }, // binary { begin: '\\b(0[0-7]+([0-7_]*[0-7]+)?)[dDfFlL]?' }, // octal - { begin: '\\b[\\d]+[\\d_]*[\\d]+[lL]?' }, // decimal + { begin: '\\b[\\d]+([\\d_]*[\\d]+)?[lL]?' }, // decimal { begin: '\\b([\\d]*[\\.][\\d_]*[\\d]+|[\\d]+[\\d_]*)[eE][+-]?[\\d]+[dDfF]?' }, // scientific notation { begin: '\\b[\\d]+[\\.][\\d_]*[\\d]+[dDfF]?' }, // floating point { begin: '\\b0[xX]([a-fA-F0-9]+[a-fA-F0-9_]*[a-fA-F0-9]+)[pP]?[\\d]*[lL]?' }, // hexadecimal { begin: '\\b0[xX]((([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)?[\\.]?)?([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)?[pP][+-]?([\\d]+)[dDfF]?|([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+))[fFdD]?' }, // hexadecimal floating point + { begin: '\\b[0-9]?(\\.)?[0-9]' }, ], relevance: 0 }; From 2c4ba66c707c832b7fcdcdc993309dfd2464dc98 Mon Sep 17 00:00:00 2001 From: 0xflotus <0xflotus@gmail.com> Date: Wed, 13 May 2020 20:42:13 +0200 Subject: [PATCH 17/24] Update java.js --- src/languages/java.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/languages/java.js b/src/languages/java.js index ce21af7c1a..467368f63d 100644 --- a/src/languages/java.js +++ b/src/languages/java.js @@ -36,7 +36,6 @@ export default function (hljs) { { begin: '\\b[\\d]+[\\.][\\d_]*[\\d]+[dDfF]?' }, // floating point { begin: '\\b0[xX]([a-fA-F0-9]+[a-fA-F0-9_]*[a-fA-F0-9]+)[pP]?[\\d]*[lL]?' }, // hexadecimal { begin: '\\b0[xX]((([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)?[\\.]?)?([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)?[pP][+-]?([\\d]+)[dDfF]?|([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+))[fFdD]?' }, // hexadecimal floating point - { begin: '\\b[0-9]?(\\.)?[0-9]' }, ], relevance: 0 }; From ec682f64c87d3d75b7341b2bf3b1a970d3d7ef2a Mon Sep 17 00:00:00 2001 From: 0xflotus <0xflotus@gmail.com> Date: Wed, 13 May 2020 20:44:20 +0200 Subject: [PATCH 18/24] Update numbers.txt --- test/markup/java/numbers.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/markup/java/numbers.txt b/test/markup/java/numbers.txt index 2b85c183db..dccac2b515 100644 --- a/test/markup/java/numbers.txt +++ b/test/markup/java/numbers.txt @@ -28,3 +28,5 @@ byte mask = 0xa; float f = 5.4; float f = 2e3; int n = 0b1; +float f = 3.; +float f = .2; From 535f04f2464d1711f71edc90b3341d44b50b107d Mon Sep 17 00:00:00 2001 From: 0xflotus <0xflotus@gmail.com> Date: Wed, 13 May 2020 20:44:54 +0200 Subject: [PATCH 19/24] Update numbers.expect.txt --- test/markup/java/numbers.expect.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/markup/java/numbers.expect.txt b/test/markup/java/numbers.expect.txt index 53f7d1f26f..438a73ab09 100644 --- a/test/markup/java/numbers.expect.txt +++ b/test/markup/java/numbers.expect.txt @@ -28,3 +28,5 @@ i = 0x1.p2; float f = 5.4; float f = 2e3; int n = 0b1; +float f = 3.; +float f = .2; From 57278e6b0c4a3c2c25cb3bbfaf1151702d7d08cc Mon Sep 17 00:00:00 2001 From: Josh Goebel Date: Fri, 22 May 2020 11:06:51 -0400 Subject: [PATCH 20/24] restructure the Java regex rules --- src/languages/java.js | 46 ++++++++++++++++++++++++----- src/lib/regex.js | 20 +++++++++++++ test/markup/java/numbers.expect.txt | 5 +++- test/markup/java/numbers.txt | 5 +++- 4 files changed, 66 insertions(+), 10 deletions(-) diff --git a/src/languages/java.js b/src/languages/java.js index 467368f63d..f23e724be6 100644 --- a/src/languages/java.js +++ b/src/languages/java.js @@ -5,6 +5,8 @@ Category: common, enterprise Website: https://www.java.com/ */ +import * as regex from "../lib/regex"; + export default function (hljs) { var JAVA_IDENT_RE = '[\u00C0-\u02B8a-zA-Z_$][\u00C0-\u02B8a-zA-Z_$0-9]*'; var GENERIC_IDENT_RE = JAVA_IDENT_RE + '(<' + JAVA_IDENT_RE + '(\\s*,\\s*' + JAVA_IDENT_RE + ')*>)?'; @@ -25,17 +27,45 @@ export default function (hljs) { contains: ["self"] // allow nested () inside our annotation }, ] - } + }; + /** + * A given sequence, possibly with underscores + * @type {(s: string | RegExp) => string} */ + var SEQUENCE_OF = (seq) => regex.concat('[', seq, ']+([', seq, '_]*[', seq, ']+)?'); var JAVA_NUMBER_MODE = { className: 'number', variants: [ - { begin: '\\b(0[bB][01]+([01_]*[01]+)?)[lL]?' }, // binary - { begin: '\\b(0[0-7]+([0-7_]*[0-7]+)?)[dDfFlL]?' }, // octal - { begin: '\\b[\\d]+([\\d_]*[\\d]+)?[lL]?' }, // decimal - { begin: '\\b([\\d]*[\\.][\\d_]*[\\d]+|[\\d]+[\\d_]*)[eE][+-]?[\\d]+[dDfF]?' }, // scientific notation - { begin: '\\b[\\d]+[\\.][\\d_]*[\\d]+[dDfF]?' }, // floating point - { begin: '\\b0[xX]([a-fA-F0-9]+[a-fA-F0-9_]*[a-fA-F0-9]+)[pP]?[\\d]*[lL]?' }, // hexadecimal - { begin: '\\b0[xX]((([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)?[\\.]?)?([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)?[pP][+-]?([\\d]+)[dDfF]?|([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+))[fFdD]?' }, // hexadecimal floating point + { begin: `\\b(0[bB]${SEQUENCE_OF('01')})[lL]?` }, // binary + { begin: `\\b(0${SEQUENCE_OF('0-7')})[dDfFlL]?` }, // octal + { + begin: regex.concat( + /\b0[xX]/, + regex.either( + regex.concat(SEQUENCE_OF('a-fA-F0-9'), /\./, SEQUENCE_OF('a-fA-F0-9')), + regex.concat(SEQUENCE_OF('a-fA-F0-9'), /\.?/), + regex.concat(/\./, SEQUENCE_OF('a-fA-F0-9')), + ), + /([pP][+-]?(\d+))?/, + /[fFdDlL]?/ // decimal & fp mixed for simplicity + ) + }, + // scientific notation + { begin: regex.concat( + /\b/, + regex.either( + /\d*\.[\d_]*\d+/, // 3.3e2 + /\d+[\d_]*/ // 3e2 + ), + /[eE][+-]?[\d]+[dDfF]?/) + }, + // decimal & fp mixed for simplicity + { begin: regex.concat( + /\b/, + SEQUENCE_OF(/\d/), + regex.optional(/\.?/), + regex.optional(SEQUENCE_OF(/\d/)), + /[dDfFlL]?/) + } ], relevance: 0 }; diff --git a/src/lib/regex.js b/src/lib/regex.js index 1727cb57b9..a607d7f968 100644 --- a/src/lib/regex.js +++ b/src/lib/regex.js @@ -25,6 +25,14 @@ export function lookahead(re) { return concat('(?=', re, ')'); } +/** + * @param {RegExp | string } re + * @returns {string} + */ +export function optional(re) { + return concat('(', re, ')?'); +} + /** * @param {(RegExp | string)[] } args * @returns {string} @@ -34,6 +42,18 @@ export function concat(...args) { return joined; } +/** + * Any of the passed expresssions may match + * + * Creates a huge this | this | that | that match + * @param {(RegExp | string)[] } args + * @returns {string} + */ +export function either(...args) { + const joined = '(' + args.map((x) => source(x)).join("|") + ")"; + return joined; +} + /** * @param {RegExp} re * @returns {number} diff --git a/test/markup/java/numbers.expect.txt b/test/markup/java/numbers.expect.txt index 438a73ab09..7ba247f209 100644 --- a/test/markup/java/numbers.expect.txt +++ b/test/markup/java/numbers.expect.txt @@ -29,4 +29,7 @@ i = 0x1.p2; float f = 2e3; int n = 0b1; float f = 3.; -float f = .2; +f = 3_3.; +// TODO: in the future +// float f = .2; +// f = .2_022; diff --git a/test/markup/java/numbers.txt b/test/markup/java/numbers.txt index dccac2b515..e31545f70e 100644 --- a/test/markup/java/numbers.txt +++ b/test/markup/java/numbers.txt @@ -29,4 +29,7 @@ float f = 5.4; float f = 2e3; int n = 0b1; float f = 3.; -float f = .2; +f = 3_3.; +// TODO: in the future +// float f = .2; +// f = .2_022; From 1f9d80ddb7a536d1aeda21d3a596b1404dd543fe Mon Sep 17 00:00:00 2001 From: Josh Goebel Date: Fri, 22 May 2020 11:11:41 -0400 Subject: [PATCH 21/24] improve naming --- src/languages/java.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/languages/java.js b/src/languages/java.js index f23e724be6..2311c3c3f1 100644 --- a/src/languages/java.js +++ b/src/languages/java.js @@ -31,19 +31,19 @@ export default function (hljs) { /** * A given sequence, possibly with underscores * @type {(s: string | RegExp) => string} */ - var SEQUENCE_OF = (seq) => regex.concat('[', seq, ']+([', seq, '_]*[', seq, ']+)?'); + var SEQUENCE_ALLOWING_UNDERSCORES = (seq) => regex.concat('[', seq, ']+([', seq, '_]*[', seq, ']+)?'); var JAVA_NUMBER_MODE = { className: 'number', variants: [ - { begin: `\\b(0[bB]${SEQUENCE_OF('01')})[lL]?` }, // binary - { begin: `\\b(0${SEQUENCE_OF('0-7')})[dDfFlL]?` }, // octal + { begin: `\\b(0[bB]${SEQUENCE_ALLOWING_UNDERSCORES('01')})[lL]?` }, // binary + { begin: `\\b(0${SEQUENCE_ALLOWING_UNDERSCORES('0-7')})[dDfFlL]?` }, // octal { begin: regex.concat( /\b0[xX]/, regex.either( - regex.concat(SEQUENCE_OF('a-fA-F0-9'), /\./, SEQUENCE_OF('a-fA-F0-9')), - regex.concat(SEQUENCE_OF('a-fA-F0-9'), /\.?/), - regex.concat(/\./, SEQUENCE_OF('a-fA-F0-9')), + regex.concat(SEQUENCE_ALLOWING_UNDERSCORES('a-fA-F0-9'), /\./, SEQUENCE_ALLOWING_UNDERSCORES('a-fA-F0-9')), + regex.concat(SEQUENCE_ALLOWING_UNDERSCORES('a-fA-F0-9'), /\.?/), + regex.concat(/\./, SEQUENCE_ALLOWING_UNDERSCORES('a-fA-F0-9')), ), /([pP][+-]?(\d+))?/, /[fFdDlL]?/ // decimal & fp mixed for simplicity @@ -61,9 +61,9 @@ export default function (hljs) { // decimal & fp mixed for simplicity { begin: regex.concat( /\b/, - SEQUENCE_OF(/\d/), + SEQUENCE_ALLOWING_UNDERSCORES(/\d/), regex.optional(/\.?/), - regex.optional(SEQUENCE_OF(/\d/)), + regex.optional(SEQUENCE_ALLOWING_UNDERSCORES(/\d/)), /[dDfFlL]?/) } ], From ba0ca7fc68e784347cf117b4d6727fa6447ba3ae Mon Sep 17 00:00:00 2001 From: Josh Goebel Date: Mon, 8 Jun 2020 10:19:45 -0400 Subject: [PATCH 22/24] take Egors comments into consideration --- src/languages/java.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/languages/java.js b/src/languages/java.js index 2311c3c3f1..2b8376d41f 100644 --- a/src/languages/java.js +++ b/src/languages/java.js @@ -53,8 +53,8 @@ export default function (hljs) { { begin: regex.concat( /\b/, regex.either( - /\d*\.[\d_]*\d+/, // 3.3e2 - /\d+[\d_]*/ // 3e2 + regex.concat(/\d*\./, SEQUENCE_ALLOWING_UNDERSCORES("\\d")), // .3, 3.3, 3.3_3 + SEQUENCE_ALLOWING_UNDERSCORES("\\d") // 3, 3_3 ), /[eE][+-]?[\d]+[dDfF]?/) }, From 06b311e71c810d87d4191fbde41e2eb7310a8b07 Mon Sep 17 00:00:00 2001 From: Josh Goebel Date: Mon, 8 Jun 2020 10:21:54 -0400 Subject: [PATCH 23/24] fix spacing --- src/languages/java.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/java.js b/src/languages/java.js index 2b8376d41f..f453062328 100644 --- a/src/languages/java.js +++ b/src/languages/java.js @@ -7,7 +7,7 @@ Website: https://www.java.com/ import * as regex from "../lib/regex"; -export default function (hljs) { +export default function(hljs) { var JAVA_IDENT_RE = '[\u00C0-\u02B8a-zA-Z_$][\u00C0-\u02B8a-zA-Z_$0-9]*'; var GENERIC_IDENT_RE = JAVA_IDENT_RE + '(<' + JAVA_IDENT_RE + '(\\s*,\\s*' + JAVA_IDENT_RE + ')*>)?'; var KEYWORDS = From 8cf665b1ed400e76ee01efcc1c2a4b7871fad609 Mon Sep 17 00:00:00 2001 From: Josh Goebel Date: Mon, 8 Jun 2020 10:22:33 -0400 Subject: [PATCH 24/24] fix linting --- src/languages/java.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/languages/java.js b/src/languages/java.js index f453062328..45b314c1a3 100644 --- a/src/languages/java.js +++ b/src/languages/java.js @@ -10,8 +10,7 @@ import * as regex from "../lib/regex"; export default function(hljs) { var JAVA_IDENT_RE = '[\u00C0-\u02B8a-zA-Z_$][\u00C0-\u02B8a-zA-Z_$0-9]*'; var GENERIC_IDENT_RE = JAVA_IDENT_RE + '(<' + JAVA_IDENT_RE + '(\\s*,\\s*' + JAVA_IDENT_RE + ')*>)?'; - var KEYWORDS = - 'false synchronized int abstract float private char boolean var static null if const ' + + var KEYWORDS = 'false synchronized int abstract float private char boolean var static null if const ' + 'for true while long strictfp finally protected import native final void ' + 'enum else break transient catch instanceof byte super volatile case assert short ' + 'package default double public try this switch continue throws protected public private ' +