LatexList2Text.java
01 package org.qedeq.kernel.se.visitor;
02 
03 import org.qedeq.base.utility.StringUtility;
04 import org.qedeq.kernel.se.base.module.Latex;
05 import org.qedeq.kernel.se.base.module.LatexList;
06 
07 /**
08  * Transform latex list into text. We make here only a basic conversion to have a plain text
09  * 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             return getLatex(list.get(i));
72         }
73         // nothing found, so we return just an empty string
74         return "";
75     }
76 
77     protected String getLatex(final Latex latex) {
78         if (latex == null) {
79             return "";
80         }
81         String result = latex.getLatex();
82         if (result == null) {
83             result = "";
84         }
85         result = result.trim();
86         result = result.replaceAll("\\\\index\\{.*\\}""");
87         result = result.replaceAll("\\\\(\\w*)\\{(.*)\\}""$2");
88         result = StringUtility.replace(result, "{""");
89         result = StringUtility.replace(result, "}""");
90         return result.trim();
91     }
92 
93 }