|
@@ -85,7 +85,7 @@ public class RichTextConverter implements TagConstant {
|
|
|
List<Section> sections = new ArrayList<>();
|
|
|
for (List<Node> curNodes : groups) {
|
|
|
List<Block> blocks = new ArrayList<>();
|
|
|
- splitBlocks(curNodes, blocks);
|
|
|
+ splitBlocks(curNodes, blocks, null);
|
|
|
if (blocks.isEmpty()) {
|
|
|
continue;
|
|
|
}
|
|
@@ -99,7 +99,7 @@ public class RichTextConverter implements TagConstant {
|
|
|
return sections;
|
|
|
}
|
|
|
|
|
|
- private static void splitBlocks(List<Node> nodes, List<Block> blocks) {
|
|
|
+ private static void splitBlocks(List<Node> nodes, List<Block> blocks, Param parentParam) {
|
|
|
if (nodes.isEmpty()) {
|
|
|
return;
|
|
|
}
|
|
@@ -116,23 +116,50 @@ public class RichTextConverter implements TagConstant {
|
|
|
processAudio(element, blocks);
|
|
|
|
|
|
if (!node.childNodes().isEmpty()) {
|
|
|
- splitBlocks(node.childNodes(), blocks);
|
|
|
+ splitBlocks(node.childNodes(), blocks, parentParam);
|
|
|
}
|
|
|
} else if (TAG_B.equals(node.nodeName()) || TAG_STRONG.equals(node.nodeName())) {
|
|
|
|
|
|
Param param = new Param();
|
|
|
+ if (parentParam != null) {
|
|
|
+ param.setItalic(parentParam.getItalic());
|
|
|
+ param.setUnderline(parentParam.getUnderline());
|
|
|
+ }
|
|
|
param.setBold(true);
|
|
|
- processText(element.text(), param, blocks);
|
|
|
+
|
|
|
+ if (!node.childNodes().isEmpty()) {
|
|
|
+ splitBlocks(node.childNodes(), blocks, param);
|
|
|
+ } else {
|
|
|
+ processText(element.text(), param, blocks);
|
|
|
+ }
|
|
|
} else if (TAG_I.equals(node.nodeName()) || TAG_EM.equals(node.nodeName())) {
|
|
|
|
|
|
Param param = new Param();
|
|
|
+ if (parentParam != null) {
|
|
|
+ param.setBold(parentParam.getBold());
|
|
|
+ param.setUnderline(parentParam.getUnderline());
|
|
|
+ }
|
|
|
param.setItalic(true);
|
|
|
- processText(element.text(), param, blocks);
|
|
|
+
|
|
|
+ if (!node.childNodes().isEmpty()) {
|
|
|
+ splitBlocks(node.childNodes(), blocks, param);
|
|
|
+ } else {
|
|
|
+ processText(element.text(), param, blocks);
|
|
|
+ }
|
|
|
} else if (TAG_U.equals(node.nodeName())) {
|
|
|
|
|
|
Param param = new Param();
|
|
|
+ if (parentParam != null) {
|
|
|
+ param.setBold(parentParam.getBold());
|
|
|
+ param.setItalic(parentParam.getItalic());
|
|
|
+ }
|
|
|
param.setUnderline(true);
|
|
|
- processText(element.text(), param, blocks);
|
|
|
+
|
|
|
+ if (!node.childNodes().isEmpty()) {
|
|
|
+ splitBlocks(node.childNodes(), blocks, param);
|
|
|
+ } else {
|
|
|
+ processText(element.text(), param, blocks);
|
|
|
+ }
|
|
|
} else if (TAG_SUP.equals(node.nodeName())) {
|
|
|
|
|
|
Param param = new Param();
|
|
@@ -144,13 +171,13 @@ public class RichTextConverter implements TagConstant {
|
|
|
param.setSub(true);
|
|
|
processText(element.text(), param, blocks);
|
|
|
} else {
|
|
|
- splitBlocks(node.childNodes(), blocks);
|
|
|
+ splitBlocks(node.childNodes(), blocks, parentParam);
|
|
|
}
|
|
|
} else {
|
|
|
if (node instanceof TextNode) {
|
|
|
TextNode element = (TextNode) node;
|
|
|
|
|
|
- processText(element.text(), null, blocks);
|
|
|
+ processText(element.text(), parentParam, blocks);
|
|
|
} else {
|
|
|
log.debug("Ignore node {}", node.nodeName());
|
|
|
}
|