All Downloads are FREE. Search and download functionalities are using the official Maven repository.

hudson.AbstractMarkupText Maven / Gradle / Ivy

package hudson;

import hudson.MarkupText.SubText;

import java.util.List;
import java.util.ArrayList;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

/**
 * Common part between {@link MarkupText} and {@link MarkupText.SubText}.
 *
 * 

* See {@link MarkupText} for more discussion about what this class represents. * * @author Kohsuke Kawaguchi * @since 1.250 */ public abstract class AbstractMarkupText { /*package*/ AbstractMarkupText() {} // limit who can subclass this type. /** * Returns the plain text portion of this {@link MarkupText} without * any markup. */ public abstract String getText(); /** * Adds a start tag and end tag at the specified position. * *

* For example, if the text was "abc", then addMarkup(1,2,"<b>","</b>") * would generate "a<b>b</b>c" */ public abstract void addMarkup( int startPos, int endPos, String startTag, String endTag ); /** * Find all "tokens" that match the given pattern in this text. * *

* A token is like a substring, except that it's aware of word boundaries. * For example, while "bc" is a string of "abc", calling {@code findTokens} * with "bc" as a pattern on string "abc" won't match anything. * *

* This method is convenient for finding keywords that follow a certain syntax * from natural text. You can then use {@link MarkupText.SubText#surroundWith(String,String)} * to put mark up around such text. */ public List findTokens(Pattern pattern) { String text = getText(); Matcher m = pattern.matcher(text); List r = new ArrayList(); while(m.find()) { int idx = m.start(); if(idx>0) { char ch = text.charAt(idx-1); if(Character.isLetter(ch) || Character.isDigit(ch)) continue; // not at a word boundary } idx = m.end(); if(idx





© 2015 - 2025 Weber Informatics LLC | Privacy Policy