Revision: 9906
          
http://languagetool.svn.sourceforge.net/languagetool/?rev=9906&view=rev
Author:   pbianchini
Date:     2013-04-10 07:40:25 +0000 (Wed, 10 Apr 2013)
Log Message:
-----------
A rule that matches several punctuation signs such as : ; and % preceded by 
whitespace.
Fix for BUG ID 3607406: no space before semicolon
Checks for: 
 <a word> : and suggests <a word>:
 <a word> ; and suggests <a word>;
 <a number> % and suggests <a number>%

Modified Paths:
--------------
    
trunk/languagetool/languagetool-core/src/main/resources/org/languagetool/MessagesBundle.properties
    
trunk/languagetool/languagetool-language-modules/it/src/main/java/org/languagetool/language/Italian.java
    
trunk/languagetool/languagetool-language-modules/it/src/main/resources/org/languagetool/MessagesBundle_it.properties

Added Paths:
-----------
    
trunk/languagetool/languagetool-core/src/main/java/org/languagetool/rules/WhitespaceBeforePunctuationRule.java

Added: 
trunk/languagetool/languagetool-core/src/main/java/org/languagetool/rules/WhitespaceBeforePunctuationRule.java
===================================================================
--- 
trunk/languagetool/languagetool-core/src/main/java/org/languagetool/rules/WhitespaceBeforePunctuationRule.java
                              (rev 0)
+++ 
trunk/languagetool/languagetool-core/src/main/java/org/languagetool/rules/WhitespaceBeforePunctuationRule.java
      2013-04-10 07:40:25 UTC (rev 9906)
@@ -0,0 +1,117 @@
+/* LanguageTool, a natural language style checker 
+ * Copyright (C) 2013 Daniel Naber (http://www.danielnaber.de)
+ *                    Paolo Bianchini
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301
+ * USA
+ */
+package org.languagetool.rules;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.ResourceBundle;
+
+import org.languagetool.AnalyzedSentence;
+import org.languagetool.AnalyzedTokenReadings;
+import org.languagetool.tools.StringTools;
+
+/**
+ * A rule that matches several punctuation signs such as : ; and % preceded by 
whitespace.
+ * 
+ * BUG ID 3607406: no space before semicolon
+ * 
+ * Checks for: 
+ *                             <a word> : and suggests <a word>:
+ *                             <a word> ; and suggests <a word>;
+ *                             <a number> % and suggests <a number>%
+ * 
+ * @author Paolo Bianchini
+ */
+
+public class WhitespaceBeforePunctuationRule extends Rule {
+
+  public WhitespaceBeforePunctuationRule(final ResourceBundle messages) {
+    super(messages);
+    super.setCategory(new Category(messages.getString("category_misc")));
+    setLocQualityIssueType("typographical");
+  }
+
+  @Override
+  public final String getId() {
+    return "WHITESPACE_PUNCTUATION";
+  }
+
+  @Override
+  public final String getDescription() {
+    return messages.getString("desc_whitespace_before_punctuation");
+  }
+
+  @Override
+  public final RuleMatch[] match(final AnalyzedSentence text) {
+    final List<RuleMatch> ruleMatches = new ArrayList<RuleMatch>();
+    final AnalyzedTokenReadings[] tokens = text.getTokens();
+    String prevToken = "";
+    String prevPrevToken = "";
+    boolean prevWhite = false;    
+    int prevLen = 0;
+    for (int i = 0; i < tokens.length; i++) {
+      final String token = tokens[i].getToken();
+      final boolean isWhitespace = tokens[i].isWhitespace() || 
StringTools.isNonBreakingWhitespace(token)
+              || tokens[i].isFieldCode();
+      String msg = null;
+      String suggestionText = null;
+      if (prevWhite) {
+        if (token.equals(":")) {
+            msg = messages.getString("no_space_before_colon");
+            suggestionText = ":";
+            // exception case for figures such as " : 0" 
+            if (i + 2 < tokens.length
+                && tokens[i + 1].isWhitespace()
+               && Character.isDigit(tokens[i + 2].getToken().charAt(0))) {
+              msg = null;
+            }
+        } else if (token.equals(";")) {
+            msg = messages.getString("no_space_before_semicolon");
+            suggestionText = ";";
+        } else if (i > 1
+                       && token.equals("%")
+                       && Character.isDigit(tokens[i - 
2].getToken().charAt(0))) {
+            msg = messages.getString("no_space_before_percentage");
+            suggestionText = "%";
+        }
+      }
+      if (msg != null) {
+        final int fromPos = tokens[i - 1].getStartPos();
+        final int toPos = tokens[i - 1].getStartPos() + 1 + prevLen;
+        // TODO: add some good short comment here
+        final RuleMatch ruleMatch = new RuleMatch(this, fromPos, toPos, msg);
+        ruleMatch.setSuggestedReplacement(suggestionText);
+        ruleMatches.add(ruleMatch);
+      }
+      prevPrevToken = prevToken;
+      prevToken = token;
+      prevWhite = isWhitespace && !tokens[i].isFieldCode(); //OOo code before 
comma/dot
+      prevLen = tokens[i].getToken().length();
+    }
+
+    return toRuleMatchArray(ruleMatches);
+  }
+
+  @Override
+  public void reset() {
+    // nothing
+  }
+
+}

Modified: 
trunk/languagetool/languagetool-core/src/main/resources/org/languagetool/MessagesBundle.properties
===================================================================
--- 
trunk/languagetool/languagetool-core/src/main/resources/org/languagetool/MessagesBundle.properties
  2013-04-09 18:35:18 UTC (rev 9905)
+++ 
trunk/languagetool/languagetool-core/src/main/resources/org/languagetool/MessagesBundle.properties
  2013-04-10 07:40:25 UTC (rev 9906)
@@ -73,6 +73,12 @@
 
 desc_spelling_short = Spelling mistake
 
+# 3607406 +
+
+desc_whitespace_before_punctuation = Use of whitespace before colon, semicolon 
and percentage.
+
+# 3607406 -
+
 double_dots_short = Two consecutive dots
 
 double_commas_short = Two consecutive comma
@@ -203,6 +209,16 @@
 
 no_space_before_dot = Don't put a space before the full stop
 
+# 3607406 +
+
+no_space_before_colon = Don't put a space before the colon
+
+no_space_before_semicolon = Don't put a space before the semicolon
+
+no_space_before_percentage = Don't put a space before the percentage
+
+# 3607406 -
+
 pl = Polish
 
 repetition = Possible typo: you repeated a word

Modified: 
trunk/languagetool/languagetool-language-modules/it/src/main/java/org/languagetool/language/Italian.java
===================================================================
--- 
trunk/languagetool/languagetool-language-modules/it/src/main/java/org/languagetool/language/Italian.java
    2013-04-09 18:35:18 UTC (rev 9905)
+++ 
trunk/languagetool/languagetool-language-modules/it/src/main/java/org/languagetool/language/Italian.java
    2013-04-10 07:40:25 UTC (rev 9906)
@@ -30,6 +30,10 @@
 import org.languagetool.rules.WhitespaceRule;
 import org.languagetool.rules.WordRepeatRule;
 import org.languagetool.rules.it.MorfologikItalianSpellerRule;
+// 3607406 +
+import org.languagetool.rules.WhitespaceBeforePunctuationRule;
+// 3607406 -
+
 import org.languagetool.tagging.Tagger;
 import org.languagetool.tagging.it.ItalianTagger;
 
@@ -79,6 +83,9 @@
   @Override
   public List<Class<? extends Rule>> getRelevantRules() {
     return Arrays.asList(
+// 3607406 +
+               WhitespaceBeforePunctuationRule.class,
+// 3607406 -
             CommaWhitespaceRule.class,
             DoublePunctuationRule.class,
             GenericUnpairedBracketsRule.class,

Modified: 
trunk/languagetool/languagetool-language-modules/it/src/main/resources/org/languagetool/MessagesBundle_it.properties
===================================================================
--- 
trunk/languagetool/languagetool-language-modules/it/src/main/resources/org/languagetool/MessagesBundle_it.properties
        2013-04-09 18:35:18 UTC (rev 9905)
+++ 
trunk/languagetool/languagetool-language-modules/it/src/main/resources/org/languagetool/MessagesBundle_it.properties
        2013-04-10 07:40:25 UTC (rev 9906)
@@ -73,6 +73,12 @@
 
 desc_spelling_short = Errore di battitura
 
+# 3607406 +
+
+desc_whitespace_before_punctuation = Utilizzo dello spazio prima di : ; %
+
+# 3607406 -
+
 double_dots_short = Due punti consecutivi
 
 double_commas_short = Due virgole consecutive
@@ -203,6 +209,16 @@
 
 no_space_before_dot = Non inserire lo spazio dopo il punto a capo
 
+# 3607406 +
+
+no_space_before_colon = Non inserire uno spazio prima dei due punti
+
+no_space_before_semicolon = Non inserire uno spazio prima del punto e virgola
+
+no_space_before_percentage = Non inserire uno spazio prima del segno di 
percentuale
+
+# 3607406 -
+
 pl = Polacco
 
 repetition = Possibile errore di battitura\: parola ripetuta

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________
Languagetool-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/languagetool-commits

Reply via email to