Sha256: 2ca171149a0b429d87ebcbb6871df3e8d04e94914dc4435a86dc2dd4ba967d8b

Contents?: true

Size: 1.66 KB

Versions: 4

Compression:

Stored size: 1.66 KB

Contents

package gherkin.formatter;

import java.io.UnsupportedEncodingException;
import java.util.List;

public class Argument {
    private final int byteOffset;
    private final byte[] val;

    public Argument(int byteOffset, String val) throws UnsupportedEncodingException {
        this.byteOffset = byteOffset;
        this.val = val.getBytes("UTF-8");
    }

    public static String format(String string, ArgumentFormat format, List<Argument> arguments) throws UnsupportedEncodingException {
        return format(string, format, (Argument[]) arguments.toArray(new Argument[arguments.size()]));
    }

    public static String format(String string, ArgumentFormat format, Argument... arguments) throws UnsupportedEncodingException {
        byte[] result = string.getBytes("UTF-8");
        int offset = 0, pastOffset = 0;
        for (Argument argument : arguments) {
            if (argument.byteOffset != -1 && argument.byteOffset >= pastOffset) {
                byte[] replacement = format.formatArgument(argument.val);
                int delta = replacement.length - argument.val.length;
                byte[] newResult = new byte[result.length + delta];

                System.arraycopy(result, 0, newResult, 0, argument.byteOffset+offset);
                System.arraycopy(replacement, 0, newResult, argument.byteOffset+offset, replacement.length);
                int n = argument.byteOffset + argument.val.length + offset;
                System.arraycopy(result, n, newResult, argument.byteOffset + replacement.length, result.length - n);

                offset += delta;
                result = newResult;
            }
        }
        return new String(result, "UTF-8");
    }
}

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
gherkin-1.0.3-i386-mswin32 java/src/gherkin/formatter/Argument.java
gherkin-1.0.3-i386-mingw32 java/src/gherkin/formatter/Argument.java
gherkin-1.0.3-java java/src/gherkin/formatter/Argument.java
gherkin-1.0.3 java/src/gherkin/formatter/Argument.java