From adf9c44949504512002cff293641225b31ec568a Mon Sep 17 00:00:00 2001 From: Niki Roo Date: Fri, 4 Mar 2016 11:51:14 +0100 Subject: [PATCH] Small fix in the VCF parser (now a bit quicker) and --help (--noutfa does not exist anymore) --- .../nikiroo/jvcard/parsers/Vcard21Parser.java | 18 +++++++++++------- src/be/nikiroo/jvcard/tui/Main.java | 1 - src/be/nikiroo/jvcard/tui/StringUtils.java | 12 ++++++++++-- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/be/nikiroo/jvcard/parsers/Vcard21Parser.java b/src/be/nikiroo/jvcard/parsers/Vcard21Parser.java index f2fd07c..6d8b2ba 100644 --- a/src/be/nikiroo/jvcard/parsers/Vcard21Parser.java +++ b/src/be/nikiroo/jvcard/parsers/Vcard21Parser.java @@ -64,8 +64,9 @@ public class Vcard21Parser { String group = ""; if (line.contains(":")) { - String rest = line.split(":")[0]; - value = line.substring(rest.length() + 1); + int colIndex = line.indexOf(':'); + String rest = line.substring(0, colIndex); + value = line.substring(colIndex + 1); if (rest.contains(";")) { String tab[] = rest.split(";"); @@ -73,9 +74,11 @@ public class Vcard21Parser { for (int i = 1; i < tab.length; i++) { if (tab[i].contains("=")) { - String tname = tab[i].split("=")[0]; - String tvalue = tab[i].substring(tname - .length() + 1); + int equIndex = tab[i].indexOf('='); + String tname = tab[i] + .substring(0, equIndex); + String tvalue = tab[i] + .substring(equIndex + 1); types.add(new TypeInfo(tname, tvalue)); } else { types.add(new TypeInfo(tab[i], "")); @@ -89,8 +92,9 @@ public class Vcard21Parser { } if (name.contains(".")) { - group = name.split("\\.")[0]; - name = name.substring(group.length() + 1); + int dotIndex = name.indexOf('.'); + group = name.substring(0, dotIndex); + name = name.substring(dotIndex + 1); } datas.add(new Data(types, name, value, group)); diff --git a/src/be/nikiroo/jvcard/tui/Main.java b/src/be/nikiroo/jvcard/tui/Main.java index fd6d7de..4c3f762 100644 --- a/src/be/nikiroo/jvcard/tui/Main.java +++ b/src/be/nikiroo/jvcard/tui/Main.java @@ -89,7 +89,6 @@ public class Main { + "\t--tui: force pure text mode even if swing treminal is available\n" + "\t--gui: force swing terminal mode\n" + "\t--noutf: force non-utf8 mode if you need it\n" - + "\t--noutfa: force non-utf8 and no accents mode if you need it\n" + "everyhing else is either a file to open or a directory to open\n" + "(we will only open 1st level files in given directories)"); return; diff --git a/src/be/nikiroo/jvcard/tui/StringUtils.java b/src/be/nikiroo/jvcard/tui/StringUtils.java index 3f5d22b..3829226 100644 --- a/src/be/nikiroo/jvcard/tui/StringUtils.java +++ b/src/be/nikiroo/jvcard/tui/StringUtils.java @@ -9,7 +9,6 @@ import com.googlecode.lanterna.gui2.LinearLayout.Alignment; public class StringUtils { static private Pattern marks = Pattern .compile("[\\p{InCombiningDiacriticalMarks}\\p{IsLm}\\p{IsSk}]+"); - static private Pattern notAscii = Pattern.compile("[^\\p{ASCII}]+"); /** * Fix the size of the given {@link String} either with space-padding or by @@ -122,7 +121,16 @@ public class StringUtils { input = Normalizer.normalize(input, Form.NFKC); if (!allowUnicode) { - input = notAscii.matcher(input).replaceAll(""); + StringBuilder builder = new StringBuilder(); + for (int index = 0; index < input.length(); index++) { + char car = input.charAt(index); + // displayable chars in ASCII are in the range 32<->255, + // except DEL (127) + if (car >= 32 && car <= 255 && car != 127) { + builder.append(car); + } + } + input = builder.toString(); } return input; -- 2.27.0