1 | package org.qedeq.kernel.se.visitor; |
2 | |
3 | import org.qedeq.base.utility.StringUtility; |
4 | import org.qedeq.kernel.se.base.module.Latex; |
5 | import org.qedeq.kernel.se.base.module.LatexList; |
6 | |
7 | /** |
8 | * Transform latex list into text. We make here only a basic conversion to have a plain text |
9 | * description of such things as chapter titles. So we have to remove something like |
10 | * "\index". |
11 | * <br/> |
12 | * TODO 20130126 m31: this transformation is mainly used to get a good location description |
13 | * when a plugin is running. So it must work with chapter, section and subsection titles. |
14 | * We just have to check what LaTeX stuff is used there. |
15 | * <br/> |
16 | * Another problem: currently only the method {@link #transform(LatexList)} is called. |
17 | * <br/> |
18 | * It might be a good idea to idea to externalize the usage. So one could use a better transformer |
19 | * transformer (like Latex2UnicodeParser) if we have it in our class path... |
20 | * |
21 | * @author Michael Meyling |
22 | */ |
23 | public class LatexList2Text { |
24 | |
25 | /** |
26 | * Filters English entry out of LaTeX list. |
27 | * |
28 | * @param list List of LaTeX entries. |
29 | * @return Selected entry transformed into text. |
30 | */ |
31 | public String transform(final LatexList list) { |
32 | return transform(list, "en"); |
33 | } |
34 | |
35 | /** |
36 | * Filters given language entry out of LaTeX list. |
37 | * Fallback is the default language. |
38 | * |
39 | * @param list List of LaTeX entries. |
40 | * @param language Filter for this language. |
41 | * @return Selected entry transformed into text. |
42 | */ |
43 | public String transform(final LatexList list, final String language) { |
44 | if (list == null) { |
45 | return ""; |
46 | } |
47 | // if we got no language we take "en" |
48 | String lan = (language != null ? language : "en"); |
49 | for (int i = 0; i < list.size(); i++) { |
50 | if (list.get(i) != null && lan.equals(list.get(i).getLanguage())) { |
51 | return getLatex(list.get(i)); |
52 | } |
53 | } |
54 | // assume entry with missing language as default |
55 | for (int i = 0; i < list.size(); i++) { |
56 | if (list.get(i) != null && list.get(i).getLanguage() == null) { |
57 | return getLatex(list.get(i)); |
58 | } |
59 | } |
60 | // if we haven't tried "en" yet we give it a try |
61 | if (!"en".equals(lan)) { |
62 | lan = "en"; |
63 | for (int i = 0; i < list.size(); i++) { |
64 | if (list.get(i) != null && lan.equals(list.get(i).getLanguage())) { |
65 | return getLatex(list.get(i)); |
66 | } |
67 | } |
68 | } |
69 | // fallback: now we take the first entry |
70 | for (int i = 0; i < list.size(); i++) { |
71 | if (list.get(i) != null) { |
72 | return getLatex(list.get(i)); |
73 | } |
74 | } |
75 | // nothing found, so we return just an empty string |
76 | return ""; |
77 | } |
78 | |
79 | protected String getLatex(final Latex latex) { |
80 | if (latex == null) { |
81 | return ""; |
82 | } |
83 | String result = latex.getLatex(); |
84 | if (result == null) { |
85 | result = ""; |
86 | } |
87 | result = result.trim(); |
88 | result = result.replaceAll("\\\\index\\{.*\\}", ""); |
89 | result = result.replaceAll("\\\\(\\w*)\\{(.*)\\}", "$2"); |
90 | result = StringUtility.replace(result, "{", ""); |
91 | result = StringUtility.replace(result, "}", ""); |
92 | return result.trim(); |
93 | } |
94 | |
95 | } |