Search in sources :

Example 21 with XPathParseException

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

the class XLPHandler method getItems.

/**
	 * 得到配置文件中记录的所有项
	 * @param attrName
	 *            属性名
	 * @param values
	 *            属性值
	 * @return ;
	 */
public List<Map<String, String>> getItems(String attrName, List<String> values) {
    HashMap<String, Map<String, String>> map = new HashMap<String, Map<String, String>>();
    AutoPilot ap = new AutoPilot(vn);
    try {
        VTDUtils vu = new VTDUtils(vn);
        ap.selectXPath("/xlfedit-project/item[@" + attrName + "]");
        XMLModifier xm = new XMLModifier(vn);
        boolean isModified = false;
        while (ap.evalXPath() != -1) {
            int index = vn.getAttrVal(attrName);
            String value = index != -1 ? vn.toString(index) : "";
            if (values.contains(value) && !map.containsKey(value)) {
                Map<String, String> item = vu.getCurrentElementAttributs();
                if (item == null) {
                    item = new Hashtable<String, String>();
                }
                map.put(value, item);
            } else {
                // 去除无用的记录
                xm.remove();
                isModified = true;
            }
        }
        if (isModified) {
            save(xm);
        }
        for (String value : values) {
            if (!map.containsKey(value)) {
                HashMap<String, String> item = new HashMap<String, String>();
                item.put(attrName, value);
                map.put(value, item);
            }
        }
    } catch (XPathParseException e) {
        LOGGER.error("", e);
        e.printStackTrace();
    } catch (XPathEvalException e) {
        LOGGER.error("", e);
        e.printStackTrace();
    } catch (NavException e) {
        LOGGER.error("", e);
        e.printStackTrace();
    } catch (ModifyException e) {
        LOGGER.error("", e);
        e.printStackTrace();
    } catch (ParseException e) {
        LOGGER.error("", e);
        e.printStackTrace();
    } catch (TranscodeException e) {
        LOGGER.error("", e);
        e.printStackTrace();
    } catch (IOException e) {
        LOGGER.error("", e);
        e.printStackTrace();
    }
    // 按顺序添加
    ArrayList<Map<String, String>> items = new ArrayList<Map<String, String>>();
    for (String value : values) {
        items.add(map.get(value));
    }
    return items;
}
Also used : XMLModifier(com.ximpleware.XMLModifier) HashMap(java.util.HashMap) XPathEvalException(com.ximpleware.XPathEvalException) NavException(com.ximpleware.NavException) ArrayList(java.util.ArrayList) IOException(java.io.IOException) TranscodeException(com.ximpleware.TranscodeException) XPathParseException(com.ximpleware.XPathParseException) VTDUtils(net.heartsome.xml.vtdimpl.VTDUtils) AutoPilot(com.ximpleware.AutoPilot) ModifyException(com.ximpleware.ModifyException) XPathParseException(com.ximpleware.XPathParseException) ParseException(com.ximpleware.ParseException) HashMap(java.util.HashMap) Map(java.util.Map)

Example 22 with XPathParseException

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

the class QAXmlHandler method getTUPureTextOrContent.

/**
	 * 根据需求获取trans-unit下source或target的纯文本,或者整体内容
	 * @return	如果返回null,则证明这个节点是个空节点,要么没有这个节点,要么这个节点没有值
	 */
public String getTUPureTextOrContent(String xlfPath, String nodeXpath, boolean ignoreTag) {
    VTDNav vn = vnMap.get(xlfPath);
    AutoPilot ap = apMap.get(xlfPath);
    validNull(vn, ap, xlfPath);
    try {
        VTDUtils vUtils = new VTDUtils(vn);
        ap.selectXPath(nodeXpath);
        while (ap.evalXPath() != -1) {
            String content = vUtils.getElementContent();
            if (content == null || "".equals(content)) {
                return null;
            }
            // 如果忽略标记,就返回纯文本,否则返回整体内容
            if (ignoreTag) {
                return getTUPureText(vn);
            }
            return content;
        }
    } catch (NavException e) {
        e.printStackTrace();
        logger.error("", e);
    } catch (XPathParseException e) {
        e.printStackTrace();
        logger.error("", e);
    } catch (XPathEvalException e) {
        e.printStackTrace();
        logger.error("", e);
    }
    return null;
}
Also used : XPathParseException(com.ximpleware.XPathParseException) VTDUtils(net.heartsome.xml.vtdimpl.VTDUtils) AutoPilot(com.ximpleware.AutoPilot) NavException(com.ximpleware.NavException) XPathEvalException(com.ximpleware.XPathEvalException) VTDNav(com.ximpleware.VTDNav)

Example 23 with XPathParseException

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

the class XLFHandler method getFileCountInXliff.

/**
	 * 得到 File 节点个数(此方法仅用于解析单个文件时)
	 * @return ;
	 */
public int getFileCountInXliff(String fileName) {
    VTDNav vn = vnMap.get(fileName);
    Assert.isNotNull(vn, Messages.getString("file.XLFHandler.msg4") + fileName);
    AutoPilot ap = new AutoPilot(vn);
    try {
        ap.selectXPath("count(/xliff/file)");
        // 整个 xliff 文件中的
        int countAllFile = (int) ap.evalXPathToNumber();
        // file 节点的个数
        return countAllFile;
    } catch (XPathParseException e) {
        LOGGER.error("", e);
        e.printStackTrace();
    }
    return -1;
}
Also used : XPathParseException(com.ximpleware.XPathParseException) AutoPilot(com.ximpleware.AutoPilot) VTDNav(com.ximpleware.VTDNav)

Example 24 with XPathParseException

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

the class XLFHandler method mergeSegment.

/**
	 * 合并两个文本段(注意:rowId1 和 rowId2 有可能不相邻,中间可能会间隔几个源文为空的文本段)
	 * @param rowId1
	 *            第一个文本段的 rowId
	 * @param rowId2
	 *            第二个文本段的 rowId;
	 */
public String mergeSegment(String rowId1, String rowId2) {
    // if (rowIndex + 1 >= rowIds.size()) {
    // return "";
    // }
    // String rowId1 = getRowId(rowIndex);
    // String rowId2 = getRowId(rowIndex + 1);
    String fileName1 = RowIdUtil.getFileNameByRowId(rowId1);
    String fileName2 = RowIdUtil.getFileNameByRowId(rowId2);
    if (fileName1 == null || fileName2 == null || !fileName1.equals(fileName2)) {
        return "";
    }
    VTDNav vn = vnMap.get(fileName1);
    // TransUnitBean tuTop = getTransUnit(rowIndex);
    // TransUnitBean tuBottom = getTransUnit(rowIndex + 1);
    // String srcContent = tuTop.getSrcContent() + "<ph id=\"hs-merge" +
    // tuTop.getId() + "~" + tuBottom.getId()
    // + "\"/>" + tuBottom.getSrcContent();
    // tuTop.setSrcContent(srcContent);
    // String tgtContent = tuTop.getTgtContent() + "<ph id=\"hs-merge" +
    // tuTop.getId() + "~" + tuBottom.getId()
    // + "\"/>" + tuBottom.getTgtContent();
    // tuTop.setTgtContent(tgtContent);
    // tuTop.setMatches(null);
    //
    // String tuXPath1 = RowIdUtil.parseRowIdToXPath(rowId1);
    // String tuXPath2 = RowIdUtil.parseRowIdToXPath(rowId2);
    // AutoPilot ap = new AutoPilot(vn);
    //
    // XMLModifier xm = new XMLModifier(vn);
    // delete(ap, xm, fileName2, tuXPath2, true);
    // update(ap, xm, fileName1, tuXPath2, tuTop.toXMLString(), true);
    // ap.selectXPath(tuXPath2);
    //
    // saveAndReparse(xm, fileName1);
    String tuXPath1 = RowIdUtil.parseRowIdToXPath(rowId1);
    String tuXPath2 = RowIdUtil.parseRowIdToXPath(rowId2);
    String tuid1 = RowIdUtil.getTUIdByRowId(rowId1);
    String tuid2 = RowIdUtil.getTUIdByRowId(rowId2);
    // 不需加数据库
    boolean isNotSendToTM = false;
    // 是否是疑问行
    boolean isNeeds_review = false;
    // 是否添加属性“不需添加到数据库”
    boolean isAddNotSendToTm = false;
    // 是否添加属性“疑问行”
    boolean isAddNeeds_review = false;
    StringBuffer nodeSB = new StringBuffer();
    AutoPilot ap = new AutoPilot(vn);
    try {
        VTDUtils vu = new VTDUtils(vn);
        String oldElementFragment = "";
        ap.selectXPath(tuXPath1);
        String xmlSpace = null;
        if (ap.evalXPath() != -1) {
            xmlSpace = vu.getCurrentElementAttribut("xml:space", "preserve");
            oldElementFragment += vu.getElementFragment();
            // 获取当前tu节点的属性 hs:send-to-tm="no" hs:needs-review="yes"
            isNotSendToTM = "no".equals(vu.getCurrentElementAttribut("hs:send-to-tm", ""));
            isNeeds_review = "yes".equals(vu.getCurrentElementAttribut("hs:needs-review", ""));
        }
        ap.selectXPath(tuXPath2);
        if (ap.evalXPath() != -1) {
            oldElementFragment += vu.getElementFragment();
            if (!isNotSendToTM) {
                isAddNotSendToTm = "no".equals(vu.getCurrentElementAttribut("hs:send-to-tm", ""));
            }
            if (!isNeeds_review) {
                isAddNeeds_review = "yes".equals(vu.getCurrentElementAttribut("hs:needs-review", ""));
            }
            // 开始获取批注
            ap.selectXPath("./note");
            while (ap.evalXPath() != -1) {
                nodeSB.append(vu.getElementFragment());
            }
        }
        XMLModifier xm = new XMLModifier(vn);
        String sourceContent2 = "";
        String targetContent2 = "";
        ap.selectXPath(tuXPath2 + "/source");
        String srcLang = null;
        if (ap.evalXPath() != -1) {
            srcLang = vu.getCurrentElementAttribut("xml:lang", null);
            sourceContent2 = vu.getElementContent();
            sourceContent2 = sourceContent2 == null ? "" : sourceContent2;
        }
        ap.selectXPath(tuXPath2 + "/target");
        if (ap.evalXPath() != -1) {
            targetContent2 = vu.getElementContent();
            targetContent2 = targetContent2 == null ? "" : targetContent2;
        }
        String curTime = "" + System.nanoTime();
        ap.selectXPath(tuXPath1 + "/source");
        if (ap.evalXPath() != -1) {
            String sourceContent1 = vu.getElementContent();
            sourceContent1 = sourceContent1 == null ? "" : sourceContent1;
            String newValue = sourceContent1 + "<ph id=\"hs-merge" + tuid1 + "~" + tuid2 + "\" splitMergeIndex=\"" + curTime + "\"/>" + sourceContent2;
            vu.update(ap, xm, tuXPath1 + "/source/text()", newValue);
        }
        ap.selectXPath(tuXPath1 + "/target");
        if (ap.evalXPath() != -1) {
            String targetContent1 = vu.getElementContent();
            targetContent1 = targetContent1 == null ? "" : targetContent1;
            String newValue = targetContent1 + "<ph id=\"hs-merge" + tuid1 + "~" + tuid2 + "\" splitMergeIndex=\"" + curTime + "\"/>" + targetContent2;
            vu.update(ap, xm, tuXPath1 + "/target/text()", newValue);
        } else {
            String newValue = "<ph id=\"hs-merge" + tuid1 + "~" + tuid2 + "\" splitMergeIndex=\"" + curTime + "\"/>" + targetContent2;
            vu.insert(ap, xm, tuXPath1 + "/target/text()", newValue);
        }
        // 移除alt-trans节点
        ap.selectXPath(tuXPath1 + "/alt-trans");
        while (ap.evalXPath() != -1) {
            xm.remove();
        }
        ap.selectXPath(tuXPath2);
        if (ap.evalXPath() != -1) {
            // xm.remove();
            // Bug #1054:合并文本段时不应丢失第二个文本段的 trans-unit 节点
            String transUnit = "<trans-unit id=\"" + tuid2 + "\" xml:space=\"" + xmlSpace + "\"><target/>" + "<source xml:lang=\"" + srcLang + "\"/></trans-unit>";
            vu.update(ap, xm, tuXPath2, transUnit);
        }
        // 整合并集中的属性以及批注
        ap.selectXPath(tuXPath1);
        if (ap.evalXPath() != -1) {
            // 注意添加属性时必须保持应有的空格
            String insertAttri = isAddNotSendToTm ? " hs:send-to-tm=\"no\" " : "";
            insertAttri += isAddNeeds_review ? " hs:needs-review=\"yes\" " : "";
            if (insertAttri.length() > 0) {
                xm.insertAttribute(insertAttri);
            }
            // 开始添加批注
            if (nodeSB.length() > 0) {
                xm.insertBeforeTail(nodeSB.toString().getBytes("UTF-8"));
            }
            vn.push();
            // 开始处理合并后的状态,保持草稿状态
            ap.selectXPath("./target");
            if (ap.evalXPath() != -1) {
                int index = vn.getAttrVal("state");
                if (index != -1) {
                    xm.updateToken(index, "new");
                } else {
                    xm.insertAttribute(" state=\"new\" ");
                }
            }
            vn.pop();
            // 删除批准状态
            int index = vn.getAttrVal("approved");
            if (index != -1) {
                xm.removeAttribute(index - 1);
            }
        }
        saveAndReparse(xm, fileName1);
        // 删除下面的行
        rowIds.remove(rowId2);
        tuSizeMap.put(fileName1, tuSizeMap.get(fileName1) - 1);
        return oldElementFragment;
    } catch (XPathParseException e) {
        LOGGER.error("", e);
        e.printStackTrace();
    } catch (XPathEvalException e) {
        LOGGER.error("", e);
        e.printStackTrace();
    } catch (NavException e) {
        LOGGER.error("", e);
        e.printStackTrace();
    } catch (ModifyException e) {
        LOGGER.error("", e);
        e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
        LOGGER.error("", e);
        e.printStackTrace();
    }
    return "";
}
Also used : XMLModifier(com.ximpleware.XMLModifier) XPathEvalException(com.ximpleware.XPathEvalException) NavException(com.ximpleware.NavException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) XPathParseException(com.ximpleware.XPathParseException) VTDUtils(net.heartsome.xml.vtdimpl.VTDUtils) AutoPilot(com.ximpleware.AutoPilot) ModifyException(com.ximpleware.ModifyException) VTDNav(com.ximpleware.VTDNav)

Example 25 with XPathParseException

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

the class PreMachineTranslation method executeTranslation.

/**
	 * 根据构建参数执行预翻译 ;
	 * @throws InterruptedException
	 */
public List<PreMachineTranslationCounter> executeTranslation(IProgressMonitor monitor) throws InterruptedException {
    if (monitor == null) {
        monitor = new NullProgressMonitor();
    }
    simpleMatchers = getMacthers();
    if (null == simpleMatchers || simpleMatchers.isEmpty()) {
        return this.transCounters;
    }
    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 PreMachineTranslationCounter(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;
                }
                keepCurrentMatchs(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) PreMachineTranslationCounter(net.heartsome.cat.ts.machinetranslation.bean.PreMachineTranslationCounter) 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) 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)

Aggregations

XPathParseException (com.ximpleware.XPathParseException)71 NavException (com.ximpleware.NavException)66 XPathEvalException (com.ximpleware.XPathEvalException)66 AutoPilot (com.ximpleware.AutoPilot)65 VTDNav (com.ximpleware.VTDNav)46 VTDUtils (net.heartsome.xml.vtdimpl.VTDUtils)36 ModifyException (com.ximpleware.ModifyException)17 ArrayList (java.util.ArrayList)17 XMLModifier (com.ximpleware.XMLModifier)15 IOException (java.io.IOException)15 VTDGen (com.ximpleware.VTDGen)14 UnsupportedEncodingException (java.io.UnsupportedEncodingException)13 HashMap (java.util.HashMap)9 ParseException (com.ximpleware.ParseException)8 TranscodeException (com.ximpleware.TranscodeException)7 FileNotFoundException (java.io.FileNotFoundException)7 FileOutputStream (java.io.FileOutputStream)6 EOFException (com.ximpleware.EOFException)5 EncodingException (com.ximpleware.EncodingException)5 EntityException (com.ximpleware.EntityException)5