Search in sources :

Example 1 with IFilter

use of org.omegat.filters2.IFilter 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;
}
Also used : IFilter(org.omegat.filters2.IFilter) Filter(gen.core.filters.Filter) AbstractFilter(org.omegat.filters2.AbstractFilter) IFilter(org.omegat.filters2.IFilter) Files(gen.core.filters.Files)

Example 2 with IFilter

use of org.omegat.filters2.IFilter 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);
    }
}
Also used : IFilter(org.omegat.filters2.IFilter) TranslationException(org.omegat.filters2.TranslationException) File(java.io.File) TranslationException(org.omegat.filters2.TranslationException) IOException(java.io.IOException)

Example 3 with IFilter

use of org.omegat.filters2.IFilter 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;
}
Also used : IFilter(org.omegat.filters2.IFilter) IOException(java.io.IOException) File(java.io.File) TranslationException(org.omegat.filters2.TranslationException) IOException(java.io.IOException)

Example 4 with IFilter

use of org.omegat.filters2.IFilter in project omegat by omegat-org.

the class FilterMaster method isFileSupported.

/**
 * Check to see if a file is supported by any filter. When
 * <code>quick</code> is true, only the filename will be checked to see if
 * it matches known supported patterns. When false, the filter may have to
 * actually load some or all of the file in order to determine whether or
 * not it is supported.
 *
 * @param file
 *            The file to check
 * @param quick
 *            When true, check only the file name
 * @return Whether or not the file is supported
 */
public boolean isFileSupported(File file, boolean quick) {
    FilterContext fc = new FilterContext(null, null, true);
    for (Filter f : config.getFilters()) {
        if (!f.isEnabled()) {
            continue;
        }
        for (Files ff : f.getFiles()) {
            boolean matchesMask = matchesMask(file.getName(), ff.getSourceFilenameMask());
            if (!matchesMask) {
                continue;
            }
            if (quick && matchesMask) {
                return true;
            }
            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(file, config, fc)) {
                break;
            }
            return true;
        }
    }
    return false;
}
Also used : IFilter(org.omegat.filters2.IFilter) Filter(gen.core.filters.Filter) AbstractFilter(org.omegat.filters2.AbstractFilter) IFilter(org.omegat.filters2.IFilter) Files(gen.core.filters.Files) FilterContext(org.omegat.filters2.FilterContext)

Example 5 with IFilter

use of org.omegat.filters2.IFilter in project omegat by omegat-org.

the class FilterEditor method addButtonActionPerformed.

// GEN-LAST:event_toDefaultsButtonActionPerformed
private void addButtonActionPerformed(java.awt.event.ActionEvent evt) {
    // GEN-FIRST:event_addButtonActionPerformed
    IFilter f = FilterMaster.getFilterInstance(filter.getClassName());
    if (f == null) {
        return;
    }
    InstanceEditor ie = new InstanceEditor(this, f.isSourceEncodingVariable(), f.isTargetEncodingVariable(), f.getHint());
    ie.setVisible(true);
    if (ie.getReturnStatus() == InstanceEditor.RET_OK) {
        Files ff = new Files();
        ff.setSourceEncoding(setEncodingName(ie.getSourceEncoding()));
        ff.setSourceFilenameMask(ie.getSourceFilenameMask());
        ff.setTargetEncoding(setEncodingName(ie.getTargetEncoding()));
        ff.setTargetFilenamePattern(ie.getTargetFilenamePattern());
        filter.getFiles().add(ff);
        instances.setModel(new OneFilterTableModel(filter));
    }
}
Also used : IFilter(org.omegat.filters2.IFilter) OneFilterTableModel(org.omegat.filters2.master.OneFilterTableModel) Files(gen.core.filters.Files)

Aggregations

IFilter (org.omegat.filters2.IFilter)19 File (java.io.File)8 Files (gen.core.filters.Files)5 ArrayList (java.util.ArrayList)5 FilterContext (org.omegat.filters2.FilterContext)5 IParseCallback (org.omegat.filters2.IParseCallback)5 Filter (gen.core.filters.Filter)4 Test (org.junit.Test)4 ProtectedPart (org.omegat.core.data.ProtectedPart)4 IAlignCallback (org.omegat.filters2.IAlignCallback)4 IOException (java.io.IOException)3 AbstractFilter (org.omegat.filters2.AbstractFilter)3 TranslationException (org.omegat.filters2.TranslationException)3 OneFilterTableModel (org.omegat.filters2.master.OneFilterTableModel)2 MouseAdapter (java.awt.event.MouseAdapter)1 MouseEvent (java.awt.event.MouseEvent)1 RandomAccessFile (java.io.RandomAccessFile)1 List (java.util.List)1 Map (java.util.Map)1 TreeMap (java.util.TreeMap)1