From 6116228abcc01458abc7e190a53d463fe4dc45b1 Mon Sep 17 00:00:00 2001 From: mattirn Date: Fri, 18 Oct 2019 13:13:24 +0200 Subject: [PATCH 1/8] DefaultHistory: check index range before getting record, fixes #450 --- .../java/org/jline/reader/impl/history/DefaultHistory.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/reader/src/main/java/org/jline/reader/impl/history/DefaultHistory.java b/reader/src/main/java/org/jline/reader/impl/history/DefaultHistory.java index 1b1f0a0c8..bbccecb3e 100644 --- a/reader/src/main/java/org/jline/reader/impl/history/DefaultHistory.java +++ b/reader/src/main/java/org/jline/reader/impl/history/DefaultHistory.java @@ -344,7 +344,11 @@ private String format(Entry entry) { } public String get(final int index) { - return items.get(index - offset).line(); + int idx = index - offset; + if (idx >= items.size() || idx < 0) { + throw new IllegalArgumentException("IndexOutOfBounds: Index:" + idx +", Size:" + items.size()); + } + return items.get(idx).line(); } @Override From 68234fc11419439777fd45df76f1f25d5ecaf87f Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Fri, 25 Oct 2019 09:44:45 +0200 Subject: [PATCH 2/8] Exception when parsing infocmp number "0", fixes #451 --- terminal/src/main/java/org/jline/utils/InfoCmp.java | 4 +++- terminal/src/test/java/org/jline/utils/InfoCmpTest.java | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/terminal/src/main/java/org/jline/utils/InfoCmp.java b/terminal/src/main/java/org/jline/utils/InfoCmp.java index 8ba47198d..eb567b972 100644 --- a/terminal/src/main/java/org/jline/utils/InfoCmp.java +++ b/terminal/src/main/java/org/jline/utils/InfoCmp.java @@ -576,7 +576,9 @@ public static void parseInfoCmp( String key = cap.substring(0, index); String val = cap.substring(index + 1); int iVal; - if (val.startsWith("0x")) { + if ("0".equals(val)) { + iVal = 0; + } else if (val.startsWith("0x")) { iVal = Integer.parseInt(val.substring(2), 16); } else if (val.startsWith("0")) { iVal = Integer.parseInt(val.substring(1), 8); diff --git a/terminal/src/test/java/org/jline/utils/InfoCmpTest.java b/terminal/src/test/java/org/jline/utils/InfoCmpTest.java index 8cf71544a..84861edad 100644 --- a/terminal/src/test/java/org/jline/utils/InfoCmpTest.java +++ b/terminal/src/test/java/org/jline/utils/InfoCmpTest.java @@ -59,10 +59,11 @@ public void testInfoCmpWithHexa() { Map strings = new HashMap<>(); String infocmp = "xterm-256color|xterm with 256 colors,\n" + "\tam, bce, ccc, km, mc5i, mir, msgr, npc, xenl,\n" + - "\tcolors#0x100, cols#80, it#8, lines#24, pairs#0x7fff,\n" + + "\tcolors#0x100, cols#010, it#0, lines#24, pairs#0x7fff,\n" + "\tacsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,\n" + "\tbel=^G, blink=\\E[5m, bold=\\E[1m, cbt=\\E[Z, civis=\\E[?25l\n"; InfoCmp.parseInfoCmp(infocmp, bools, ints, strings); + assertEquals(8, (int) ints.get(Capability.columns)); assertEquals(0x100, (int) ints.get(Capability.max_colors)); assertEquals(0x7fff, (int) ints.get(Capability.max_pairs)); } From 5923179584de53867fb574afb5a43d207e9297dc Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Fri, 25 Oct 2019 09:45:19 +0200 Subject: [PATCH 3/8] Add missing dependencies to ensure correct build order in multithreaded build --- jline/pom.xml | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/jline/pom.xml b/jline/pom.xml index 4aefa7fbb..7663931b9 100644 --- a/jline/pom.xml +++ b/jline/pom.xml @@ -58,6 +58,46 @@ jsr305 true + + org.jline + jline-terminal + provided + + + org.jline + jline-terminal-jansi + provided + + + org.jline + jline-terminal-jna + provided + + + org.jline + jline-reader + provided + + + org.jline + jline-builtins + provided + + + org.jline + jline-remote-ssh + provided + + + org.jline + jline-remote-telnet + provided + + + org.jline + jline-style + provided + From 10751890388d54ef7340bda851f80ec25475f180 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Fri, 25 Oct 2019 09:52:54 +0200 Subject: [PATCH 4/8] Upgrade the javadoc maven plugin to avoid exception when building with newer JDK --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 52f152264..952aacf65 100644 --- a/pom.xml +++ b/pom.xml @@ -420,7 +420,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.0.0 + 3.1.1 -Xdoclint:none -notimestamp From 60325db2d48ce370e91d94d5f4a7a9d7af1b8f42 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Fri, 25 Oct 2019 10:10:54 +0200 Subject: [PATCH 5/8] [maven-release-plugin] prepare release jline-parent-3.13.1 --- builtins/pom.xml | 2 +- demo/pom.xml | 2 +- jline/pom.xml | 2 +- pom.xml | 4 ++-- reader/pom.xml | 2 +- remote-ssh/pom.xml | 2 +- remote-telnet/pom.xml | 2 +- style/pom.xml | 2 +- terminal-jansi/pom.xml | 2 +- terminal-jna/pom.xml | 2 +- terminal/pom.xml | 2 +- 11 files changed, 12 insertions(+), 12 deletions(-) diff --git a/builtins/pom.xml b/builtins/pom.xml index f0eb830bc..3443f042c 100644 --- a/builtins/pom.xml +++ b/builtins/pom.xml @@ -16,7 +16,7 @@ org.jline jline-parent - 3.13.1-SNAPSHOT + 3.13.1 jline-builtins diff --git a/demo/pom.xml b/demo/pom.xml index b481b042d..aee5048e2 100644 --- a/demo/pom.xml +++ b/demo/pom.xml @@ -16,7 +16,7 @@ org.jline jline-parent - 3.13.1-SNAPSHOT + 3.13.1 jline-demo diff --git a/jline/pom.xml b/jline/pom.xml index 7663931b9..c06443daf 100644 --- a/jline/pom.xml +++ b/jline/pom.xml @@ -16,7 +16,7 @@ org.jline jline-parent - 3.13.1-SNAPSHOT + 3.13.1 jline diff --git a/pom.xml b/pom.xml index 952aacf65..7923d225b 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ jline-parent JLine Parent JLine - 3.13.1-SNAPSHOT + 3.13.1 pom @@ -38,7 +38,7 @@ scm:git:git://github.com/jline/jline3.git scm:git:ssh://git@github.com/jline/jline3.git http://github.com/jline/jline3 - HEAD + jline-parent-3.13.1 diff --git a/reader/pom.xml b/reader/pom.xml index 7609abe40..1f3a84eb3 100644 --- a/reader/pom.xml +++ b/reader/pom.xml @@ -16,7 +16,7 @@ org.jline jline-parent - 3.13.1-SNAPSHOT + 3.13.1 jline-reader diff --git a/remote-ssh/pom.xml b/remote-ssh/pom.xml index 496f6a94b..e34f7bc05 100644 --- a/remote-ssh/pom.xml +++ b/remote-ssh/pom.xml @@ -16,7 +16,7 @@ org.jline jline-parent - 3.13.1-SNAPSHOT + 3.13.1 jline-remote-ssh diff --git a/remote-telnet/pom.xml b/remote-telnet/pom.xml index e7c0a42dd..aacde4e5c 100644 --- a/remote-telnet/pom.xml +++ b/remote-telnet/pom.xml @@ -16,7 +16,7 @@ org.jline jline-parent - 3.13.1-SNAPSHOT + 3.13.1 jline-remote-telnet diff --git a/style/pom.xml b/style/pom.xml index b4a62adaa..297319a42 100644 --- a/style/pom.xml +++ b/style/pom.xml @@ -16,7 +16,7 @@ org.jline jline-parent - 3.13.1-SNAPSHOT + 3.13.1 jline-style diff --git a/terminal-jansi/pom.xml b/terminal-jansi/pom.xml index 2e6daef6e..81b989601 100644 --- a/terminal-jansi/pom.xml +++ b/terminal-jansi/pom.xml @@ -16,7 +16,7 @@ org.jline jline-parent - 3.13.1-SNAPSHOT + 3.13.1 jline-terminal-jansi diff --git a/terminal-jna/pom.xml b/terminal-jna/pom.xml index 08fa8f189..bc52d761b 100644 --- a/terminal-jna/pom.xml +++ b/terminal-jna/pom.xml @@ -16,7 +16,7 @@ org.jline jline-parent - 3.13.1-SNAPSHOT + 3.13.1 jline-terminal-jna diff --git a/terminal/pom.xml b/terminal/pom.xml index 90e6a1011..eddc1491e 100644 --- a/terminal/pom.xml +++ b/terminal/pom.xml @@ -16,7 +16,7 @@ org.jline jline-parent - 3.13.1-SNAPSHOT + 3.13.1 jline-terminal From 0fb4a53b984165a9dd443d2eb18773950446cefc Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Fri, 25 Oct 2019 10:15:20 +0200 Subject: [PATCH 6/8] [maven-release-plugin] prepare for next development iteration --- builtins/pom.xml | 2 +- demo/pom.xml | 2 +- jline/pom.xml | 2 +- pom.xml | 4 ++-- reader/pom.xml | 2 +- remote-ssh/pom.xml | 2 +- remote-telnet/pom.xml | 2 +- style/pom.xml | 2 +- terminal-jansi/pom.xml | 2 +- terminal-jna/pom.xml | 2 +- terminal/pom.xml | 2 +- 11 files changed, 12 insertions(+), 12 deletions(-) diff --git a/builtins/pom.xml b/builtins/pom.xml index 3443f042c..94bd6ed97 100644 --- a/builtins/pom.xml +++ b/builtins/pom.xml @@ -16,7 +16,7 @@ org.jline jline-parent - 3.13.1 + 3.13.2-SNAPSHOT jline-builtins diff --git a/demo/pom.xml b/demo/pom.xml index aee5048e2..304752e25 100644 --- a/demo/pom.xml +++ b/demo/pom.xml @@ -16,7 +16,7 @@ org.jline jline-parent - 3.13.1 + 3.13.2-SNAPSHOT jline-demo diff --git a/jline/pom.xml b/jline/pom.xml index c06443daf..ab16a06c0 100644 --- a/jline/pom.xml +++ b/jline/pom.xml @@ -16,7 +16,7 @@ org.jline jline-parent - 3.13.1 + 3.13.2-SNAPSHOT jline diff --git a/pom.xml b/pom.xml index 7923d225b..5e3cbac19 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ jline-parent JLine Parent JLine - 3.13.1 + 3.13.2-SNAPSHOT pom @@ -38,7 +38,7 @@ scm:git:git://github.com/jline/jline3.git scm:git:ssh://git@github.com/jline/jline3.git http://github.com/jline/jline3 - jline-parent-3.13.1 + HEAD diff --git a/reader/pom.xml b/reader/pom.xml index 1f3a84eb3..d2f80e4b5 100644 --- a/reader/pom.xml +++ b/reader/pom.xml @@ -16,7 +16,7 @@ org.jline jline-parent - 3.13.1 + 3.13.2-SNAPSHOT jline-reader diff --git a/remote-ssh/pom.xml b/remote-ssh/pom.xml index e34f7bc05..b597602b2 100644 --- a/remote-ssh/pom.xml +++ b/remote-ssh/pom.xml @@ -16,7 +16,7 @@ org.jline jline-parent - 3.13.1 + 3.13.2-SNAPSHOT jline-remote-ssh diff --git a/remote-telnet/pom.xml b/remote-telnet/pom.xml index aacde4e5c..06a76be56 100644 --- a/remote-telnet/pom.xml +++ b/remote-telnet/pom.xml @@ -16,7 +16,7 @@ org.jline jline-parent - 3.13.1 + 3.13.2-SNAPSHOT jline-remote-telnet diff --git a/style/pom.xml b/style/pom.xml index 297319a42..7b1efcffe 100644 --- a/style/pom.xml +++ b/style/pom.xml @@ -16,7 +16,7 @@ org.jline jline-parent - 3.13.1 + 3.13.2-SNAPSHOT jline-style diff --git a/terminal-jansi/pom.xml b/terminal-jansi/pom.xml index 81b989601..a96f13477 100644 --- a/terminal-jansi/pom.xml +++ b/terminal-jansi/pom.xml @@ -16,7 +16,7 @@ org.jline jline-parent - 3.13.1 + 3.13.2-SNAPSHOT jline-terminal-jansi diff --git a/terminal-jna/pom.xml b/terminal-jna/pom.xml index bc52d761b..7b6fe4003 100644 --- a/terminal-jna/pom.xml +++ b/terminal-jna/pom.xml @@ -16,7 +16,7 @@ org.jline jline-parent - 3.13.1 + 3.13.2-SNAPSHOT jline-terminal-jna diff --git a/terminal/pom.xml b/terminal/pom.xml index eddc1491e..b5f3d2f47 100644 --- a/terminal/pom.xml +++ b/terminal/pom.xml @@ -16,7 +16,7 @@ org.jline jline-parent - 3.13.1 + 3.13.2-SNAPSHOT jline-terminal From 7a9396da2fc1f2c63528928da1500056f38fecdc Mon Sep 17 00:00:00 2001 From: mattirn Date: Fri, 25 Oct 2019 18:24:42 +0200 Subject: [PATCH 7/8] Nano: make SyntaxHighlighter public --- .../main/java/org/jline/builtins/Nano.java | 54 +++++++++++++++++-- 1 file changed, 51 insertions(+), 3 deletions(-) diff --git a/builtins/src/main/java/org/jline/builtins/Nano.java b/builtins/src/main/java/org/jline/builtins/Nano.java index 447a7c309..c09ce5df0 100644 --- a/builtins/src/main/java/org/jline/builtins/Nano.java +++ b/builtins/src/main/java/org/jline/builtins/Nano.java @@ -1419,16 +1419,16 @@ void replaceFromCursor(int chars, String string) { } } - protected static class SyntaxHighlighter { + public static class SyntaxHighlighter { private List rules = new ArrayList<>(); private int ruleStartId = 0; private SyntaxHighlighter() {} - public static SyntaxHighlighter build(List syntaxFiles, String file, String syntaxName) { + protected static SyntaxHighlighter build(List syntaxFiles, String file, String syntaxName) { SyntaxHighlighter out = new SyntaxHighlighter(); List defaultRules = new ArrayList<>(); - if (file != null && (syntaxName == null || (syntaxName != null && !syntaxName.equals("none")))) { + if (syntaxName == null || (syntaxName != null && !syntaxName.equals("none"))) { for (Path p: syntaxFiles) { NanorcParser parser = new NanorcParser(p, syntaxName, file); try { @@ -1447,6 +1447,46 @@ public static SyntaxHighlighter build(List syntaxFiles, String file, Strin return out; } + /** + * Build SyntaxHighlighter + * + * @param nanorc Path of nano config file jnanorc + * @param syntaxName syntax name e.g 'Java' + * @return SyntaxHighlighter + */ + public static SyntaxHighlighter build(Path nanorc, String syntaxName) { + SyntaxHighlighter out = new SyntaxHighlighter(); + List syntaxFiles = new ArrayList<>(); + try { + BufferedReader reader = new BufferedReader(new FileReader(nanorc.toFile())); + String line = reader.readLine(); + while (line != null) { + line = line.trim(); + if (line.length() > 0 && !line.startsWith("#")) { + List parts = Parser.split(line); + if (parts.get(0).equals("include")) { + if (parts.get(1).contains("*") || parts.get(1).contains("?")) { + PathMatcher pathMatcher = FileSystems + .getDefault().getPathMatcher("glob:" + parts.get(1)); + Files.find( + Paths.get(new File(parts.get(1)).getParent()), + Integer.MAX_VALUE, + (path, f) -> pathMatcher.matches(path)) + .forEach(p -> syntaxFiles.add(p)); + } else { + syntaxFiles.add(Paths.get(parts.get(1))); + } + } + } + line = reader.readLine(); + } + reader.close(); + out = build(syntaxFiles, null, syntaxName); + } catch (Exception e) { + } + return out; + } + private void addRules(List rules) { this.rules.addAll(rules); } @@ -1455,6 +1495,10 @@ public void reset() { ruleStartId = 0; } + public AttributedString highlight(String string) { + return highlight(new AttributedString(string)); + } + public AttributedString highlight(AttributedStringBuilder asb) { return highlight(asb.toAttributedString()); } @@ -1584,6 +1628,10 @@ private static class NanorcParser { private List highlightRules = new ArrayList<>(); private String syntaxName; + public NanorcParser(Path file, String name) { + this(file, name, null); + } + public NanorcParser(Path file, String name, String target) { this.file = file.toFile(); this.name = name; From da89fc4c22429794fc662f6cef7195395c664337 Mon Sep 17 00:00:00 2001 From: mattirn Date: Sun, 27 Oct 2019 17:59:12 +0100 Subject: [PATCH 8/8] Nano SyntaxHighlighter: extended style syntax with styles bold, faint, italic, ... --- .../main/java/org/jline/builtins/Nano.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/builtins/src/main/java/org/jline/builtins/Nano.java b/builtins/src/main/java/org/jline/builtins/Nano.java index c09ce5df0..0bf5131ef 100644 --- a/builtins/src/main/java/org/jline/builtins/Nano.java +++ b/builtins/src/main/java/org/jline/builtins/Nano.java @@ -1734,6 +1734,26 @@ private void addHighlightRule(List parts, boolean caseInsensitive) { if (bcolor != null) { style = style.background(bcolor); } + // extended nanorc.. + if (styleStrings.length > 2) { + if (styleStrings[2].equals("blink")) { + style = style.blink(); + } else if (styleStrings[2].equals("bold")) { + style = style.bold(); + } else if (styleStrings[2].equals("conceal")) { + style = style.conceal(); + } else if (styleStrings[2].equals("faint")) { + style = style.faint(); + } else if (styleStrings[2].equals("hidden")) { + style = style.hidden(); + } else if (styleStrings[2].equals("inverse")) { + style = style.inverse(); + } else if (styleStrings[2].equals("italic")) { + style = style.italic(); + } else if (styleStrings[2].equals("underline")) { + style = style.underline(); + } + } if (HighlightRule.evalRuleType(parts) == HighlightRule.RuleType.PATTERN) { for (int i = 2; i < parts.size(); i++) {