Skip to content

Commit a512802

Browse files
committed
extract anchor, skip empty anchor without text
1 parent 39c726a commit a512802

File tree

11 files changed

+414
-47
lines changed

11 files changed

+414
-47
lines changed

src/main/java/io/rulebased/group/javahelp/converter/antora/JavaHelpToAntoraConverter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.fasterxml.jackson.databind.ObjectMapper;
44
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
55
import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator;
6+
import io.rulebased.group.javahelp.converter.antora.convert.anchor.IAnchorConverter;
67
import io.rulebased.group.javahelp.converter.antora.convert.html.IHtmlConverter;
78
import io.rulebased.group.javahelp.converter.antora.convert.images.IImageConverter;
89
import io.rulebased.group.javahelp.converter.antora.convert.toc.IToCConverter;
@@ -25,7 +26,7 @@ class JavaHelpToAntoraConverter implements JavaHelpToAntoraConverterDT<JavaHelpT
2526

2627
JavaHelpToAntoraConverter(ILfetLogging lfetLogging) {
2728
this.lfetLogging = lfetLogging;
28-
toCConverter = IToCConverter.create(lfetLogging, IImageConverter.create(lfetLogging), IHtmlConverter.create(lfetLogging));
29+
toCConverter = IToCConverter.create(lfetLogging, IImageConverter.create(lfetLogging), IHtmlConverter.create(lfetLogging, IAnchorConverter.create(lfetLogging)));
2930
}
3031

3132

src/main/java/io/rulebased/group/javahelp/converter/antora/convert/anchor/AnchorConverter.java

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import io.rulebased.group.javahelp.converter.antora.logging.ILfetLogging;
44
import lombok.RequiredArgsConstructor;
55
import org.jsoup.nodes.Element;
6+
import org.jsoup.nodes.TextNode;
67

78
@RequiredArgsConstructor
89
class AnchorConverter implements ConvertAnchorDT<AnchorModel>, IAnchorConverter {
@@ -12,12 +13,58 @@ class AnchorConverter implements ConvertAnchorDT<AnchorModel>, IAnchorConverter
1213

1314
@Override
1415
public boolean isCurrentElementIs(CurrentElementIs arg0, AnchorModel model) {
15-
return model.anchorElement.nodeName().equalsIgnoreCase(arg0.getSymbol());
16+
return model.element.nodeName().equalsIgnoreCase(arg0.getSymbol());
1617
}
1718

1819
@Override
19-
public void doExtractAnchor(AnchorModel model) {
20+
public boolean isContainsCurrentElementChildElements(AnchorModel model) {
21+
model.childsNodesIt = model.element.childNodes().iterator();
22+
return model.childsNodesIt.hasNext();
23+
}
2024

25+
@Override
26+
public boolean isNextChildElementExists(AnchorModel model) {
27+
if (model.childsNodesIt.hasNext()) {
28+
model.currentNode = model.childsNodesIt.next();
29+
} else {
30+
model.currentNode = null;
31+
}
32+
return model.currentNode != null;
33+
}
34+
35+
@Override
36+
public boolean isCurrentElementTypeIs(CurrentElementTypeIs arg0, AnchorModel model) {
37+
switch (arg0) {
38+
case $001: {
39+
return model.currentNode instanceof TextNode;
40+
}
41+
case $002: {
42+
return model.currentNode instanceof Element;
43+
}
44+
default: {
45+
return false;
46+
}
47+
}
48+
}
49+
50+
@Override
51+
public boolean isAnchorTextIsEmpty(AnchorModel model) {
52+
return model.anchorText.isEmpty();
53+
}
54+
55+
@Override
56+
public void doExtractAnchorTarget(AnchorModel model) {
57+
model.anchorTarget = model.element.attr("href");
58+
}
59+
60+
@Override
61+
public void doExtractAnchorText(AnchorModel model) {
62+
model.anchorText = ((TextNode)model.currentNode).text();
63+
}
64+
65+
@Override
66+
public void doCreateXrefLink(AnchorModel model) {
67+
model.asciidoc.add("xref:" + model.anchorTarget + "[" + model.anchorText + "]");
2168
}
2269

2370
@Override

src/main/java/io/rulebased/group/javahelp/converter/antora/convert/anchor/AnchorModel.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,21 @@
22

33
import lombok.RequiredArgsConstructor;
44
import org.jsoup.nodes.Element;
5+
import org.jsoup.nodes.Node;
56

7+
import java.util.ArrayList;
8+
import java.util.Iterator;
69
import java.util.List;
710

811
@RequiredArgsConstructor
912
class AnchorModel {
1013

11-
final Element anchorElement;
14+
final Element element;
15+
String anchorTarget;
16+
String anchorText = "";
17+
Iterator<Node> childsNodesIt;
18+
Node currentNode;
1219

13-
List<String> asciidoc;
20+
List<String> asciidoc = new ArrayList<>();
1421

1522
}

src/main/java/io/rulebased/group/javahelp/converter/antora/convert/anchor/ConvertAnchorDT.java

Lines changed: 93 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// Generated by LF-ET 2.2.0 (220224a), https://www.lohrfink.de/lfet
44
// From decision table
55
// "/opt/data/github/rulebased-group/javahelp-to-antora-converter/src/main/resources/ConvertAnchor.lfet"
6-
// 03.04.2022 22:46
6+
// 24.04.2022 02:33
77
//
88
// Prolog Standard ---->
99
// profile LFET.Java.Prolog.Standard.Interface.ini not found
@@ -25,38 +25,73 @@ interface ConvertAnchorDT<T>
2525
// Prolog Decision Table <----
2626

2727
/**
28-
* <b>C02: current element is ...</b><br>
28+
* <b>B02: current element is ...</b><br>
2929
* <br>
3030
* // $$Enum.Plain<br>
3131
* <br>
3232
* The enum generation has been triggered in project.ini by:<br>
33-
* - <b>ide.Java.InterfaceEnum.001</b>: Symbol; Title; IncludeTagsText = $$Enum.Plain; MethodName = EnumName
33+
* - <b>ide.Java.InterfaceEnum.001</b>: Symbol; Title; IncludeTagsText = $$Enum.Plain; MethodName = EnumName;
3434
*/
3535
boolean isCurrentElementIs(ConvertAnchorDT.CurrentElementIs arg0, T model);
3636

3737
/**
38-
* <b>A01: extract anchor</b>
38+
* <b>B03: contains current element child elements</b>
3939
*/
40-
void doExtractAnchor(T model);
40+
boolean isContainsCurrentElementChildElements(T model);
41+
42+
/**
43+
* <b>B04: next child element exists</b>
44+
*/
45+
boolean isNextChildElementExists(T model);
46+
47+
/**
48+
* <b>B05: current element type is ...</b><br>
49+
* <br>
50+
* // $$Enum.Plain<br>
51+
* <br>
52+
* The enum generation has been triggered in project.ini by:<br>
53+
* - <b>ide.Java.InterfaceEnum.001</b>: Symbol; Title; IncludeTagsText = $$Enum.Plain; MethodName = EnumName;
54+
*/
55+
boolean isCurrentElementTypeIs(ConvertAnchorDT.CurrentElementTypeIs arg0, T model);
56+
57+
/**
58+
* <b>B06: anchor text is empty</b>
59+
*/
60+
boolean isAnchorTextIsEmpty(T model);
61+
62+
/**
63+
* <b>A01: extract anchor target</b>
64+
*/
65+
void doExtractAnchorTarget(T model);
66+
67+
/**
68+
* <b>A02: extract anchor text</b>
69+
*/
70+
void doExtractAnchorText(T model);
71+
72+
/**
73+
* <b>A03: create xref link</b>
74+
*/
75+
void doCreateXrefLink(T model);
4176

4277
void doTrace(java.lang.String dtName, java.lang.String version, int rules, int rule, T model);
4378

4479
/**
45-
* <b>C02: current element is ...</b><br>
80+
* <b>B02: current element is ...</b><br>
4681
* <br>
4782
* // $$Enum.Plain<br>
4883
* <br>
4984
* The enum generation has been triggered in project.ini by:<br>
50-
* - <b>ide.Java.InterfaceEnum.001</b>: Symbol; Title; IncludeTagsText = $$Enum.Plain; MethodName = EnumName
85+
* - <b>ide.Java.InterfaceEnum.001</b>: Symbol; Title; IncludeTagsText = $$Enum.Plain; MethodName = EnumName;
5186
*/
5287
enum CurrentElementIs
5388
{
5489
/**
55-
* <b>C02: current element is ...</b><br>
90+
* <b>B02: current element is ...</b><br>
5691
* <br>
5792
* // $$Enum.Plain<br>
5893
* <br>
59-
* <b>C02/01: a - anchor</b>
94+
* <b>B02/01: a - anchor</b>
6095
*/
6196
$001("a", "anchor");
6297

@@ -80,6 +115,55 @@ public String getTitle()
80115
return title;
81116
}
82117
}
118+
119+
/**
120+
* <b>B05: current element type is ...</b><br>
121+
* <br>
122+
* // $$Enum.Plain<br>
123+
* <br>
124+
* The enum generation has been triggered in project.ini by:<br>
125+
* - <b>ide.Java.InterfaceEnum.001</b>: Symbol; Title; IncludeTagsText = $$Enum.Plain; MethodName = EnumName;
126+
*/
127+
enum CurrentElementTypeIs
128+
{
129+
/**
130+
* <b>B05: current element type is ...</b><br>
131+
* <br>
132+
* // $$Enum.Plain<br>
133+
* <br>
134+
* <b>B05/01: T - TextNode</b>
135+
*/
136+
$001("T", "TextNode"),
137+
138+
/**
139+
* <b>B05: current element type is ...</b><br>
140+
* <br>
141+
* // $$Enum.Plain<br>
142+
* <br>
143+
* <b>B05/02: E - Element</b>
144+
*/
145+
$002("E", "Element");
146+
147+
private final String symbol;
148+
149+
private final String title;
150+
151+
CurrentElementTypeIs(String symbol, String title)
152+
{
153+
this.symbol = symbol;
154+
this.title = title;
155+
}
156+
157+
public String getSymbol()
158+
{
159+
return symbol;
160+
}
161+
162+
public String getTitle()
163+
{
164+
return title;
165+
}
166+
}
83167

84168
// Epilog Standard ---->
85169
// profile LFET.Java.Epilog.Standard.Interface.ini not found

src/main/java/io/rulebased/group/javahelp/converter/antora/convert/anchor/ConvertAnchorRulesEngine.java

Lines changed: 92 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// Generated by LF-ET 2.2.0 (220224a), https://www.lohrfink.de/lfet
44
// From decision table
55
// "/opt/data/github/rulebased-group/javahelp-to-antora-converter/src/main/resources/ConvertAnchor.lfet"
6-
// 03.04.2022 22:46
6+
// 24.04.2022 02:33
77
//
88

99
// Prolog Standard ---->
@@ -38,37 +38,108 @@ public <T> void execute(ConvertAnchorDT<T> iface, T model)
3838
{
3939
if ( iface.isCurrentElementIs(ConvertAnchorDT.CurrentElementIs.$001 /* a */ , model) )
4040
{
41-
// Rule R01 ---->
42-
43-
iface.doTrace("ConvertAnchor", "20220403.224635", 3, 1, model);
44-
45-
iface.doExtractAnchor(model);
46-
47-
ruleGroup = 2;
48-
exit = false;
49-
50-
// Rule R01 <----
41+
if ( iface.isContainsCurrentElementChildElements(model) )
42+
{
43+
// Rule R01 ---->
44+
45+
iface.doTrace("ConvertAnchor", "20220424.023312", 8, 1, model);
46+
47+
iface.doExtractAnchorTarget(model);
48+
49+
ruleGroup = 2;
50+
exit = false;
51+
52+
// Rule R01 <----
53+
}
54+
else
55+
{
56+
// Rule R02 ---->
57+
58+
iface.doTrace("ConvertAnchor", "20220424.023312", 8, 2, model);
59+
60+
iface.doExtractAnchorTarget(model);
61+
62+
exit = true;
63+
64+
// Rule R02 <----
65+
}
5166
}
5267
else
5368
{
54-
// Rule R02 ---->
69+
// Rule R03 ---->
5570

56-
iface.doTrace("ConvertAnchor", "20220403.224635", 3, 2, model);
71+
iface.doTrace("ConvertAnchor", "20220424.023312", 8, 3, model);
5772

5873
exit = true;
5974

60-
// Rule R02 <----
75+
// Rule R03 <----
6176
}
6277
}
6378
else
6479
{
65-
// Rule R03 ---->
66-
67-
iface.doTrace("ConvertAnchor", "20220403.224635", 3, 3, model);
68-
69-
exit = true;
70-
71-
// Rule R03 <----
80+
if ( iface.isNextChildElementExists(model) )
81+
{
82+
if ( iface.isCurrentElementTypeIs(ConvertAnchorDT.CurrentElementTypeIs.$001 /* T */ , model) )
83+
{
84+
// Rule R04 ---->
85+
86+
iface.doTrace("ConvertAnchor", "20220424.023312", 8, 4, model);
87+
88+
iface.doExtractAnchorText(model);
89+
90+
ruleGroup = 2;
91+
exit = false;
92+
93+
// Rule R04 <----
94+
}
95+
else if ( iface.isCurrentElementTypeIs(ConvertAnchorDT.CurrentElementTypeIs.$002 /* E */ , model) )
96+
{
97+
// Rule R05 ---->
98+
99+
iface.doTrace("ConvertAnchor", "20220424.023312", 8, 5, model);
100+
101+
ruleGroup = 2;
102+
exit = false;
103+
104+
// Rule R05 <----
105+
}
106+
else
107+
{
108+
// Rule R06 ---->
109+
110+
iface.doTrace("ConvertAnchor", "20220424.023312", 8, 6, model);
111+
112+
ruleGroup = 2;
113+
exit = false;
114+
115+
// Rule R06 <----
116+
}
117+
}
118+
else
119+
{
120+
if ( iface.isAnchorTextIsEmpty(model) )
121+
{
122+
// Rule R07 ---->
123+
124+
iface.doTrace("ConvertAnchor", "20220424.023312", 8, 7, model);
125+
126+
exit = true;
127+
128+
// Rule R07 <----
129+
}
130+
else
131+
{
132+
// Rule R08 ---->
133+
134+
iface.doTrace("ConvertAnchor", "20220424.023312", 8, 8, model);
135+
136+
iface.doCreateXrefLink(model);
137+
138+
exit = true;
139+
140+
// Rule R08 <----
141+
}
142+
}
72143
}
73144

74145
}

0 commit comments

Comments
 (0)