1 package com.hughes.android.dictionary.parser;
3 import java.util.ArrayList;
4 import java.util.LinkedHashMap;
7 import java.util.regex.Matcher;
8 import java.util.regex.Pattern;
10 import com.sun.org.apache.bcel.internal.generic.NamedAndTyped;
12 public class WikiFunction {
16 public String name = "";
17 public final List<String> args = new ArrayList<String>();;
18 public final Map<String,String> namedArgs = new LinkedHashMap<String, String>();
20 private static final Pattern functionEvent = Pattern.compile("\\{\\{|\\[\\[|\\}\\}|\\]\\]|=|\\|");
22 public static WikiFunction getFunction(String line) {
23 final int start = line.indexOf("{{");
27 final WikiFunction result = new WikiFunction();
30 final Matcher matcher = functionEvent.matcher(line);
35 while (end < line.length() && matcher.find(end)) {
37 if (matcher.group().equals("{{") || matcher.group().equals("[[")) {
39 } else if (matcher.group().equals("}}") || matcher.group().equals("]]")) {
44 } else if (matcher.group().equals("|") && depth == 1) {
45 if (lastEquals != -1) {
46 result.namedArgs.put(line.substring(lastPipe, lastEquals), line.substring(lastEquals + 1, matcher.start()));
48 result.args.add(line.substring(lastPipe, matcher.start()));
50 lastPipe = matcher.end();
52 } else if (matcher.group().equals("=") && depth == 1) {
53 lastEquals = matcher.start();
57 System.err.println("Invalid function: " + line);
61 if (lastEquals != -1) {
62 result.namedArgs.put(line.substring(lastPipe, lastEquals), line.substring(lastEquals + 1, matcher.start()));
64 result.args.add(line.substring(lastPipe, matcher.start()));
66 result.end = matcher.end();
67 if (result.args.size() > 0) {
68 result.name = result.args.remove(0);
70 System.err.println("Funnction unnamed: " + line);
76 public String getArg(final int pos) {
77 return (pos < args.size()) ? args.get(pos) : null;
80 public String getNamedArg(final String name) {
81 return namedArgs.get(name);
84 public String replaceWith(final String line, final String sub) {
85 return line.substring(0, start) + sub + line.substring(end);