Revision: 6631
          
http://languagetool.svn.sourceforge.net/languagetool/?rev=6631&view=rev
Author:   dominikoeo
Date:     2012-03-23 13:39:38 +0000 (Fri, 23 Mar 2012)
Log Message:
-----------
[fr] fixed bug #3509663: the "espace fine ins?\195?\169cable" (U+202f) was 
flagged
     as an error before the question mark (?), exclamation mark (!)
     semi-colon (;) and colon (:), yet this is strictly speaking the
     correct space character to use before those punctuation mark.
     So no longer flag this as a mistake.
     In practise, the "espace ins?\195?\169cable" is also often used (U+00a0)
     so the rule also accepts it.
     See: http://unicode.org/udhr/n/notes_fra.html for more information
     about what space to use in French typography.

Modified Paths:
--------------
    
trunk/JLanguageTool/src/java/org/languagetool/rules/fr/QuestionWhitespaceRule.java

Modified: 
trunk/JLanguageTool/src/java/org/languagetool/rules/fr/QuestionWhitespaceRule.java
===================================================================
--- 
trunk/JLanguageTool/src/java/org/languagetool/rules/fr/QuestionWhitespaceRule.java
  2012-03-23 12:19:46 UTC (rev 6630)
+++ 
trunk/JLanguageTool/src/java/org/languagetool/rules/fr/QuestionWhitespaceRule.java
  2012-03-23 13:39:38 UTC (rev 6631)
@@ -31,6 +31,8 @@
 /**
  * A rule that matches spaces before ?,:,; and ! (required for correct French
  * punctuation).
+ *
+ * @see http://unicode.org/udhr/n/notes_fra.html
  * 
  * @author Marcin Miłkowski
  */
@@ -69,56 +71,62 @@
         if (token.equals("?")) {
           msg = "Point d'interrogation est précédé d'une espace fine 
insécable.";
           // non-breaking space
-          suggestionText = " ?";
+          suggestionText = " ?";
           fixLen = 1;
         } else if (token.equals("!")) {
           msg = "Point d'exclamation est précédé d'une espace fine insécable.";
           // non-breaking space
-          suggestionText = " !";
+          suggestionText = " !";
           fixLen = 1; 
         } else if (token.equals("»")) {
           msg = "Le guillemet fermant est précédé d'une espace fine 
insécable.";
           // non-breaking space
-          suggestionText = " »";
+          suggestionText = " »";
           fixLen = 1;
         } else if (token.equals(";")) {
           msg = "Point-virgule est précédé d'une espace fine insécable.";
           // non-breaking space
-          suggestionText = " ;";
+          suggestionText = " ;";
           fixLen = 1;
         } else if (token.equals(":")) {
           msg = "Deux-points sont précédé d'une espace fine insécable.";
           // non-breaking space
-          suggestionText = " :";
+          suggestionText = " :";
           fixLen = 1;
         }        
       } else {
+        // Stricly speaking, the character before ?!;: should be an
+        // "espace fine insécable" (U+202f).  In practise, an
+        // "espace insécable" (U+00a0) is also often used. Let's accept both.
         if (token.equals("?") && !prevToken.equals("!")
-            && !prevToken.equals("\u00a0")) {
+            && !prevToken.equals("\u00a0") && !prevToken.equals("\u202f")) {
           msg = "Point d'interrogation est précédé d'une espace fine 
insécable.";
           // non-breaking space
-          suggestionText = prevToken + " ?";
+          suggestionText = prevToken + " ?";
           fixLen = 1;
         } else if (token.equals("!") && !prevToken.equals("?")
-            && !prevToken.equals("\u00a0")) {
+            && !prevToken.equals("\u00a0") && !prevToken.equals("\u202f")) {
           msg = "Point d'exclamation est précédé d'une espace fine insécable.";
           // non-breaking space
-          suggestionText = prevToken + " !";
+          suggestionText = prevToken + " !";
           fixLen = 1;
-        } else if (token.equals(";") && !prevToken.equals("\u00a0")) {
+        } else if (token.equals(";")
+            && !prevToken.equals("\u00a0") && !prevToken.equals("\u202f")) {
           msg = "Point-virgule est précédé d'une espace fine insécable.";
           // non-breaking space
-          suggestionText = prevToken + " ;";
+          suggestionText = prevToken + " ;";
           fixLen = 1;
-        } else if (token.equals(":") && !prevToken.equals("\u00a0")) {
+        } else if (token.equals(":") 
+            && !prevToken.equals("\u00a0") && !prevToken.equals("\u202f")) {
           msg = "Deux-points précédés d'une espace fine insécable.";
           // non-breaking space
-          suggestionText = prevToken + " :";
+          suggestionText = prevToken + " :";
           fixLen = 1;
-        } else if (token.equals("»") && !prevToken.equals("\u00a0")) {
+        } else if (token.equals("»")
+            && !prevToken.equals("\u00a0") && !prevToken.equals("\u202f")) {
           msg = "Le guillemet fermant est précédé d'une espace fine 
insécable.";
           // non-breaking space
-          suggestionText = prevToken + " »";
+          suggestionText = prevToken + " »";
           fixLen = 1;
         }             
       } 
@@ -126,13 +134,13 @@
       if (StringTools.isEmpty(token) && prevToken.equals("«")) {
         msg = "Le guillemet ouvrant est suivi d'une espace fine insécable.";
         // non-breaking space
-        suggestionText = "« ";
+        suggestionText = "« ";
         fixLen = 1;
       }  else if (!StringTools.isEmpty(token) && !token.equals("\u00a0")
           && prevToken.equals("«")) {
         msg = "Le guillemet ouvrant est suivi d'une espace fine insécable.";
         // non-breaking space
-        suggestionText = "« ";
+        suggestionText = "« ";
         fixLen = 0;
       } 
 

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


------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
Languagetool-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/languagetool-cvs

Reply via email to