use of com.ximpleware.VTDNav in project translationstudio8 by heartsome.
the class DocUtils method isTBX.
/**
* 判断是否是正确的 TBX 文件
* @param fileName
* TBX 文件的全路径
* @return 反回null,验证失败
* @throws ParseException
* @throws EntityException
* @throws EOFException
* @throws EncodingException
* @throws FileNotFoundException
*/
public static VTDUtils isTBX(String fileName) throws EncodingException, ParseException, FileNotFoundException {
VTDGen vg = new VTDGen();
FileInputStream fis = null;
File f = null;
try {
f = new File(fileName);
fis = new FileInputStream(f);
byte[] b = new byte[(int) f.length()];
int offset = 0;
int numRead = 0;
// I choose this value randomally,
int numOfBytes = 1048576;
// any other (not too big) value also can be here.
if (b.length - offset < numOfBytes) {
numOfBytes = b.length - offset;
}
while (offset < b.length && (numRead = fis.read(b, offset, numOfBytes)) >= 0) {
offset += numRead;
if (b.length - offset < numOfBytes) {
numOfBytes = b.length - offset;
}
}
vg.setDoc(b);
vg.parse(true);
} catch (IOException e) {
LOGGER.error(Messages.getString("document.DocUtils.logger1"), e);
} finally {
if (fis != null) {
try {
fis.close();
} catch (Exception e) {
}
}
}
VTDNav vn = vg.getNav();
AutoPilot ap = new AutoPilot(vn);
String rootPath = "/martif";
VTDUtils vtdUtils = new VTDUtils();
try {
vtdUtils.bind(vn);
ap.selectXPath(rootPath);
if (ap.evalXPath() == -1) {
// } else {
return null;
}
} catch (NavException e) {
LOGGER.error(Messages.getString("document.DocUtils.logger2"), e);
return null;
} catch (XPathEvalException e) {
LOGGER.error(Messages.getString("document.DocUtils.logger2"), e);
return null;
} catch (XPathParseException e) {
LOGGER.error(Messages.getString("document.DocUtils.logger2"), e);
return null;
} finally {
vg.clear();
}
return vtdUtils;
}
use of com.ximpleware.VTDNav in project translationstudio8 by heartsome.
the class TmxReader method readTuElementAttribute.
private void readTuElementAttribute(TmxTU tu) throws VTDException {
VTDNav vn = vu.getVTDNav();
vn.push();
AutoPilot apAttributes = new AutoPilot(vu.getVTDNav());
apAttributes.selectXPath("@*");
int inx = -1;
while ((inx = apAttributes.evalXPath()) != -1) {
String name = vn.toString(inx);
inx = vn.getAttrVal(name);
String value = inx != -1 ? vn.toString(inx) : "";
// creationid, changedate, segtype, changeid, o-tmf, srclang.
if (name.equals("tuid")) {
tu.setTuId(value);
} else if (name.equals("creationtool")) {
tu.setCreationTool(value);
} else if (name.equals("creationtoolversion")) {
tu.setCreationToolVersion(value);
} else if (name.equals("creationdate")) {
tu.setCreationDate(value);
} else if (name.equals("creationid")) {
tu.setCreationUser(value);
} else if (name.equals("changedate")) {
tu.setChangeDate(value);
} else if (name.equals("changeid")) {
tu.setChangeUser(value);
} else {
tu.appendAttribute(name, value);
}
}
vn.pop();
}
use of com.ximpleware.VTDNav in project translationstudio8 by heartsome.
the class TmxReader method readTuNoteElement.
private void readTuNoteElement(TmxTU tu) throws VTDException {
VTDNav vn = vu.getVTDNav();
vn.push();
AutoPilot ap = new AutoPilot(vn);
ap.selectXPath("./note");
while (ap.evalXPath() != -1) {
String fragment = vu.getElementFragment();
TmxNote note = new TmxNote();
note.setContent(fragment);
int inx = vn.getAttrVal("xml:lang");
String value = inx != -1 ? vn.toString(inx) : null;
if (value != null) {
note.setXmlLang(value);
}
inx = vn.getAttrVal("o-encoding");
value = inx != -1 ? vn.toString(inx) : null;
if (value != null) {
note.setXmlLang(value);
}
tu.appendNote(note);
}
vn.pop();
}
use of com.ximpleware.VTDNav in project translationstudio8 by heartsome.
the class TmxReader method getLangs.
/**
* 获取 tmxfile 中的所有语言
* @return
*/
public List<String> getLangs() {
VTDNav vn = vu.getVTDNav();
vn.push();
List<String> langs = new LinkedList<String>();
langs.add(header.getSrclang());
AutoPilot ap = new AutoPilot(vn);
try {
ap.selectXPath("/tmx/body/tu/tuv");
String lang;
int index = -1;
while (ap.evalXPath() != -1) {
index = vn.getAttrVal("xml:lang");
if (index == -1)
continue;
lang = vn.toRawString(index);
if (!langs.contains(lang)) {
langs.add(lang);
}
}
} catch (Exception e) {
e.printStackTrace();
}
vn.pop();
return langs;
}
use of com.ximpleware.VTDNav in project translationstudio8 by heartsome.
the class TmxReader method readTuTuvElement.
private void readTuTuvElement(TmxTU tu) throws VTDException {
VTDNav vn = vu.getVTDNav();
vn.push();
AutoPilot ap = new AutoPilot(vn);
ap.selectXPath("./tuv");
// TUV 节点下的Note,Prop节点暂时不处理,所以此处暂时不解析
while (ap.evalXPath() != -1) {
int inx = vn.getAttrVal("xml:lang");
inx = inx == -1 ? vn.getAttrVal("lang") : inx;
String lang = inx != -1 ? vn.toString(inx) : null;
if (lang == null) {
continue;
}
vn.push();
if (vu.pilot("./seg") != -1) {
String fullText = vu.getElementContent().trim();
String pureText = DocUtils.getTmxTbxPureText(vu).trim();
if (fullText == null || pureText == null || fullText.equals("") || pureText.equals("")) {
// fix Bug #2928 by Jason SQLite--导入TMX异常, 导入程序正常退出,但是未完全导入所有内容,此处在continue时应该先调用vn.pop()
vn.pop();
continue;
}
TmxSegement segment = new TmxSegement();
segment.setLangCode(Utils.convertLangCode(lang));
// fix Bug #3406 by yule --xliff中的标记可能与TMX标记不兼容。
if (tmxFilter == null)
// segment.setFullText(InnerTagClearUtil.clearXliffTag4Tmx(fullText));
// 不在导入时清理
segment.setFullText(fullText);
else {
String text = tmxFilter.clearString(fullText);
// text = InnerTagClearUtil.clearXliffTag4Tmx(text);// 不在导入时清理
segment.setFullText(text);
}
segment.setPureText(pureText);
if (lang.equalsIgnoreCase(header.getSrclang())) {
tu.setSource(segment);
} else {
tu.appendSegement(segment);
}
}
vn.pop();
}
vn.pop();
}
Aggregations