use of org.omegat.filters2.TranslationException in project omegat by omegat-org.
the class FilterMaster method translateFile.
/**
* OmegaT core calls this method to translate a source file.
* <ul>
* <li>OmegaT first looks through registered filter instances to find filter(s) that can handle this file.
* <li>Tests if filter(s) want to handle it.
* <li>If the filter accepts the file,
* <li>Filter is asked to process the file.
* </ul>
* If no filter is found, that processes this file, we simply copy it to target folder.
*
* @param sourcedir
* The folder of the source inFile.
* @param filename
* The name of the source inFile to process (only the part, relative to source folder).
* @param targetdir
* The folder to place the translated inFile to.
* @param fc
* Filter context.
*/
public void translateFile(String sourcedir, String filename, String targetdir, FilterContext fc, ITranslateCallback translateCallback) throws IOException, TranslationException {
LookupInformation lookup = lookupFilter(new File(sourcedir, filename), fc);
if (lookup == null) {
// The file is not supported by any of the filters.
// Copying it
FileUtils.copyFile(new File(sourcedir, filename), new File(targetdir, filename));
return;
}
File inFile = new File(sourcedir, filename).getCanonicalFile();
File outFile = new File(targetdir, getTargetForSource(filename, lookup, fc.getTargetLang())).getCanonicalFile();
if (inFile.equals(outFile)) {
throw new TranslationException(StringUtil.format(OStrings.getString("FILTERMASTER_ERROR_SRC_TRG_SAME_FILE"), inFile.getPath()));
}
fc.setInEncoding(lookup.outFilesInfo.getSourceEncoding());
fc.setOutEncoding(lookup.outFilesInfo.getTargetEncoding());
IFilter filterObject = lookup.filterObject;
try {
filterObject.translateFile(inFile, outFile, lookup.config, fc, translateCallback);
} catch (Exception ex) {
Log.log(ex);
}
}
use of org.omegat.filters2.TranslationException in project omegat by omegat-org.
the class FilterMaster method lookupFilter.
/**
* Gets the filter according to the source filename provided. In case of failing to find a filter to
* handle the file returns <code>null</code>.
*
* In case of finding an appropriate filter it
* <ul>
* <li>Creates the filter (use <code>OneFilter.getFilter()</code> to get it)
* <li>Creates a reader (use <code>OneFilter.getReader()</code> to get it)
* <li>Checks whether the filter supports the file.
* </ul>
*
* @param inFile The full path to the source file
* @return The corresponding LookupInformation
*/
private LookupInformation lookupFilter(File inFile, FilterContext fc) throws TranslationException, IOException {
for (Filter f : config.getFilters()) {
if (!f.isEnabled()) {
continue;
}
for (Files ff : f.getFiles()) {
if (!matchesMask(inFile.getName(), ff.getSourceFilenameMask())) {
continue;
}
IFilter filterObject = getFilterInstance(f.getClassName());
if (filterObject == null) {
continue;
}
fc.setInEncoding(ff.getSourceEncoding());
fc.setOutEncoding(ff.getTargetEncoding());
// only for exist filters
Map<String, String> config = forFilter(f.getOption());
if (!filterObject.isFileSupported(inFile, config, fc)) {
break;
}
return new LookupInformation(filterObject, ff, config);
}
}
return null;
}
use of org.omegat.filters2.TranslationException in project omegat by omegat-org.
the class FilterMaster method loadFile.
/**
* OmegaT core calls this method to load a source file.
*
* @param filename
* The name of the source file to load.
* @return Whether the file was handled by one of OmegaT filters.
* @see #translateFile(String, String, String, FilterContext,
* ITranslateCallback)
*/
public IFilter loadFile(String filename, FilterContext fc, IParseCallback parseCallback) throws IOException, TranslationException {
IFilter filterObject = null;
try {
LookupInformation lookup = lookupFilter(new File(filename), fc);
if (lookup == null) {
return null;
}
File inFile = new File(filename);
fc.setInEncoding(lookup.outFilesInfo.getSourceEncoding());
fc.setOutEncoding(lookup.outFilesInfo.getTargetEncoding());
filterObject = lookup.filterObject;
filterObject.parseFile(inFile, lookup.config, fc, parseCallback);
} catch (Exception ioe) {
throw new IOException(filename + "\n" + ioe, ioe);
}
return filterObject;
}
use of org.omegat.filters2.TranslationException in project omegat by omegat-org.
the class ResourceBundleFilter method normalizeInputLine.
/**
* Processes an input line for use in OmegaT by doing the following:
* <ul>
* <li>Converts ASCII-encoded \\uxxxx chars to normal characters.
* <li>Converts \r, \n and \t to CR, line feed and tab.
* <li>But! Keeps a backspace in '\ ', '\=', '\:', etc. (non-trimmable space
* or non-key-value-breaking equals).
* <ul>
*/
protected String normalizeInputLine(String line) throws IOException, TranslationException {
// Whitespace at the beginning of lines is ignored
boolean strippingWhitespace = true;
StringBuilder result = new StringBuilder(line.length());
for (int cp, len = line.length(), i = 0; i < len; i += Character.charCount(cp)) {
cp = line.codePointAt(i);
if (strippingWhitespace && (strippingWhitespace = Character.isWhitespace(cp))) {
continue;
}
if (cp == '\\' && line.codePointCount(i, len) > 1) {
i += Character.charCount(cp);
cp = line.codePointAt(i);
if (cp != 'u') {
if (cp == 'n') {
cp = '\n';
} else if (cp == 'r') {
cp = '\r';
} else if (cp == 't') {
cp = '\t';
} else {
result.append('\\');
}
} else if (dontUnescapeULiterals) {
// Put back the \ we swallowed
result.append('\\');
} else {
// checking if the string is long enough
if (line.codePointCount(i, len) < 1 + 4) {
throw new TranslationException(OStrings.getString("RBFH_ERROR_ILLEGAL_U_SEQUENCE"));
}
int uStart = line.offsetByCodePoints(i, 1);
int uEnd = line.offsetByCodePoints(uStart, 4);
String uStr = line.substring(uStart, uEnd);
try {
cp = Integer.parseInt(uStr, 16);
if (!Character.isValidCodePoint(cp)) {
throw new TranslationException(OStrings.getString("RBFH_ERROR_ILLEGAL_U_SEQUENCE"));
}
i = uEnd - Character.charCount(cp);
} catch (NumberFormatException ex) {
throw new TranslationException(OStrings.getString("RBFH_ERROR_ILLEGAL_U_SEQUENCE"), ex);
}
}
}
result.appendCodePoint(cp);
}
return result.toString();
}
use of org.omegat.filters2.TranslationException in project omegat by omegat-org.
the class XMLFilter method processFile.
/**
* Processes an XML file.
*/
@Override
public void processFile(File inFile, File outFile, FilterContext fc) throws IOException, TranslationException {
try (BufferedReader inReader = createReader(inFile, fc.getInEncoding())) {
inEncodingLastParsedFile = this.encoding;
targetLanguage = fc.getTargetLang();
InputSource source = new InputSource(inReader);
source.setSystemId(inFile.toURI().toString());
SAXParser parser = parserFactory.newSAXParser();
Handler handler = new Handler(this, dialect, inFile, outFile, fc);
parser.setProperty("http://xml.org/sax/properties/lexical-handler", handler);
parser.setProperty("http://xml.org/sax/properties/declaration-handler", handler);
parser.parse(source, handler);
} catch (ParserConfigurationException e) {
throw new TranslationException(e);
} catch (SAXException e) {
throw new TranslationException(e);
}
}
Aggregations