@@ -0,0 +1,1430 @@
+package innovimax.mixthem.operation;%0A%0Aimport innovimax.mixthem.MixException;%0Aimport innovimax.mixthem.arguments.RuleParam;%0Aimport innovimax.mixthem.arguments.ParamValue;%0A%0A/**%0A* %3Cp%3EZips two characters.%3C/p%3E%0A* @see CharOperation%0A* @author Innovimax%0A* @version 1.0%0A*/%0Apublic class DefaultCharZipping extends AbstractOperation %7B%0A%09%0A%09private final static String DEFAULT_ZIP_SEPARATOR = %22%22;%0A%0A%0A%09/**%0A%09* Constructor%0A %09* @param params The list of parameters (maybe empty)%0A%09* @see innovimax.mixthem.arguments.RuleParam%0A%09* @see innovimax.mixthem.arguments.ParamValue%0A%09*/%0A%09public DefaultCharZipping(Map%3CRuleParam, ParamValue%3E params) %7B%0A%09%09super(params);%0A%09%7D%0A%09%0A%09/**%0A %09* Returns the result of zipping two lines.%0A%09* @param c1 The first character to zip%0A %09* @param c2 The second character to zip%09%0A %09* @return The result of zipping two characters%0A %09* @throws MixException - If an mixing error occurs%0A %09*/%0A%09@Override%0A%09public int%5B%5D process(int c1, int c2) throws MixException %7B%0A%09%09int%5B%5D zip = null;%0A%09%09String sep = DEFAULT_ZIP_SEPARATOR;%0A%09%09if (this.params.containsKey(RuleParam._ZIP_SEP)) %7B%0A%09%09%09sep = this.params.get(RuleParam._ZIP_SEP).asString();%0A%09%09%7D%09%09%0A%09%09if (c1 != -1 && c2 != -1) %7B%0A        zip = new int%5B2 + sep.length()%5D;%0A        int index = 0;%0A        zip%5Bindex++%5D = c1;%0A        for (int n = 0; n %3C sep.length(); n++) %7B%0A          int cn = sep.codePointAt(n);%0A          zip%5Bindex++%5D = cn;%0A        %7D%0A        zip%5Bindex%5D = c2;%0A%09%09%09%7D%0A%09%09%7D%0A%09%09return zip;%0A%09%7D%0A%0A%7D%0A

Create DefaultCharZipping.java