From 69997500eae26f41f219c1392266dcf09d1ec1ac Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Mon, 24 Sep 2012 13:26:49 -0700 Subject: [PATCH] Fixed a bug with multi word lists in title parsing --- .../todoroo/astrid/service/TaskService.java | 2 +- .../todoroo/astrid/utility/TitleParser.java | 48 +++++++------------ .../service}/TitleParserTest.java | 19 ++++---- 3 files changed, 26 insertions(+), 43 deletions(-) rename tests/src/com/todoroo/{andlib/utility => astrid/service}/TitleParserTest.java (96%) diff --git a/astrid/src/com/todoroo/astrid/service/TaskService.java b/astrid/src/com/todoroo/astrid/service/TaskService.java index 134aa7367..17a983963 100644 --- a/astrid/src/com/todoroo/astrid/service/TaskService.java +++ b/astrid/src/com/todoroo/astrid/service/TaskService.java @@ -446,7 +446,7 @@ public class TaskService { * @return */ public static boolean parseQuickAddMarkup(Task task, ArrayList tags) { - return new TitleParser(task, tags).parse(); + return TitleParser.parse(task, tags); } /** diff --git a/astrid/src/com/todoroo/astrid/utility/TitleParser.java b/astrid/src/com/todoroo/astrid/utility/TitleParser.java index aaa995197..ad118a697 100644 --- a/astrid/src/com/todoroo/astrid/utility/TitleParser.java +++ b/astrid/src/com/todoroo/astrid/utility/TitleParser.java @@ -22,15 +22,8 @@ import com.todoroo.astrid.tags.TagService; @SuppressWarnings("nls") public class TitleParser { - Task task; - ArrayList tags; - public TitleParser(Task task, ArrayList tags){ - this.task = task; - this.tags = tags; - } - - public boolean parse() { + public static boolean parse(Task task, ArrayList tags) { boolean markup = false; markup = repeatHelper(task) || markup; markup = dayHelper(task) || markup; @@ -39,15 +32,15 @@ public class TitleParser { return markup; } - public static String[] trimParenthesisAndSplit(String pattern){ + public static String trimParenthesis(String pattern){ if (pattern.charAt(0) == '#' || pattern.charAt(0) == '@') { pattern = pattern.substring(1); } if ('(' == pattern.charAt(0)) { - String lists = pattern.substring(1, pattern.length()-1); - return lists.split("\\s+"); + String list = pattern.substring(1, pattern.length()-1); + return list; } - return new String[] { pattern }; + return pattern; } public static boolean listHelper(Task task, ArrayList tags) { String inputText = task.getValue(Task.TITLE); @@ -62,28 +55,20 @@ public class TitleParser { Matcher m = tagPattern.matcher(inputText); if(m.find()) { result = true; - String[] splitTags = TitleParser.trimParenthesisAndSplit(m.group(2)); - if (splitTags != null) { - for (String tag : splitTags) { - String tagWithCase = tagService.getTagWithCase(tag); - if (!addedTags.contains(tagWithCase)) - tags.add(tagWithCase); - addedTags.add(tagWithCase); - } - } + String tag = TitleParser.trimParenthesis(m.group(2)); + String tagWithCase = tagService.getTagWithCase(tag); + if (!addedTags.contains(tagWithCase)) + tags.add(tagWithCase); + addedTags.add(tagWithCase); } else { m = contextPattern.matcher(inputText); if(m.find()) { result = true; - String[] splitTags = TitleParser.trimParenthesisAndSplit(m.group(2)); - if (splitTags != null) { - for (String tag : splitTags) { - String tagWithCase = tagService.getTagWithCase(tag); - if (!addedTags.contains(tagWithCase)) - tags.add(tagWithCase); - addedTags.add(tagWithCase); - } - } + String tag = TitleParser.trimParenthesis(m.group(2)); + String tagWithCase = tagService.getTagWithCase(tag); + if (!addedTags.contains(tagWithCase)) + tags.add(tagWithCase); + addedTags.add(tagWithCase); } else{ break; } @@ -379,7 +364,8 @@ public class TitleParser { repeatTimesIntervalOne.put( "(?i)\\bmonthly\\b" ,Frequency.MONTHLY); repeatTimesIntervalOne.put( "(?i)\\byearly\\b" , Frequency.YEARLY); - for (String repeatTime:repeatTimes.keySet()){ + Set keys = repeatTimes.keySet(); + for (String repeatTime : keys){ Pattern pattern = Pattern.compile(repeatTime); Matcher m = pattern.matcher(inputText); if (m.find()){ diff --git a/tests/src/com/todoroo/andlib/utility/TitleParserTest.java b/tests/src/com/todoroo/astrid/service/TitleParserTest.java similarity index 96% rename from tests/src/com/todoroo/andlib/utility/TitleParserTest.java rename to tests/src/com/todoroo/astrid/service/TitleParserTest.java index f8c3abd42..7356a4f42 100644 --- a/tests/src/com/todoroo/andlib/utility/TitleParserTest.java +++ b/tests/src/com/todoroo/astrid/service/TitleParserTest.java @@ -3,7 +3,7 @@ * * See the file "LICENSE" for the full license governing this code. */ -package com.todoroo.andlib.utility; +package com.todoroo.astrid.service; import java.util.ArrayList; @@ -13,6 +13,7 @@ import java.util.Date; import com.google.ical.values.Frequency; import com.google.ical.values.RRule; import com.timsu.astrid.R; +import com.todoroo.andlib.utility.Preferences; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.test.DatabaseTestCase; @@ -542,15 +543,13 @@ public class TitleParserTest extends DatabaseTestCase { "#(cool)" }; Task task = new Task(); - for (String acceptedString:acceptedStrings){ + for (String acceptedString : acceptedStrings) { task = new Task(); task.setValue(Task.TITLE, "Jog " + acceptedString); //test at end of task. should set importance. ArrayList tags = new ArrayList(); TitleParser.listHelper(task, tags); - String[] splitTags = TitleParser.trimParenthesisAndSplit(acceptedString); - for (String tag : splitTags) { - assertTrue("test pound at failed for string: " + acceptedString + " for tags: " + tags.toString(),tags.contains(tag)); - } + String tag = TitleParser.trimParenthesis(acceptedString); + assertTrue("test pound at failed for string: " + acceptedString + " for tags: " + tags.toString(), tags.contains(tag)); } } @@ -563,15 +562,13 @@ public class TitleParserTest extends DatabaseTestCase { "@(cool)" }; Task task = new Task(); - for (String acceptedString:acceptedStrings){ + for (String acceptedString : acceptedStrings) { task = new Task(); task.setValue(Task.TITLE, "Jog " + acceptedString); //test at end of task. should set importance. ArrayList tags = new ArrayList(); TitleParser.listHelper(task, tags); - String[] splitTags = TitleParser.trimParenthesisAndSplit(acceptedString); - for (String tag : splitTags) { - assertTrue("testTagsAt failed for string: " + acceptedString+ " for tags: " + tags.toString(), tags.contains(tag)); - } + String tag = TitleParser.trimParenthesis(acceptedString); + assertTrue("testTagsAt failed for string: " + acceptedString+ " for tags: " + tags.toString(), tags.contains(tag)); } }