Revision: 6771
http://languagetool.svn.sourceforge.net/languagetool/?rev=6771&view=rev
Author: dnaber
Date: 2012-04-22 14:03:21 +0000 (Sun, 22 Apr 2012)
Log Message:
-----------
if a LanguageTool rule has an URL with more information, the grammar checking
dialog in LibreOffice will now offer a "More..." link to that URL
Modified Paths:
--------------
trunk/JLanguageTool/CHANGES.txt
trunk/JLanguageTool/src/java/org/languagetool/openoffice/Main.java
trunk/JLanguageTool/src/java/org/languagetool/rules/Rule.java
trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/PatternRuleLoader.java
trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/XMLRuleHandler.java
Added Paths:
-----------
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/PatternRuleLoaderTest.java
Modified: trunk/JLanguageTool/CHANGES.txt
===================================================================
--- trunk/JLanguageTool/CHANGES.txt 2012-04-22 14:02:53 UTC (rev 6770)
+++ trunk/JLanguageTool/CHANGES.txt 2012-04-22 14:03:21 UTC (rev 6771)
@@ -11,6 +11,10 @@
-Russian:
-fixed a few false alarms
+ -LibreOffice: if a LanguageTool rule has an URL with more information, the
+ grammar checking dialog in LibreOffice will now offer a "More..." link
+ to that URL
+
-GUI: made the result of "Tag Text" more readable
-Improved startup speed (Jarek Lipski)
Modified: trunk/JLanguageTool/src/java/org/languagetool/openoffice/Main.java
===================================================================
--- trunk/JLanguageTool/src/java/org/languagetool/openoffice/Main.java
2012-04-22 14:02:53 UTC (rev 6770)
+++ trunk/JLanguageTool/src/java/org/languagetool/openoffice/Main.java
2012-04-22 14:03:21 UTC (rev 6771)
@@ -37,6 +37,7 @@
import com.sun.star.awt.XWindow;
import com.sun.star.awt.XWindowPeer;
+import com.sun.star.beans.PropertyState;
import com.sun.star.beans.PropertyValue;
import com.sun.star.beans.XPropertySet;
import com.sun.star.frame.XDesktop;
@@ -458,12 +459,15 @@
aError.nErrorStart = myMatch.getFromPos() + startIndex;
aError.nErrorLength = myMatch.getToPos() - myMatch.getFromPos();
aError.aRuleIdentifier = myMatch.getRule().getId();
- // LibreOffice since version 3.5 supports an URL that provides more
information for the error:
- //final PropertyValue[] propertyValues = new PropertyValue[] {
- // new PropertyValue("FullCommentURL", -1,
myMatch.getRule().getUrl(), PropertyState.DIRECT_VALUE)
- //};
- //aError.aProperties = propertyValues;
- aError.aProperties = new PropertyValue[0];
+ // LibreOffice since version 3.5 supports an URL that provides more
information about the error,
+ // older version will simply ignore the property:
+ if (myMatch.getRule().getUrl() != null) {
+ aError.aProperties = new PropertyValue[] {
+ new PropertyValue("FullCommentURL", -1,
myMatch.getRule().getUrl().toString(), PropertyState.DIRECT_VALUE)
+ };
+ } else {
+ aError.aProperties = new PropertyValue[0];
+ }
return aError;
}
Modified: trunk/JLanguageTool/src/java/org/languagetool/rules/Rule.java
===================================================================
--- trunk/JLanguageTool/src/java/org/languagetool/rules/Rule.java
2012-04-22 14:02:53 UTC (rev 6770)
+++ trunk/JLanguageTool/src/java/org/languagetool/rules/Rule.java
2012-04-22 14:03:21 UTC (rev 6771)
@@ -19,6 +19,7 @@
package org.languagetool.rules;
import java.io.IOException;
+import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
@@ -38,6 +39,7 @@
private List<String> correctExamples;
private List<IncorrectExample> incorrectExamples;
private Category category;
+ private URL url;
/** If true, then the rule is turned off by default. */
private boolean defaultOff;
/** Used by paragraph rules to signal that they can remove previous rule
matches */
@@ -219,4 +221,19 @@
defaultOff = true;
}
+ /**
+ * An URL describing the rule match in more detail. Typically points to a
dictionary or grammar website
+ * with explanations and examples.
+ * @since 1.8
+ */
+ public URL getUrl() {
+ return url;
+ }
+
+ /**
+ * @since 1.8
+ */
+ public void setUrl(URL url) {
+ this.url = url;
+ }
}
Modified:
trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/PatternRuleLoader.java
===================================================================
---
trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/PatternRuleLoader.java
2012-04-22 14:02:53 UTC (rev 6770)
+++
trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/PatternRuleLoader.java
2012-04-22 14:03:21 UTC (rev 6771)
@@ -20,6 +20,8 @@
import java.io.IOException;
import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -111,6 +113,7 @@
}
} else if ("rule".equals(qName)) {
shortMessage = new StringBuilder();
+ url = new StringBuilder();
id = attrs.getValue("id");
if (inRuleGroup) {
subId++;
@@ -118,7 +121,6 @@
if (!(inRuleGroup && defaultOff)) {
defaultOff = "off".equals(attrs.getValue(DEFAULT));
}
-
if (!(inRuleGroup && defaultOn)) {
defaultOn = "on".equals(attrs.getValue(DEFAULT));
}
@@ -169,6 +171,9 @@
} else if ("short".equals(qName)) {
inShortMessage = true;
shortMessage = new StringBuilder();
+ } else if ("url".equals(qName)) {
+ inUrl = true;
+ url = new StringBuilder();
} else if ("rulegroup".equals(qName)) {
ruleGroupId = attrs.getValue("id");
ruleGroupDescription = attrs.getValue("name");
@@ -277,6 +282,8 @@
inMessage = false;
} else if ("short".equals(qName)) {
inShortMessage = false;
+ } else if ("url".equals(qName)) {
+ inUrl = false;
} else if ("match".equals(qName)) {
if (inMessage) {
suggestionMatches.get(suggestionMatches.size() - 1).
@@ -312,7 +319,7 @@
}
}
- private void prepareRule(final PatternRule rule) {
+ private void prepareRule(final PatternRule rule) {
rule.setStartPositionCorrection(startPositionCorrection);
rule.setEndPositionCorrection(endPositionCorrection);
startPositionCorrection = 0;
@@ -322,8 +329,7 @@
rule.setCategory(category);
if (inRuleGroup) {
rule.setSubId(Integer.toString(subId));
- }
- else {
+ } else {
rule.setSubId("1");
}
caseSensitive = false;
@@ -341,6 +347,13 @@
if (category.isDefaultOff() && !defaultOn) {
rule.setDefaultOff();
}
+ if (url != null && url.length() > 0) {
+ try {
+ rule.setUrl(new URL(url.toString()));
+ } catch (MalformedURLException e) {
+ throw new RuntimeException("Could not parse URL for rule: " + rule +
": '" + url + "'", e);
+ }
+ }
}
@Override
@@ -360,6 +373,8 @@
message.append(s);
} else if (inShortMessage) {
shortMessage.append(s);
+ } else if (inUrl) {
+ url.append(s);
}
}
Modified:
trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/XMLRuleHandler.java
===================================================================
---
trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/XMLRuleHandler.java
2012-04-22 14:02:53 UTC (rev 6770)
+++
trunk/JLanguageTool/src/java/org/languagetool/rules/patterns/XMLRuleHandler.java
2012-04-22 14:03:21 UTC (rev 6771)
@@ -139,7 +139,9 @@
protected int andGroupCounter;
protected StringBuilder shortMessage = new StringBuilder();
+ protected StringBuilder url = new StringBuilder();
protected boolean inShortMessage;
+ protected boolean inUrl;
protected boolean inUnification;
protected boolean inUnificationDef;
Added:
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/PatternRuleLoaderTest.java
===================================================================
---
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/PatternRuleLoaderTest.java
(rev 0)
+++
trunk/JLanguageTool/src/test/org/languagetool/rules/patterns/PatternRuleLoaderTest.java
2012-04-22 14:03:21 UTC (rev 6771)
@@ -0,0 +1,31 @@
+package org.languagetool.rules.patterns;
+
+import junit.framework.TestCase;
+import org.languagetool.JLanguageTool;
+import org.languagetool.rules.Rule;
+
+import java.util.List;
+
+public class PatternRuleLoaderTest extends TestCase {
+
+ public void testGetRules() throws Exception {
+ final PatternRuleLoader prg = new PatternRuleLoader();
+ final String name = "/xx/grammar.xml";
+ final List<PatternRule> rules =
prg.getRules(JLanguageTool.getDataBroker().getFromRulesDirAsStream(name), name);
+ assertTrue(rules.size() >= 30);
+ final Rule demoRule1 = getRuleById("DEMO_RULE", rules);
+ assertEquals("http://fake-server.org/foo-bar-error-explained",
demoRule1.getUrl().toString());
+ final Rule demoRule2 = getRuleById("API_OUTPUT_TEST_RULE", rules);
+ assertNull(demoRule2.getUrl());
+ }
+
+ private Rule getRuleById(String id, List<PatternRule> rules) {
+ for (Rule rule : rules) {
+ if (rule.getId().equals(id)) {
+ return rule;
+ }
+ }
+ throw new RuntimeException("No rule found for id '" + id + "'");
+ }
+
+}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
For Developers, A Lot Can Happen In A Second.
Boundary is the first to Know...and Tell You.
Monitor Your Applications in Ultra-Fine Resolution. Try it FREE!
http://p.sf.net/sfu/Boundary-d2dvs2
_______________________________________________
Languagetool-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/languagetool-cvs