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 public class WikiFunction {
14 public String name = "";
15 public final List<String> args = new ArrayList<String>();;
16 public final Map<String,String> namedArgs = new LinkedHashMap<String, String>();
18 private static final Pattern functionEvent = Pattern.compile("\\{\\{|\\[\\[|\\}\\}|\\]\\]|=|\\|");
20 public static WikiFunction getFunction(String line) {
21 final int start = line.indexOf("{{");
25 final WikiFunction result = new WikiFunction();
28 final Matcher matcher = functionEvent.matcher(line);
33 while (end < line.length() && matcher.find(end)) {
35 if (matcher.group().equals("{{") || matcher.group().equals("[[")) {
37 } else if (matcher.group().equals("}}") || matcher.group().equals("]]")) {
42 } else if (matcher.group().equals("|") && depth == 1) {
43 if (lastEquals != -1) {
44 result.namedArgs.put(line.substring(lastPipe, lastEquals), line.substring(lastEquals + 1, matcher.start()));
46 result.args.add(line.substring(lastPipe, matcher.start()));
48 lastPipe = matcher.end();
50 } else if (matcher.group().equals("=") && depth == 1) {
51 lastEquals = matcher.start();
55 System.err.println("Invalid function: " + line);
59 if (lastEquals != -1) {
60 result.namedArgs.put(line.substring(lastPipe, lastEquals), line.substring(lastEquals + 1, matcher.start()));
62 result.args.add(line.substring(lastPipe, matcher.start()));
64 result.end = matcher.end();
65 if (result.args.size() > 0) {
66 result.name = result.args.remove(0);
68 System.err.println("Funnction unnamed: " + line);
74 public String getArg(final int pos) {
75 return (pos < args.size()) ? args.get(pos) : null;
78 public String getNamedArg(final String name) {
79 return namedArgs.get(name);
82 public String replaceWith(final String line, final String sub) {
83 return line.substring(0, start) + sub + line.substring(end);