@Override public TextFragment getFirstContent() { for ( TextPart part : parts ) { if ( part.isSegment() ) { return part.getContent(); } } // Should never occur return null; }
public static void renumberCodes(TextContainer tc) { for (TextPart textPart : tc) { textPart.getContent().renumberCodes(1); } }
@Override public TextFragment getLastContent() { for ( int i=parts.size()-1; i>=0; i-- ) { if ( parts.get(i).isSegment() ) { return parts.get(i).getContent(); } } // Should never occur return null; }
/** * Indicates if this container is empty (no text and no codes). * * @return true if this container is empty. */ public boolean isEmpty() { for ( TextPart part : parts ) { if ( !part.getContent().isEmpty() ) return false; } return true; }
/** * Indicates if this container contains at least one character that is not a whitespace. * All parts (segments and non-segments) are checked. * * @param whiteSpacesAreText indicates if whitespaces should be considered * text characters or not. * @return true if this container contains at least one character that is not a whitespace. */ public boolean hasText (boolean whiteSpacesAreText) { for ( TextPart part : parts ) { if ( part.getContent().hasText(whiteSpacesAreText) ) return true; } return false; }
@Override public Segment clone () { TextPart part = super.clone(); Segment newSeg = new Segment(id, part.getContent()); newSeg.properties = part.properties; newSeg.annotations = part.annotations; return newSeg; }
public TextFragment createJoinedContent () { // Join all segment into a new TextFragment TextFragment tf = new TextFragment(); for ( TextPart part : parts ) { tf.append(part.getContent()); } return tf; }
/** * Compares two TextPart. * @param tp1 First TextPart * @param tp2 Second TextPart * @return true if equal else false */ public boolean compareTextParts(TextPart tp1, TextPart tp2) { //--both are null no point checking anything else-- if(bothAreNull(tp1,tp2)){ return true; } //--one is null-- if( oneIsNulll(tp1,tp2,"compareTextPart","TextPart") ){ return false; } //--Content-- if ( !compareTextFragments(tp1.getContent(), tp2.getContent()) ){ return false; } return true; }
/** * Gets the string representation of this container. * If the container is segmented, the representation shows the merged * segments. Inline codes are also included. * * @return the string representation of this container. */ @Override public String toString () { if ( parts.size() == 1 ) { return parts.get(0).getContent().toText(); } // Else: merge to a temporary content return createJoinedContent().toText(); }
private TextFragment createJoinedContent(List<Range> ranges) { // Clear the ranges if needed if ( ranges != null ) { ranges.clear(); } // Join all segment into a new TextFragment int start = 0; TextFragment tf = new TextFragment(); for ( TextPart part : parts ) { if (( ranges != null ) && part.isSegment() ) { ranges.add(new Range(start, start+part.text.text.length(), ((Segment)part).id)); } start += part.text.text.length(); tf.append(part.getContent()); } return tf; }
/** * Gets the coded text of the whole content (segmented or not). * Use this method to compute segment boundaries that will be applied using * {@link ISegments#create(int, int)} or {@link ISegments#create(List)} or other methods. * * @return the coded text of the whole content to use for segmentation template. * @see ISegments#create(int, int) * @see ISegments#create(List) */ public String getCodedText() { if ( parts.size() == 1 ) { return parts.get(0).getContent().getCodedText(); } else { return createJoinedContent().getCodedText(); } }
protected void addTrailingWhitespace(ITextUnit textUnit) { TextContainer sourceTextContainer = textUnit.getSource(); TextContainer targetTextContainer = textUnit.getTarget(targetLocale); Iterator<TextPart> sourceTextPartsIterator = sourceTextContainer.getParts().iterator(); Iterator<TextPart> targetTextPartsIterator = targetTextContainer.getParts().iterator(); while (sourceTextPartsIterator.hasNext() && targetTextPartsIterator.hasNext()) { TextPart sourceTextPart = sourceTextPartsIterator.next(); TextPart targetTextPart = targetTextPartsIterator.next(); String sourceText = sourceTextPart.getContent().getText(); if (sourceText.isEmpty() || !isNonSpaceDelimitedPunctuation(lastChar(sourceText))) { // the text does not end with punctuation requiring conversion continue; } if (isWhitespace(lastChar(targetTextPart.getContent().getText()))) { // the whitespace is present at the end continue; } targetTextPart.getContent().append(WHITESPACE); } }
/** * Create a single code with a given TextPart's text. * Needed to protect the text of the text part from being escaped by * an encoder. If the TextPart already has codes, no conversion * is performed. * @param textPart the given TextPart */ public static void convertTextPartToCode(TextPart textPart) { if (!textPart.isSegment()) { TextFragment tf = textPart.getContent(); if (tf.hasCode()) return; // Move the whole text of text part to a single code tf.changeToCode(0, tf.getCodedText().length(), TagType.PLACEHOLDER, null); } }
if ( parts.get(parts.size()-1).getContent().isEmpty() ) { parts.set(parts.size()-1, part);
@Override protected Event handleTextUnit (Event event) { ITextUnit tu = event.getTextUnit(); // Skip non-translatable if ( !tu.isTranslatable() ) return event; TextContainer tc = tu.createTarget(targetLocale, false, IResource.COPY_ALL); for ( TextPart part : tc ) { processFragment(part.getContent()); } return event; }
/** * Appends a part at the end of this container. * <p> * If collapseIfPreviousEmpty and if the current last part (segment or non-segment) * is empty, the text fragment is appended to the last part. * Otherwise the text fragment is appended to the content as a new non-segment part. * <p> * Important: If the container is empty, the appended part becomes * a segment, as the container has always at least one segment. * * @param fragment the text fragment to append. * @param collapseIfPreviousEmpty true to collapse the previous part if it is empty. * @param keepCodeIds true to block code balancing. */ public void append(TextFragment fragment, boolean collapseIfPreviousEmpty, boolean keepCodeIds) { if ( collapseIfPreviousEmpty ) { // If the last part is empty we append to it if ( parts.get(parts.size()-1).getContent().isEmpty() ) { // Append the fragment to the segment or non-segment part parts.get(parts.size()-1).text.append(fragment, keepCodeIds); } else { // Else: like appending a TextPart append(new TextPart(fragment), false); } } else { append(new TextPart(fragment), false); } }
protected void removeTrailingWhitespace(ITextUnit textUnit) { TextContainer targetTextContainer = textUnit.getTarget(targetLocale); /** * If whitespace trimming was enabled during segmentation, the * whitespace will be trapped in non-Segment TextParts. So * we need to check everything in the container, not just the * results of tu.getTargetSegments(); */ for (TextPart targetTextPart : targetTextContainer.getParts()) { TextFragment textFragment = findAndRemoveWhitespacesAfterPunctuation(targetTextPart.getContent()); targetTextPart.setContent(textFragment); } }
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())); } }
private void convert (TextPart srcPart, TextPart trgPart, Unit destUnit) { // Create the destination part Part destPart; if ( srcPart.isSegment() ) { destPart = destUnit.appendSegment(); } else { destPart = destUnit.appendIgnorable(); } // Transfer the source convert(srcPart.getContent(), destPart.getSource(), false); // Transfer the target (if needed) if ( trgPart != null ) { convert(trgPart.getContent(), destPart.getTarget(GetTarget.CREATE_EMPTY), true); } // Handle the Segment-specific data if ( destPart.isSegment() ) { Segment seg = (Segment)srcPart; destPart.setId(seg.getId()); //TODO: annotations } }
private void convertTextContainer (TextContainer tc) { for ( TextPart textPart : tc ) { TextFragment tf = textPart.getContent(); for (Code code : tf.getCodes()) { if (!code.hasReference()) continue; String data = code.getOuterData(); String newData = convertRefIds(data); if ( code.hasOuterData() ) { code.setOuterData(newData); } else { code.setData(newData); } } } }