src/main/java/de/unixwork/uwproj/Feature.java

Sun, 28 Jan 2024 14:02:41 +0100

author
Mike Becker <universe@uap-core.de>
date
Sun, 28 Jan 2024 14:02:41 +0100
changeset 113
24f32dbd88cd
parent 98
4bf47ea3fc64
permissions
-rw-r--r--

minimize application code

0
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
1 package de.unixwork.uwproj;
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
2
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
3 import org.w3c.dom.Element;
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
4
40
b42bfc9e9983 first minor code improvements
Mike Becker <universe@uap-core.de>
parents: 0
diff changeset
5 import java.util.List;
b42bfc9e9983 first minor code improvements
Mike Becker <universe@uap-core.de>
parents: 0
diff changeset
6
45
f4ec2feccebb add missing shId() in feature var name
Mike Becker <universe@uap-core.de>
parents: 44
diff changeset
7 import static de.unixwork.uwproj.Util.shId;
41
75ee588d5d9e some more code cleanup
Mike Becker <universe@uap-core.de>
parents: 40
diff changeset
8
113
24f32dbd88cd minimize application code
Mike Becker <universe@uap-core.de>
parents: 98
diff changeset
9 public final class Feature {
24f32dbd88cd minimize application code
Mike Becker <universe@uap-core.de>
parents: 98
diff changeset
10 private final String name;
24f32dbd88cd minimize application code
Mike Becker <universe@uap-core.de>
parents: 98
diff changeset
11 private final String arg;
24f32dbd88cd minimize application code
Mike Becker <universe@uap-core.de>
parents: 98
diff changeset
12 private final boolean auto;
24f32dbd88cd minimize application code
Mike Becker <universe@uap-core.de>
parents: 98
diff changeset
13 private final String desc;
24f32dbd88cd minimize application code
Mike Becker <universe@uap-core.de>
parents: 98
diff changeset
14 private final TargetData targetData;
41
75ee588d5d9e some more code cleanup
Mike Becker <universe@uap-core.de>
parents: 40
diff changeset
15
113
24f32dbd88cd minimize application code
Mike Becker <universe@uap-core.de>
parents: 98
diff changeset
16 public Feature(Element e) {
24f32dbd88cd minimize application code
Mike Becker <universe@uap-core.de>
parents: 98
diff changeset
17 name = e.getAttribute("name");
24f32dbd88cd minimize application code
Mike Becker <universe@uap-core.de>
parents: 98
diff changeset
18 arg = Util.getAttrOrDefault(e, "arg", name);
24f32dbd88cd minimize application code
Mike Becker <universe@uap-core.de>
parents: 98
diff changeset
19 auto = Boolean.parseBoolean(e.getAttribute("default"));
24f32dbd88cd minimize application code
Mike Becker <universe@uap-core.de>
parents: 98
diff changeset
20 targetData = new TargetData(e);
97
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
21
113
24f32dbd88cd minimize application code
Mike Becker <universe@uap-core.de>
parents: 98
diff changeset
22 // TODO: when Option also receives descriptions, we will move desc to TargetData
24f32dbd88cd minimize application code
Mike Becker <universe@uap-core.de>
parents: 98
diff changeset
23 desc = Util.getChildElements(e)
24f32dbd88cd minimize application code
Mike Becker <universe@uap-core.de>
parents: 98
diff changeset
24 .filter(c -> c.getNodeName().equals("desc"))
24f32dbd88cd minimize application code
Mike Becker <universe@uap-core.de>
parents: 98
diff changeset
25 .map(Util::getContent)
24f32dbd88cd minimize application code
Mike Becker <universe@uap-core.de>
parents: 98
diff changeset
26 .findAny()
24f32dbd88cd minimize application code
Mike Becker <universe@uap-core.de>
parents: 98
diff changeset
27 .orElse("");
0
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28 }
41
75ee588d5d9e some more code cleanup
Mike Becker <universe@uap-core.de>
parents: 40
diff changeset
29
0
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30 public String getVarName() {
45
f4ec2feccebb add missing shId() in feature var name
Mike Becker <universe@uap-core.de>
parents: 44
diff changeset
31 return shId("FEATURE_" + name.toUpperCase());
0
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
32 }
41
75ee588d5d9e some more code cleanup
Mike Becker <universe@uap-core.de>
parents: 40
diff changeset
33
0
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
34 public List<String> getDependencies() {
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
35 return getTargetData().getDependencies();
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
36 }
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
37
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
38 public List<Define> getDefines() {
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
39 return getTargetData().getDefines();
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
40 }
41
75ee588d5d9e some more code cleanup
Mike Becker <universe@uap-core.de>
parents: 40
diff changeset
41
0
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
42 public String getMake() {
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
43 return targetData.getMake();
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
44 }
41
75ee588d5d9e some more code cleanup
Mike Becker <universe@uap-core.de>
parents: 40
diff changeset
45
0
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
46 public boolean hasMake() {
113
24f32dbd88cd minimize application code
Mike Becker <universe@uap-core.de>
parents: 98
diff changeset
47 return targetData.hasMake();
0
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
48 }
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
49
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
50 public String getName() {
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
51 return name;
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
52 }
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
53
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
54 public String getArg() {
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
55 return arg;
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
56 }
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
57
97
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
58 public String getDesc() {
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
59 return desc;
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
60 }
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
61
79
ef0635b78b7b remove explicit calls of getters in velocity template
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
62 public boolean isAuto() {
ef0635b78b7b remove explicit calls of getters in velocity template
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
63 return auto;
0
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
64 }
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
65
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
66 public TargetData getTargetData() {
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
67 return targetData;
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
68 }
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
69
97
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
70 /**
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
71 * Generates help text for the feature option.
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
72 * <p>
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
73 * If {@link #isAuto()} returns true, the option name will be --disable-${@link #getArg()}, otherwise
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
74 * it will be --enable-${@link #getArg()}, preceded by two spaces, respectively.
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
75 * <p>
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
76 * If no description is available via {@link #getDesc()}, only the option name is generated. Otherwise,
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
77 * description is added according to the following rules:
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
78 * <p>
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
79 * When the option name does not consume more than 25 characters, the description starts in the same line.
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
80 * Otherwise, a line break is added, first. The description will be placed in a block starting from column
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
81 * 27 to 80 and automatically break when necessary. The description must not contain a single word
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
82 * that is longer than 54 characters, or it will break the layout.
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
83 *
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
84 * @return a help text for terminal output
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
85 */
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
86 public String getHelpText() {
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
87 final var builder = new StringBuilder();
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
88
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
89 // Compute option name
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
90 final var opt = (auto ? " --disable-" : " --enable-")+arg;
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
91
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
92 // Add option name
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
93 builder.append(opt);
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
94
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
95 // Stop, if there is no description
113
24f32dbd88cd minimize application code
Mike Becker <universe@uap-core.de>
parents: 98
diff changeset
96 if (desc.isBlank()) return builder.toString();
97
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
97
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
98 // Prepare the description by replacing some unwanted spaces
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
99 final var hdesc = desc.trim()
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
100 .replaceAll("\\r", "")
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
101 .replaceAll("\\t", " ");
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
102
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
103 // Declare our frame where the description shall be placed
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
104 final int startx = 26;
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
105 final int endx = 80;
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
106
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
107 // Move to startx (break, if we already past that)
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
108 if (opt.length() >= startx) {
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
109 builder.append("\n");
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
110 builder.append(" ".repeat(startx));
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
111 } else {
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
112 builder.append(" ".repeat(startx-opt.length()));
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
113 }
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
114
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
115 // Append the description keeping the layout intact
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
116 int x = startx;
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
117 for (int i = 0 ; i < hdesc.length() ;) {
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
118 // get the next word and see where we would end
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
119 int s = hdesc.indexOf(' ', i);
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
120 if (s < 0) s = hdesc.length();
98
4bf47ea3fc64 allow custom line breaks in help text
Mike Becker <universe@uap-core.de>
parents: 97
diff changeset
121 int n = hdesc.indexOf('\n', i);
4bf47ea3fc64 allow custom line breaks in help text
Mike Becker <universe@uap-core.de>
parents: 97
diff changeset
122 if (n < 0) n = hdesc.length();
4bf47ea3fc64 allow custom line breaks in help text
Mike Becker <universe@uap-core.de>
parents: 97
diff changeset
123 s = Math.min(s, n);
97
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
124 int l = s-i;
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
125 if (x + l > endx) {
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
126 // does not fit, break into next line
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
127 builder.append('\n');
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
128 builder.append(" ".repeat(startx));
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
129 x = startx;
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
130 }
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
131 // append the word
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
132 builder.append(hdesc, i, s);
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
133 x += l;
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
134 i += l;
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
135 // append the next spaces
98
4bf47ea3fc64 allow custom line breaks in help text
Mike Becker <universe@uap-core.de>
parents: 97
diff changeset
136 while (i < hdesc.length()) {
4bf47ea3fc64 allow custom line breaks in help text
Mike Becker <universe@uap-core.de>
parents: 97
diff changeset
137 int c = hdesc.charAt(i);
4bf47ea3fc64 allow custom line breaks in help text
Mike Becker <universe@uap-core.de>
parents: 97
diff changeset
138 if (c == ' ') {
4bf47ea3fc64 allow custom line breaks in help text
Mike Becker <universe@uap-core.de>
parents: 97
diff changeset
139 // as long as we don't need to break, add the spaces
4bf47ea3fc64 allow custom line breaks in help text
Mike Becker <universe@uap-core.de>
parents: 97
diff changeset
140 i++;
4bf47ea3fc64 allow custom line breaks in help text
Mike Becker <universe@uap-core.de>
parents: 97
diff changeset
141 x++;
4bf47ea3fc64 allow custom line breaks in help text
Mike Becker <universe@uap-core.de>
parents: 97
diff changeset
142 if (x < endx) builder.append(' ');
4bf47ea3fc64 allow custom line breaks in help text
Mike Becker <universe@uap-core.de>
parents: 97
diff changeset
143 } else if (c == '\n') {
4bf47ea3fc64 allow custom line breaks in help text
Mike Becker <universe@uap-core.de>
parents: 97
diff changeset
144 // if user wants us to break, comply
4bf47ea3fc64 allow custom line breaks in help text
Mike Becker <universe@uap-core.de>
parents: 97
diff changeset
145 i++;
4bf47ea3fc64 allow custom line breaks in help text
Mike Becker <universe@uap-core.de>
parents: 97
diff changeset
146 // if we have still space, just move to the end of the line
4bf47ea3fc64 allow custom line breaks in help text
Mike Becker <universe@uap-core.de>
parents: 97
diff changeset
147 if (x < endx) {
4bf47ea3fc64 allow custom line breaks in help text
Mike Becker <universe@uap-core.de>
parents: 97
diff changeset
148 x = endx;
4bf47ea3fc64 allow custom line breaks in help text
Mike Becker <universe@uap-core.de>
parents: 97
diff changeset
149 } else {
4bf47ea3fc64 allow custom line breaks in help text
Mike Becker <universe@uap-core.de>
parents: 97
diff changeset
150 // otherwise, we need to add an extra blank line
4bf47ea3fc64 allow custom line breaks in help text
Mike Becker <universe@uap-core.de>
parents: 97
diff changeset
151 builder.append('\n');
4bf47ea3fc64 allow custom line breaks in help text
Mike Becker <universe@uap-core.de>
parents: 97
diff changeset
152 }
4bf47ea3fc64 allow custom line breaks in help text
Mike Becker <universe@uap-core.de>
parents: 97
diff changeset
153 } else {
4bf47ea3fc64 allow custom line breaks in help text
Mike Becker <universe@uap-core.de>
parents: 97
diff changeset
154 // we have found the next word, so continue with the outer loop
4bf47ea3fc64 allow custom line breaks in help text
Mike Becker <universe@uap-core.de>
parents: 97
diff changeset
155 break;
4bf47ea3fc64 allow custom line breaks in help text
Mike Becker <universe@uap-core.de>
parents: 97
diff changeset
156 }
97
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
157 }
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
158 // break to new line, when spaces moved us outside the frame
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
159 if (x > endx) {
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
160 builder.append('\n');
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
161 builder.append(" ".repeat(startx));
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
162 x = startx;
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
163 }
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
164 }
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
165
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
166 return builder.toString();
1af1bfacd25a add helptext descriptions for features
Mike Becker <universe@uap-core.de>
parents: 79
diff changeset
167 }
0
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
168 }

mercurial