private TextFragment findAndRemoveWhitespacesAfterPunctuation(TextFragment textFragment) { TextFragment newTextFragment = new TextFragment(); char[] chars = textFragment.getCodedText().toCharArray(); for (int i = 0; i < chars.length; i++) { if (TextFragment.isMarker(chars[i])) { int codeIndex = TextFragment.toIndex(chars[++i]); newTextFragment.append(textFragment.getCode(codeIndex)); continue; } newTextFragment.append(chars[i]); if (isNonSpaceDelimitedPunctuation(chars[i]) && i + 1 < chars.length && isWhitespace(chars[i + 1])) { i = getLastWhitespacePosition(chars, i + 1); } } return newTextFragment; }
/** * Creates a TextFragment with the content of a given TextFragment. * @param fragment the content to use. */ public TextFragment (TextFragment fragment) { this.setCodedText(fragment.getCodedText(), fragment.getCodes(), false); this.lastCodeID = fragment.lastCodeID; }
/** * Indicates if this fragment contains at least one character other than a whitespace. * (inline codes and other markers do not count as characters). * @return true if this fragment contains at least one character, excluding whitespace. */ public boolean hasText () { return hasText(false); }
public GenericContent setContent (TextFragment content) { codedText = content.getCodedText(); codes = content.getCodes(); return this; }
/** * Inserts a {@link String} object to this fragment. * @param offset position in the coded text where to insert the new String. * You can use -1 to append at the end of the current content. * @param str String to insert. * @throws InvalidPositionException when offset points inside a marker. */ public void insert(int offset, String str) { TextFragment tf = new TextFragment(); tf.append(str); insert(offset, tf, false); }
private void mergeSegment(Segment segment) { TextFragment textFragment = segment.getContent(); String codedText = textFragment.getCodedText(); List<Code> codes = textFragment.getCodes(); for (int i = 0; i < codedText.length(); i++) { char c = codedText.charAt(i); if (!TextFragment.isMarker(c)) { addChar(c); continue; } int codeIndex = TextFragment.toIndex(codedText.charAt(++i)); addCode(codes.get(codeIndex)); } }
int end) TextFragment sub = new TextFragment(); if ( isEmpty() ) return sub; StringBuilder tmpText = new StringBuilder(getCodedText(start, end)); ArrayList<Code> tmpCodes = null; case MARKER_CLOSING: case MARKER_ISOLATED: tmpCodes.add(codes.get(toIndex(tmpText.charAt(++i))).clone()); tmpText.setCharAt(i, toChar(tmpCodes.size()-1)); if ( sub.lastCodeID < tmpCodes.get(tmpCodes.size()-1).id ) { sub.lastCodeID = tmpCodes.get(tmpCodes.size()-1).id; sub.setCodedText(tmpText.toString(), tmpCodes, false);
/** * Creates an empty Segment object with a given identifier. * @param id identifier for the new segment (Can be null). */ public Segment (String id) { super(new TextFragment()); this.id = id; }
if ( !frag.hasCode() ) return pos; String text = frag.getCodedText(); for ( int i=0; i<text.length(); i++ ) { if ( i >= pos ) { return len; if ( TextFragment.isMarker(text.charAt(i)) ) { Code code = frag.getCode(text.charAt(++i)); len += code.getData().length(); continue;
/** * Clones this TextFragment. * @return a new TextFragment that is a copy of this one. */ @Override public TextFragment clone () { TextFragment tf = new TextFragment(this.getCodedText(), this.getClonedCodes()); tf.lastCodeID = this.getLastCodeId(); return tf; }
if (tf == null || !tf.hasCode()) return tf; TextFragment expandedCodes = new TextFragment(); for (int i=0; i<tf.length(); i++) { switch (tf.charAt(i)) { case TextFragment.MARKER_OPENING: case TextFragment.MARKER_CLOSING: case TextFragment.MARKER_ISOLATED: int index = TextFragment.toIndex(tf.charAt(i+1)); expandedCodes.append(c); expandedCodes.append(code); break; default: expandedCodes.append(tf.charAt(i)); break; expandedCodes.balanceMarkers(); return expandedCodes;
public static void convertTextPart_whitespaceCodesToText(TextPart textPart) { if (textPart.isSegment()) return; TextFragment tf = textPart.getContent(); if (tf.hasText()) return; if (Util.isEmpty(tf.toText().trim())) { // Move all codes into text textPart.setContent(new TextFragment(tf.toText())); } }
if ( srcFrag.isEmpty() ) { srcFrag = srcOriginal; if ( !srcFrag.getCodedText().startsWith(Util.MTFLAG) ) { srcFrag = srcFrag.clone(); srcFrag.setCodedText(Util.MTFLAG+" "+srcFrag.getCodedText());
codes.add(segCode); tmp.append(String.format("%c%c", (char)TextFragment.MARKER_OPENING, TextFragment.toChar(codes.size()-1))); tmpPart.append(part.text.getCodedText()); int newIndex = codes.size(); // Start at the last code for ( int j=0; j<tmpPart.length(); j++ ) { if ( TextFragment.isMarker(tmpPart.charAt(j)) ) { tmpPart.setCharAt(++j, TextFragment.toChar(newIndex++)); codes.addAll(part.text.getCodes()); codes.add(segCode); tmp.append(String.format("%c%c", (char)TextFragment.MARKER_CLOSING, TextFragment.toChar(codes.size()-1)));
private void processFragment (TextFragment frag) { String text = frag.getCodedText(); String result = changeWidth(text, params); // Record if we modified something wasModified = !text.equals(result); // Set back the modified text frag.setCodedText(result); }
codes = frag.getCodes(); String text = frag.getCodedText(); if (!frag.hasCode()) { return text; // No codes
public TextFragment createJoinedContent () { // Join all segment into a new TextFragment TextFragment tf = new TextFragment(); for ( TextPart part : parts ) { tf.append(part.getContent()); } return tf; }
private static boolean isLeadingCode(Code code, TextFragment oriSrc) { int index = oriSrc.getCodes().indexOf(code); if (index == -1) return false; String ctext = oriSrc.getCodedText(); int pos = ctext.indexOf(String.valueOf(TextFragment.toChar(index)), 0); if (pos == -1) return false; // Remove all codes from the beginning of the string before the pos and see if any text remains String substr = ctext.substring(0, pos - 1); substr = TextFragment.MARKERS_REGEX.matcher(substr).replaceAll(""); return substr.trim().length() == 0; }
private TextFragment makeFragment(String codedHtml, TextFragment sourceFragment) { return sourceFragment.hasCode() ? new TextFragment(util.fromCodedHTML(codedHtml, sourceFragment, false), sourceFragment.getClonedCodes()) : new TextFragment(util.fromCodedHTML(codedHtml, sourceFragment, false)); } }
private String toMIFString (TextFragment tf) { String ctext = tf.getCodedText(); StringBuilder tmp = new StringBuilder(); for ( int i=0; i<ctext.length(); i++ ) { char ch = ctext.charAt(i); if ( TextFragment.isMarker(ch) ) { tmp.append(tf.getCode(ctext.charAt(++i))); } else { tmp.append(encoder.encode(ch, EncoderContext.SKELETON)); } } return tmp.toString(); }