Search in sources :

Example 21 with VTDNav

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

the class XLFValidator method getProjectLang.

/**
	 * 获取 iFile 所在项目的源语言与目标语言
	 * @param iFile
	 * @return 数组中的第一个值为源语言,类型为 Language;第二个值为目标语言集合,类型为 List<Language>
	 * @throws NavException
	 * @throws XPathParseException
	 * @throws XPathEvalException
	 *             ;
	 */
private static Object[] getProjectLang(IFile iFile) throws NavException, XPathParseException, XPathEvalException {
    String projectFilePath = iFile.getProject().getLocation().toOSString() + System.getProperty("file.separator") + ".config";
    if (mapProjectLang.containsKey(projectFilePath)) {
        return mapProjectLang.get(projectFilePath);
    }
    VTDGen vg = new VTDGen();
    if (vg.parseFile(projectFilePath, true)) {
        VTDNav vn = vg.getNav();
        VTDUtils vu = new VTDUtils(vn);
        AutoPilot ap = new AutoPilot(vn);
        ap.selectXPath("/projectDescription/hs/language/source");
        Object[] arrObj = new Object[2];
        if (ap.evalXPath() != -1) {
            String code = vu.getCurrentElementAttribut("code", "");
            String name = vu.getElementContent();
            String image = vu.getCurrentElementAttribut("image", "");
            String isBidi = vu.getCurrentElementAttribut("isbidi", "No");
            arrObj[0] = new Language(code, name, image, isBidi.equals("NO") ? false : true);
        }
        ap.selectXPath("/projectDescription/hs/language/target");
        List<Language> targetLangs = new ArrayList<Language>();
        while (ap.evalXPath() != -1) {
            String code = vu.getCurrentElementAttribut("code", "");
            String name = vu.getElementContent();
            String image = vu.getCurrentElementAttribut("image", "");
            String isBidi = vu.getCurrentElementAttribut("isbidi", "false");
            targetLangs.add(new Language(code, name, image, isBidi.equals("false") ? false : true));
        }
        arrObj[1] = targetLangs;
        return arrObj;
    } else {
        return null;
    }
}
Also used : Language(net.heartsome.cat.common.locale.Language) VTDUtils(net.heartsome.xml.vtdimpl.VTDUtils) AutoPilot(com.ximpleware.AutoPilot) ArrayList(java.util.ArrayList) VTDGen(com.ximpleware.VTDGen) VTDNav(com.ximpleware.VTDNav)

Example 22 with VTDNav

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

the class Txt2Tmx method getSrclangAndTuOffset.

/**
	 * 获取源语言,计算 tmx 文档的 最后 tu 的偏移,以便附加新内容
	 * @param file
	 * @return
	 */
private void getSrclangAndTuOffset(String file) throws Exception {
    // 检测追加文件的源语言
    String appendFileSrcLang = "";
    VTDGen vg = new VTDGen();
    if (!vg.parseFile(file, true)) {
        Exception e = new Exception(Messages.getString("tmxdata.TmxFileContainer.parseTmxFileError"));
        LOGGER.error(e.getMessage());
        throw e;
    }
    try {
        VTDNav vn = vg.getNav();
        AutoPilot ap = new AutoPilot(vn);
        ap.selectXPath("/tmx/header/@srclang");
        if (ap.evalXPath() != -1) {
            appendFileSrcLang = vn.toString(vn.getCurrentIndex() + 1);
        } else {
            LOGGER.error(Messages.getString("tmxdata.TmxFileContainer.parseTmxFileContentError"));
        }
        ap.resetXPath();
        ap.selectXPath("/tmx/body/tu[last()]");
        if (ap.evalXPath() != -1) {
            long l = vn.getElementFragment();
            int offset = (int) l;
            int length = (int) (l >> 32);
            appendOffset = offset + length;
        }
    } catch (Exception e) {
        LOGGER.error("程序错误", e);
    }
    appendSrclang = appendFileSrcLang;
}
Also used : AutoPilot(com.ximpleware.AutoPilot) VTDGen(com.ximpleware.VTDGen) VTDNav(com.ximpleware.VTDNav) IOException(java.io.IOException) FileNotFoundException(java.io.FileNotFoundException) UnsupportedEncodingException(java.io.UnsupportedEncodingException)

Example 23 with VTDNav

use of com.ximpleware.VTDNav 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 24 with VTDNav

use of com.ximpleware.VTDNav 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 25 with VTDNav

use of com.ximpleware.VTDNav 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)

Aggregations

VTDNav (com.ximpleware.VTDNav)206 AutoPilot (com.ximpleware.AutoPilot)177 NavException (com.ximpleware.NavException)128 XPathParseException (com.ximpleware.XPathParseException)115 XPathEvalException (com.ximpleware.XPathEvalException)110 VTDUtils (net.heartsome.xml.vtdimpl.VTDUtils)99 IOException (java.io.IOException)85 ModifyException (com.ximpleware.ModifyException)81 TranscodeException (com.ximpleware.TranscodeException)69 CoreException (org.eclipse.core.runtime.CoreException)69 XMLModifier (com.ximpleware.XMLModifier)53 UnsupportedEncodingException (java.io.UnsupportedEncodingException)49 FileNotFoundException (java.io.FileNotFoundException)46 VTDGen (com.ximpleware.VTDGen)45 OperationCanceledException (org.eclipse.core.runtime.OperationCanceledException)43 XQException (javax.xml.xquery.XQException)37 LinkedHashMap (java.util.LinkedHashMap)27 ArrayList (java.util.ArrayList)26 HashMap (java.util.HashMap)25 LinkedList (java.util.LinkedList)23