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