c1d37aa2b329e84aae50c5d5117593bb475f99bf
[debian/jabref.git] / src / java / net / sf / jabref / export / layout / format / Replace.java
1 package net.sf.jabref.export.layout.format;
2
3 import net.sf.jabref.export.layout.AbstractParamLayoutFormatter;
4
5 import java.util.List;
6 import java.util.ArrayList;
7
8 /**
9  * Formatter that does regexp replacement.
10  *
11  * To use this formatter, a two-part argument must be given. The parts are
12  * separated by a comma. To indicate the comma character, use an escape
13  * sequence: \,
14  *
15  * The first part is the regular expression to search for. The regular expression
16  * is written normally, without extra escape sequences for backslashes. A description
17  * of Java regular expressions can be found at:
18  *   http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/Pattern.html
19  *
20  * The second part is the text to replace all matches with.
21  *
22  * For instance:
23  *  \format[Replace(and,&)]{\author} :
24  *      will output the "author" field after replacing all occurences of "and"
25  *      by "&"
26  *
27  *  \format[Replace(\s,_)]{\author} :
28  *      will output the "author" field after replacing all whitespace
29  *      by underscores.
30  *
31  *  \format[Replace(\,,;)]{\author} :
32  *      will output the "author" field after replacing all commas by semicolons.
33  *
34  */
35 public class Replace extends AbstractParamLayoutFormatter {
36
37     private String regex = null, replaceWith = null;
38
39
40     public void setArgument(String arg) {
41         String[] parts = parseArgument(arg);
42
43         if (parts.length < 2)
44             return; // TODO: too few arguments. Print an error message here?
45         regex = parts[0];
46         replaceWith = parts[1];
47
48     }
49
50     public String format(String fieldText) {
51         if (regex == null)
52             return fieldText; // TODO: argument missing or invalid. Print an error message here?
53         return fieldText.replaceAll(regex, replaceWith);
54     }
55 }