/**************************************************************************
OmegaT - Computer Assisted Translation (CAT) tool
with fuzzy matching, translation memory, keyword search,
glossaries, and translation leveraging into updated projects.
Copyright (C) 2000-2006 Keith Godfrey and Maxym Mykhalchuk
2008 Didier Briel
Home page: http://www.omegat.org/
Support center: http://groups.yahoo.com/group/OmegaT/
This file is part of OmegaT.
OmegaT is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OmegaT is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
**************************************************************************/
package org.omegat.filters2.xtagqxp;
import org.omegat.filters3.Element;
import org.omegat.util.StaticUtils;
/**
* A Xtag in a CopyFlow Gold for QuarkXPress source text.
*
* @author Didier Briel
*/
public class Xtag implements Element {
public Xtag(String tag, int index) {
this.tag = tag;
this.shortcut = makeShortcut(tag);
this.index = index;
}
/**
* Makes a shortcut from an Xtag. If the tag contains no letter, uses 'x'
* for the shortcut.
*
* @param tag
* The full Xtag
* @return The shortcut
*/
private String makeShortcut(String tag) {
int cp = 0;
for (int i = 0; i < tag.length(); i += Character.charCount(cp)) {
cp = tag.codePointAt(i);
if (Character.isLetter(cp)) {
cp = Character.toLowerCase(cp);
return String.valueOf(Character.toChars(cp));
}
}
if (cp == '<') {
return "<";
} else if (cp == '>') {
return ">";
} else {
return "x";
}
}
private String tag;
/** Returns this tag. */
public String getTag() {
return tag;
}
private String shortcut;
/** Returns the short form of this tag, most often -- the first letter. */
public String getShortcut() {
if (shortcut != null)
return shortcut;
else
return String.valueOf(Character.toChars(getTag().codePointAt(0)));
}
public String toSafeCalcShortcut() {
return StaticUtils.TAG_REPLACEMENT_CHAR + getShortcut().replace('<', '_').replace('>', '_')
+ StaticUtils.TAG_REPLACEMENT_CHAR;
}
private int index;
/** Returns the index of this tag in the entry. */
public int getIndex() {
return index;
}
/**
* Returns shortcut string representation of the element. If the shortcut is
* < or >, return the character rather than a tag E.g. for <strong>
* tag should return <s3>.
*/
public String toShortcut() {
StringBuilder buf = new StringBuilder();
if (getShortcut().equals("<"))
return "<";
else if (getShortcut().equals(">"))
return ">";
else
buf.append("<");
buf.append(getShortcut());
buf.append(getIndex());
// All Xtags are single tags
buf.append("/");
buf.append(">");
return buf.toString();
}
/**
* Returns the tag in its original form as it was in the original document.
* E.g. for <strong> tag should return <strong>.
*/
public String toOriginal() {
return "<" + getTag() + ">";
}
/**
* Not really implemented
*
* @return an empty string
*/
public String toTMX() {
return "";
}
}