view src/org/nwoca/ssdt/tools/html2wiki/ReplaceTransformer.java @ 11:8f23347884c0

Deal with double dashes surrounded by words. ReplaceTransformer can now replace specific group.
author smith@nwoca.org
date Fri, 28 Jan 2011 13:57:25 -0500
parents 22ed6d93442c
children
line wrap: on
line source
package org.nwoca.ssdt.tools.html2wiki;

import java.util.regex.*;

class ReplaceTransformer implements Transformer {
    
    private Pattern replace;
    private String replacement;
    private int replaceGroup;

    /**
     * ReplaceTransform to replace the entire regex.
     *
     * @param regex
     * @param replacement
     */
    public ReplaceTransformer(String regex, String replacement) {
        this(regex,replacement,0);
    }
    /**
     * ReplaceTransform to replace a specific group in the Regex.
     *
     * @param regex
     * @param replacement
     * @param replaceGroup group to replace
     */

    public ReplaceTransformer(String regex, String replacement, int replaceGroup) {
        replace = Pattern.compile(regex);
        this.replacement = replacement;
        this.replaceGroup = replaceGroup;
    }

    public void apply(StringBuffer buffer) {
        Matcher matcher = replace.matcher(buffer);
        
        int start  = 0;
        while (matcher.find(start)) {
            if (replaceGroup == 0) {
                buffer.replace(matcher.start(),matcher.end(),replacement);
                start = matcher.start() + replacement.length();
            } else {
                String t = "";
                for (int i = 1; i < matcher.groupCount() + 1 ; i++) {
                    if (i != replaceGroup) {
                        t += matcher.group(i);
                    } else {
                        t += replacement;
                    }
                }
                buffer.replace(matcher.start(),matcher.end(),t);
                start = matcher.start() + t.length();
            }            
        }        
    }
    
    public String toString() {
        return "Replace: " + replace.pattern() + " with " +replacement;
    }
    
    
}