From 11a113aa62f7d187fe1ad39ba35e4c60c2a2a2f3 Mon Sep 17 00:00:00 2001 From: Abraham Polk Date: Sat, 30 Mar 2019 19:54:42 -0400 Subject: [PATCH 1/3] QuotedStringTokenizer now does not unquote --- .../org/jabref/logic/util/strings/QuotedStringTokenizer.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/org/jabref/logic/util/strings/QuotedStringTokenizer.java b/src/main/java/org/jabref/logic/util/strings/QuotedStringTokenizer.java index 720d6fe12e2..07d8e2d6af8 100644 --- a/src/main/java/org/jabref/logic/util/strings/QuotedStringTokenizer.java +++ b/src/main/java/org/jabref/logic/util/strings/QuotedStringTokenizer.java @@ -41,6 +41,7 @@ public String nextToken() { c = content.charAt(index); if (c == quoteChar) { // next is quoted ++index; + stringBuilder.append(c); if (index < contentLength) { stringBuilder.append(content.charAt(index)); // ignore for delimiter search! From 55fa8f6aaf202fa0cc0ef31bd825acb508aed4e7 Mon Sep 17 00:00:00 2001 From: Abraham Polk Date: Wed, 3 Apr 2019 18:28:02 -0400 Subject: [PATCH 2/3] Unquote to fix test failures --- .../jabref/logic/importer/util/GroupsParser.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/jabref/logic/importer/util/GroupsParser.java b/src/main/java/org/jabref/logic/importer/util/GroupsParser.java index ca04fafd0ca..93cff41ae63 100644 --- a/src/main/java/org/jabref/logic/importer/util/GroupsParser.java +++ b/src/main/java/org/jabref/logic/importer/util/GroupsParser.java @@ -155,8 +155,8 @@ private static AbstractGroup automaticKeywordGroupFromString(String string) { String name = StringUtil.unquote(tok.nextToken(), MetadataSerializationConfiguration.GROUP_QUOTE_CHAR); GroupHierarchyType context = GroupHierarchyType.getByNumberOrDefault(Integer.parseInt(tok.nextToken())); String field = StringUtil.unquote(tok.nextToken(), MetadataSerializationConfiguration.GROUP_QUOTE_CHAR); - Character delimiter = tok.nextToken().charAt(0); - Character hierarchicalDelimiter = tok.nextToken().charAt(0); + Character delimiter = StringUtil.unquote(tok.nextToken(), MetadataSerializationConfiguration.GROUP_QUOTE_CHAR).charAt(0); + Character hierarchicalDelimiter = StringUtil.unquote(tok.nextToken(), MetadataSerializationConfiguration.GROUP_QUOTE_CHAR).charAt(0); AutomaticKeywordGroup newGroup = new AutomaticKeywordGroup(name, context, field, delimiter, hierarchicalDelimiter); addGroupDetails(tok, newGroup); return newGroup; @@ -198,7 +198,7 @@ private static ExplicitGroup explicitGroupFromString(String input, Character key QuotedStringTokenizer tok = new QuotedStringTokenizer(input.substring(MetadataSerializationConfiguration.EXPLICIT_GROUP_ID.length()), MetadataSerializationConfiguration.GROUP_UNIT_SEPARATOR, MetadataSerializationConfiguration.GROUP_QUOTE_CHAR); - String name = tok.nextToken(); + String name = StringUtil.unquote(tok.nextToken(), MetadataSerializationConfiguration.GROUP_QUOTE_CHAR); try { int context = Integer.parseInt(tok.nextToken()); ExplicitGroup newGroup = new ExplicitGroup(name, GroupHierarchyType.getByNumberOrDefault(context), keywordSeparator); @@ -216,7 +216,7 @@ private static ExplicitGroup legacyExplicitGroupFromString(String input, Charact QuotedStringTokenizer tok = new QuotedStringTokenizer(input.substring(MetadataSerializationConfiguration.LEGACY_EXPLICIT_GROUP_ID.length()), MetadataSerializationConfiguration.GROUP_UNIT_SEPARATOR, MetadataSerializationConfiguration.GROUP_QUOTE_CHAR); - String name = tok.nextToken(); + String name = StringUtil.unquote(tok.nextToken(), MetadataSerializationConfiguration.GROUP_QUOTE_CHAR); try { int context = Integer.parseInt(tok.nextToken()); ExplicitGroup newGroup = new ExplicitGroup(name, GroupHierarchyType.getByNumberOrDefault(context), keywordSeparator); @@ -260,15 +260,15 @@ private static AbstractGroup searchGroupFromString(String s) { QuotedStringTokenizer tok = new QuotedStringTokenizer(s.substring(MetadataSerializationConfiguration.SEARCH_GROUP_ID.length()), MetadataSerializationConfiguration.GROUP_UNIT_SEPARATOR, MetadataSerializationConfiguration.GROUP_QUOTE_CHAR); - String name = tok.nextToken(); + String name = StringUtil.unquote(tok.nextToken(), MetadataSerializationConfiguration.GROUP_QUOTE_CHAR); int context = Integer.parseInt(tok.nextToken()); - String expression = tok.nextToken(); + String expression = StringUtil.unquote(tok.nextToken(), MetadataSerializationConfiguration.GROUP_QUOTE_CHAR); boolean caseSensitive = Integer.parseInt(tok.nextToken()) == 1; boolean regExp = Integer.parseInt(tok.nextToken()) == 1; // version 0 contained 4 additional booleans to specify search // fields; these are ignored now, all fields are always searched - return new SearchGroup(StringUtil.unquote(name, MetadataSerializationConfiguration.GROUP_QUOTE_CHAR), - GroupHierarchyType.getByNumberOrDefault(context), StringUtil.unquote(expression, MetadataSerializationConfiguration.GROUP_QUOTE_CHAR), caseSensitive, regExp + return new SearchGroup(name, + GroupHierarchyType.getByNumberOrDefault(context), expression, caseSensitive, regExp ); } From 8a73718e9cecfb38dae9d91297f7e0b530731b57 Mon Sep 17 00:00:00 2001 From: Abraham Polk Date: Thu, 4 Apr 2019 18:42:42 -0400 Subject: [PATCH 3/3] Add javadoc to nextToken --- .../org/jabref/logic/util/strings/QuotedStringTokenizer.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/org/jabref/logic/util/strings/QuotedStringTokenizer.java b/src/main/java/org/jabref/logic/util/strings/QuotedStringTokenizer.java index 07d8e2d6af8..8c27e745dd4 100644 --- a/src/main/java/org/jabref/logic/util/strings/QuotedStringTokenizer.java +++ b/src/main/java/org/jabref/logic/util/strings/QuotedStringTokenizer.java @@ -34,6 +34,10 @@ public QuotedStringTokenizer(String content, String delimiters, char quoteCharac } } + /** + * @return the next token from the content string, ending at the next + * unquoted delimiter. Does not unquote the string itself. + */ public String nextToken() { char c; StringBuilder stringBuilder = new StringBuilder();