Revision: 6992
http://languagetool.svn.sourceforge.net/languagetool/?rev=6992&view=rev
Author: milek_pl
Date: 2012-05-19 19:22:04 +0000 (Sat, 19 May 2012)
Log Message:
-----------
make spelling work under JNLP
Modified Paths:
--------------
trunk/JLanguageTool/src/java/org/languagetool/JLanguageTool.java
trunk/JLanguageTool/src/java/org/languagetool/Main.java
trunk/JLanguageTool/src/java/org/languagetool/gui/Main.java
trunk/JLanguageTool/src/java/org/languagetool/rules/spelling/hunspell/HunspellRule.java
Modified: trunk/JLanguageTool/src/java/org/languagetool/JLanguageTool.java
===================================================================
--- trunk/JLanguageTool/src/java/org/languagetool/JLanguageTool.java
2012-05-19 18:10:06 UTC (rev 6991)
+++ trunk/JLanguageTool/src/java/org/languagetool/JLanguageTool.java
2012-05-19 19:22:04 UTC (rev 6992)
@@ -31,6 +31,8 @@
import org.xml.sax.SAXException;
import javax.xml.parsers.ParserConfigurationException;
+
+import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -110,7 +112,7 @@
private int sentenceCount;
private boolean listUnknownWords;
- private Set<String> unknownWords;
+ private Set<String> unknownWords;
/**
* Constants for correct paragraph-rule handling.
@@ -130,6 +132,8 @@
ONLYNONPARA
}
+ private static List<File> temporaryFiles = new ArrayList<File>();
+
// just for testing:
/*
* private Rule[] allBuiltinRules = new Rule[] { new
@@ -794,5 +798,24 @@
printStream.println(s);
}
}
+
+ /**
+ * Adds a temporary file to the internal list
+ * @param f - the file to be added.
+ */
+ public static void addTemporaryFile(final File f) {
+ temporaryFiles.add(f);
+ }
+
+ /**
+ * Clean up all temporary files, if there are any.
+ */
+ public static void removeTemporaryFiles() {
+ if (!temporaryFiles.isEmpty()) {
+ for (File f : temporaryFiles) {
+ f.delete();
+ }
+ }
+ }
}
Modified: trunk/JLanguageTool/src/java/org/languagetool/Main.java
===================================================================
--- trunk/JLanguageTool/src/java/org/languagetool/Main.java 2012-05-19
18:10:06 UTC (rev 6991)
+++ trunk/JLanguageTool/src/java/org/languagetool/Main.java 2012-05-19
19:22:04 UTC (rev 6992)
@@ -122,6 +122,14 @@
private void setListUnknownWords(final boolean listUnknownWords) {
lt.setListUnknownWords(listUnknownWords);
}
+
+ private void cleanUp() {
+ lt.removeTemporaryFiles();
+ if (srcLt != null) {
+ srcLt.removeTemporaryFiles();
+ }
+ }
+
private void setProfilingMode() {
profileRules = true;
@@ -414,7 +422,7 @@
} else {
runOnFile(file.getAbsolutePath(), encoding, listUnknown);
}
- }
+ }
}
/**
@@ -512,6 +520,7 @@
} else {
prg.runOnFile(options.getFilename(), options.getEncoding(),
options.isListUnknown());
}
+ prg.cleanUp();
}
// for language auto detect
Modified: trunk/JLanguageTool/src/java/org/languagetool/gui/Main.java
===================================================================
--- trunk/JLanguageTool/src/java/org/languagetool/gui/Main.java 2012-05-19
18:10:06 UTC (rev 6991)
+++ trunk/JLanguageTool/src/java/org/languagetool/gui/Main.java 2012-05-19
19:22:04 UTC (rev 6992)
@@ -363,6 +363,7 @@
Tools.showError(e);
}
frame.setVisible(false);
+ JLanguageTool.removeTemporaryFiles();
System.exit(0);
}
Modified:
trunk/JLanguageTool/src/java/org/languagetool/rules/spelling/hunspell/HunspellRule.java
===================================================================
---
trunk/JLanguageTool/src/java/org/languagetool/rules/spelling/hunspell/HunspellRule.java
2012-05-19 18:10:06 UTC (rev 6991)
+++
trunk/JLanguageTool/src/java/org/languagetool/rules/spelling/hunspell/HunspellRule.java
2012-05-19 19:22:04 UTC (rev 6992)
@@ -19,9 +19,12 @@
package org.languagetool.rules.spelling.hunspell;
-import java.io.FileNotFoundException;
+import java.io.File;
+import java.io.FileOutputStream;
import java.io.IOException;
-import java.io.UnsupportedEncodingException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
@@ -49,8 +52,7 @@
Hunspell.Dictionary dictionary = null;
public HunspellRule(final ResourceBundle messages, final Language
language)
- throws FileNotFoundException,
UnsupportedEncodingException,
- UnsatisfiedLinkError, UnsupportedOperationException {
+ throws UnsatisfiedLinkError,
UnsupportedOperationException, IOException {
super(messages, language);
super.setCategory(new
Category(messages.getString("category_typo")));
@@ -59,33 +61,65 @@
// in the Language class declaration is important!
// we might support country variants in the near future
+ final String langCountry = language.getShortName()
+ + "_"
+ + language.getCountryVariants()[0];
+
final String shortDicPath = "/"
+ language.getShortName()
+ "/hunspell/"
- + language.getShortName()
- + "_"
- + language.getCountryVariants()[0]
+ + langCountry
+ ".dic";
//set dictionary only if there are dictionary files
if (JLanguageTool.getDataBroker().resourceExists(shortDicPath))
{
- // FIXME: need to change behavior of hunspell library,
this is a hack to
- // test hunspell
- String dictionaryPath =
-
JLanguageTool.getDataBroker().getFromResourceDirAsUrl(
- shortDicPath).getPath();
- dictionaryPath = dictionaryPath.substring(0,
dictionaryPath.length() - 4);
-
- // Note: the class will silently ignore the
non-existence of
- // dictionaries!
- if
(JLanguageTool.getDataBroker().getFromResourceDirAsUrl(
- shortDicPath) != null) {
- dictionary =
Hunspell.getInstance().getDictionary(dictionaryPath);
- }
+ dictionary = Hunspell.getInstance().
+
getDictionary(getDictionaryPath(langCountry, shortDicPath));
+
}
}
-
+
+ private final String getDictionaryPath(final String dicName,
+ final String originalPath) throws IOException {
+
+ URL dictURL =
JLanguageTool.getDataBroker().getFromResourceDirAsUrl(
+ originalPath);
+
+ String dictionaryPath = dictURL.getPath();
+
+ //in the webstart version, we need to copy the files outside
the jar
+ //to the local temporary directory
+ if ("jar".equals(dictURL.getProtocol())) {
+ File tempDir = new
File(System.getProperty("java.io.tmpdir"));
+ File temporaryFile = new File(tempDir, dicName +
".dic");
+ JLanguageTool.addTemporaryFile(temporaryFile);
+ fileCopy(JLanguageTool.getDataBroker().
+
getFromResourceDirAsStream(originalPath), temporaryFile);
+ temporaryFile = new File(tempDir, dicName + ".aff");
+ JLanguageTool.addTemporaryFile(temporaryFile);
+ fileCopy(JLanguageTool.getDataBroker().
+ getFromResourceDirAsStream(originalPath.
+ replaceFirst(".dic$",
".aff")), temporaryFile);
+
+ dictionaryPath = tempDir.getAbsolutePath() + "/" +
dicName;
+ } else {
+ dictionaryPath = dictionaryPath.substring(0,
dictionaryPath.length() - 4);
+ }
+ return dictionaryPath;
+ }
+
+ private void fileCopy(final InputStream in, final File targetFile)
throws IOException {
+ OutputStream out = new FileOutputStream(targetFile);
+ byte[] buf = new byte[1024];
+ int len;
+ while ((len = in.read(buf)) > 0){
+ out.write(buf, 0, len);
+ }
+ in.close();
+ out.close();
+ }
+
@Override
public String getId() {
return "HUNSPELL_RULE";
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and
threat landscape has changed and how IT managers can respond. Discussions
will include endpoint security, mobile security and the latest in malware
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
Languagetool-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/languagetool-cvs