Search in sources :

Example 56 with AutoPilot

use of com.ximpleware.AutoPilot in project translationstudio8 by heartsome.

the class PreTranslation method executeTranslation.

/**
	 * 根据构建参数执行预翻译 ;
	 * @throws InterruptedException
	 */
public List<PreTranslationCounter> executeTranslation(IProgressMonitor monitor) throws InterruptedException {
    if (monitor == null) {
        monitor = new NullProgressMonitor();
    }
    monitor.beginTask("", this.xlfFiles.size());
    monitor.setTaskName(Messages.getString("pretranslation.PreTranslation.task1"));
    try {
        for (String xlfPath : xlfFiles) {
            if (monitor != null && monitor.isCanceled()) {
                throw new InterruptedException();
            }
            currentCounter = new PreTranslationCounter(xlfPath);
            this.transCounters.add(currentCounter);
            VTDNav vn = xlfHandler.getVnMap().get(xlfPath);
            VTDUtils vu = new VTDUtils(vn);
            AutoPilot ap = new AutoPilot(vu.getVTDNav());
            int tuNumber = xlfHandler.getNodeCount(xlfPath, "/xliff/file//descendant::trans-unit[(source/text()!='' or source/*)]");
            currentCounter.setTuNumber(tuNumber);
            ap.selectXPath("/xliff/file");
            String srcLang = "";
            String tgtLang = "";
            XMLModifier xm = new XMLModifier(vn);
            IProgressMonitor monitor2 = new SubProgressMonitor(monitor, 1);
            monitor2.beginTask(Messages.getString("pretranslation.PreTranslation.task2"), tuNumber);
            while (ap.evalXPath() != -1) {
                // 循环 file 节点
                String _srcLang = vu.getCurrentElementAttribut("source-language", "");
                String _tgtLang = vu.getCurrentElementAttribut("target-language", "");
                if (!_srcLang.equals("")) {
                    srcLang = _srcLang;
                }
                if (!_tgtLang.equals("")) {
                    tgtLang = _tgtLang;
                }
                if (srcLang.equals("") || tgtLang.equals("")) {
                    continue;
                }
                if (updateStrategy == PreTransParameters.KEEP_OLD_TARGET) {
                    keepCurrentMatchs(vu, _srcLang, _tgtLang, xm, monitor2);
                } else if (updateStrategy == PreTransParameters.KEEP_BEST_MATCH_TARGET) {
                    keepHigherMatchs(vu, _srcLang, _tgtLang, xm, monitor2);
                } else if (updateStrategy == PreTransParameters.KEEP_NEW_TARGET) {
                    overwriteMatchs(vu, srcLang, tgtLang, xm, monitor2);
                }
            }
            monitor2.done();
            FileOutputStream fos = new FileOutputStream(xlfPath);
            BufferedOutputStream bos = new BufferedOutputStream(fos);
            // 写入文件
            xm.output(bos);
            bos.close();
            fos.close();
        }
    } catch (XPathParseException e) {
        logger.error("", e);
        e.printStackTrace();
    } catch (NavException e) {
        logger.error("", e);
        e.printStackTrace();
    } catch (ModifyException e) {
        logger.error("", e);
        e.printStackTrace();
    } catch (XPathEvalException e) {
        logger.error("", e);
        e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
        logger.error("", e);
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        logger.error("", e);
        e.printStackTrace();
    } catch (TranscodeException e) {
        logger.error("", e);
        e.printStackTrace();
    } catch (IOException e) {
        logger.error("", e);
        e.printStackTrace();
    }
    monitor.done();
    return this.transCounters;
}
Also used : NullProgressMonitor(org.eclipse.core.runtime.NullProgressMonitor) XMLModifier(com.ximpleware.XMLModifier) NavException(com.ximpleware.NavException) XPathEvalException(com.ximpleware.XPathEvalException) FileNotFoundException(java.io.FileNotFoundException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) IOException(java.io.IOException) SubProgressMonitor(org.eclipse.core.runtime.SubProgressMonitor) TranscodeException(com.ximpleware.TranscodeException) XPathParseException(com.ximpleware.XPathParseException) PreTranslationCounter(net.heartsome.cat.ts.pretranslation.bean.PreTranslationCounter) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) VTDUtils(net.heartsome.xml.vtdimpl.VTDUtils) AutoPilot(com.ximpleware.AutoPilot) FileOutputStream(java.io.FileOutputStream) ModifyException(com.ximpleware.ModifyException) VTDNav(com.ximpleware.VTDNav) BufferedOutputStream(java.io.BufferedOutputStream)

Example 57 with AutoPilot

use of com.ximpleware.AutoPilot in project translationstudio8 by heartsome.

the class PreTranslation method getTuContext.

private void getTuContext(VTDUtils vu, int contextSize, TransUnitInfo2TranslationBean tuInfo) {
    AutoPilot ap = new AutoPilot(vu.getVTDNav());
    String preContext = xlfHandler.getContext(vu, ap, contextSize, true);
    String nextContext = xlfHandler.getContext(vu, ap, contextSize, false);
    tuInfo.setPreContext(preContext);
    tuInfo.setNextContext(nextContext);
}
Also used : AutoPilot(com.ximpleware.AutoPilot)

Example 58 with AutoPilot

use of com.ximpleware.AutoPilot in project translationstudio8 by heartsome.

the class ExportDocxDialog method beginExport.

/**
	 * 开始导出功能
	 */
private void beginExport(IProgressMonitor monitor, final String docxPath, boolean exportComment, boolean exportStatus, String expandXpath) throws Exception {
    if (monitor == null) {
        monitor = new NullProgressMonitor();
    }
    VTDGen vg = new VTDGen();
    if (!vg.parseFile(strXliffFullPath, true)) {
        final String parseErrorTip = MessageFormat.format(Messages.getString("ExportDocxDialog.parseError"), ResourceUtils.fileToIFile(docxPath).getFullPath().toOSString());
        Display.getDefault().syncExec(new Runnable() {

            @Override
            public void run() {
                MessageDialog.openError(getShell(), Messages.getString("all.dialog.warning"), parseErrorTip);
            }
        });
        throw new Exception(parseErrorTip);
    }
    monitor.worked(1);
    VTDNav vn = vg.getNav();
    VTDUtils vu = new VTDUtils(vn);
    AutoPilot ap = new AutoPilot(vn);
    ap.declareXPathNameSpace("hs", "http://www.heartsome.net.cn/2008/XLFExtension");
    otherAP = new AutoPilot(vn);
    otherAP.declareXPathNameSpace("hs", "http://www.heartsome.net.cn/2008/XLFExtension");
    AutoPilot childAP = new AutoPilot(vn);
    childAP.declareXPathNameSpace("hs", "http://www.heartsome.net.cn/2008/XLFExtension");
    String srcLang = "";
    String tgtLang = "";
    // 备注:目前只支持处理一种目标语言的情况
    ap.selectXPath("/xliff//file[1]");
    if (ap.evalXPath() != -1) {
        srcLang = vu.getCurrentElementAttribut("source-language", "");
        tgtLang = vu.getCurrentElementAttribut("target-language", "");
    }
    if ("".equals(srcLang)) {
        Display.getDefault().syncExec(new Runnable() {

            @Override
            public void run() {
                MessageDialog.openWarning(getShell(), Messages.getString("all.dialog.warning"), Messages.getString("ExportDocxDialog.ok.msg1"));
            }
        });
        LOGGER.error(Messages.getString("ExportDocxDialog.ok.msg1"));
    }
    if ("".equals(tgtLang)) {
        Display.getDefault().syncExec(new Runnable() {

            @Override
            public void run() {
                MessageDialog.openWarning(getShell(), Messages.getString("all.dialog.warning"), Messages.getString("ExportDocxDialog.ok.msg2"));
            }
        });
        LOGGER.error(Messages.getString("ExportDocxDialog.ok.msg2"));
    }
    String xpath = "/xliff/file[@source-language='" + srcLang + "' and @target-language='" + tgtLang + "']/body/descendant::trans-unit[(source/text()!='' or source/*)" + expandXpath + "]";
    ap.selectXPath(xpath);
    List<TUBean> tuDataList = new ArrayList<TUBean>();
    String rowId = "";
    int status = DocxConstant.STATUS_unstrans;
    boolean approved = false;
    boolean isLocked = false;
    boolean isNotSendToTm = false;
    boolean needsReview = false;
    int index = -1;
    while (ap.evalXPath() != -1) {
        status = DocxConstant.STATUS_unstrans;
        approved = false;
        isLocked = false;
        isNotSendToTm = false;
        needsReview = false;
        TUBean bean = new TUBean();
        rowId = RowIdUtil.getSpecialRowId(vn);
        bean.setRowId(rowId);
        // 是否批准
        if ((index = vn.getAttrVal("approved")) != -1) {
            if ("yes".equals(vn.toString(index))) {
                approved = true;
            }
        }
        // 是否锁定
        if ((index = vn.getAttrVal("translate")) != -1) {
            if ("no".equals(vn.toString(index))) {
                isLocked = true;
            }
        }
        // 是否不发送数据库
        if ((index = vn.getAttrVal("hs:send-to-tm")) != -1) {
            if ("no".equals(vn.toString(index))) {
                isNotSendToTm = true;
            }
        }
        // 是否是疑问文本段
        if ((index = vn.getAttrVal("hs:needs-review")) != -1) {
            if ("yes".equals(vn.toString(index))) {
                needsReview = true;
            }
        }
        vn.push();
        childAP.selectXPath("./source");
        if (childAP.evalXPath() != -1) {
            bean.setSrcText(vu.getElementContent());
        }
        vn.pop();
        vn.push();
        childAP.selectXPath("./target");
        if (childAP.evalXPath() != -1) {
            if ((index = vn.getAttrVal("state")) != -1) {
                String stateStr = vn.toString(index);
                if ("new".equals(stateStr)) {
                    // 草稿
                    status = DocxConstant.STATUS_draft;
                } else if ("translated".equals(stateStr)) {
                    if (approved) {
                        // 批准翻译
                        status = DocxConstant.STATUS_approved;
                    } else {
                        // 完成翻译
                        status = DocxConstant.STATUS_translated;
                    }
                } else if ("signed-off".equals(stateStr) && approved) {
                    // 签发
                    status = DocxConstant.STATUS_signedOff;
                }
            }
            bean.setTgtText(vu.getElementContent());
        } else {
            status = DocxConstant.STATUS_unstrans;
        }
        vn.pop();
        // 这里参照界面上状态的写法,分三个部份,第一个为(草稿,已翻译,完成翻译,批注,签发,锁定), 第二部份为不送至库,第三部份为疑问。
        String beanStatus = "";
        if (isLocked) {
            beanStatus += Messages.getString("ExportDocxDialog.ok.status.locked");
        } else {
            switch(status) {
                case DocxConstant.STATUS_unstrans:
                    beanStatus += Messages.getString("ExportDocxDialog.ok.status.unstrans");
                    break;
                case DocxConstant.STATUS_draft:
                    beanStatus += Messages.getString("ExportDocxDialog.ok.status.draft");
                    break;
                case DocxConstant.STATUS_translated:
                    beanStatus += Messages.getString("ExportDocxDialog.ok.status.translated");
                    break;
                case DocxConstant.STATUS_approved:
                    beanStatus += Messages.getString("ExportDocxDialog.ok.status.approved");
                    break;
                case DocxConstant.STATUS_signedOff:
                    beanStatus += Messages.getString("ExportDocxDialog.ok.status.signedOff");
                    break;
                default:
                    break;
            }
        }
        if (isNotSendToTm) {
            beanStatus += "、";
            beanStatus += Messages.getString("ExportDocxDialog.ok.status.NotSendToTm");
        }
        if (needsReview) {
            beanStatus += "、";
            beanStatus += Messages.getString("ExportDocxDialog.ok.status.Review");
        }
        bean.setStatus(beanStatus);
        getComments(vn, vu, bean);
        bean.setIndex("" + (tuDataList.size() + 1));
        tuDataList.add(bean);
    }
    monitor.worked(1);
    // 开始导出操作。规划出 subMonitor
    IProgressMonitor subMonitor = new SubProgressMonitor(monitor, 18, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK);
    ExportDocx wordOutput = new ExportDocx(srcLang, tgtLang, docxPath, getShell(), exportComment, exportStatus);
    wordOutput.output(tuDataList, subMonitor);
    subMonitor.done();
}
Also used : NullProgressMonitor(org.eclipse.core.runtime.NullProgressMonitor) ArrayList(java.util.ArrayList) VTDGen(com.ximpleware.VTDGen) CoreException(org.eclipse.core.runtime.CoreException) OperationCanceledException(org.eclipse.core.runtime.OperationCanceledException) SubProgressMonitor(org.eclipse.core.runtime.SubProgressMonitor) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) VTDUtils(net.heartsome.xml.vtdimpl.VTDUtils) TUBean(net.heartsome.cat.ts.ui.docx.common.TUBean) AutoPilot(com.ximpleware.AutoPilot) ExportDocx(net.heartsome.cat.ts.ui.docx.ExportDocx) VTDNav(com.ximpleware.VTDNav)

Example 59 with AutoPilot

use of com.ximpleware.AutoPilot in project translationstudio8 by heartsome.

the class ADXmlHandler method updataDataToXml.

/**
	 * 修改数据(修改整个节点)
	 * @param xmlLocation
	 * @param xpath
	 * @param newData ;
	 */
public boolean updataDataToXml(String xmlLocation, String xpath, String newData) {
    VTDNav vn = super.getVTDNav(xmlLocation);
    AutoPilot ap = new AutoPilot(vn);
    try {
        VTDUtils vu = new VTDUtils(vn);
        ap.selectXPath(xpath);
        if (ap.evalXPath() != -1) {
            return saveAndReparse(vu.update(xpath, newData), xmlLocation);
        }
    } catch (Exception e) {
        LOGGER.error("", e);
    }
    return false;
}
Also used : VTDUtils(net.heartsome.xml.vtdimpl.VTDUtils) AutoPilot(com.ximpleware.AutoPilot) VTDNav(com.ximpleware.VTDNav)

Example 60 with AutoPilot

use of com.ximpleware.AutoPilot in project translationstudio8 by heartsome.

the class ADXmlHandler method getLanguageRuleNamesOfSrx_2.

/**
	 * 获取语言规则的名称,返回结果为list<String>类型
	 * @param srxLocation
	 * @return ;
	 */
public List<String> getLanguageRuleNamesOfSrx_2(String srxLocation) {
    List<String> langRuleNames = new LinkedList<String>();
    VTDNav vn = super.getVTDNav(srxLocation);
    AutoPilot ap = new AutoPilot(vn);
    try {
        ap.selectXPath("/srx/body/languagerules/languagerule");
        while (ap.evalXPath() != -1) {
            if (vn.getAttrVal("languagerulename") != -1) {
                langRuleNames.add(vn.toString(vn.getAttrVal("languagerulename")));
            }
        }
    } catch (Exception e) {
        LOGGER.error("", e);
    }
    return langRuleNames;
}
Also used : AutoPilot(com.ximpleware.AutoPilot) VTDNav(com.ximpleware.VTDNav) LinkedList(java.util.LinkedList)

Aggregations

AutoPilot (com.ximpleware.AutoPilot)308 VTDNav (com.ximpleware.VTDNav)173 NavException (com.ximpleware.NavException)150 XPathParseException (com.ximpleware.XPathParseException)145 XPathEvalException (com.ximpleware.XPathEvalException)137 VTDUtils (net.heartsome.xml.vtdimpl.VTDUtils)112 IOException (java.io.IOException)103 ModifyException (com.ximpleware.ModifyException)95 TranscodeException (com.ximpleware.TranscodeException)82 CoreException (org.eclipse.core.runtime.CoreException)76 UnsupportedEncodingException (java.io.UnsupportedEncodingException)58 VTDGen (com.ximpleware.VTDGen)50 FileNotFoundException (java.io.FileNotFoundException)49 XMLModifier (com.ximpleware.XMLModifier)46 OperationCanceledException (org.eclipse.core.runtime.OperationCanceledException)44 ArrayList (java.util.ArrayList)42 HashMap (java.util.HashMap)39 XQException (javax.xml.xquery.XQException)37 LinkedHashMap (java.util.LinkedHashMap)34 LinkedList (java.util.LinkedList)25