use of net.htmlparser.jericho.Segment in project knox by apache.
the class HtmlFilterReaderBase method processCurrentSegment.
private void processCurrentSegment() {
Segment segment = parser.getCurrentSegment();
// ignore it as it was already output along with the previous tag.
if (segment.getEnd() <= lastSegEnd) {
return;
}
lastSegEnd = segment.getEnd();
if (segment instanceof Tag) {
if (segment instanceof StartTag) {
processStartTag((StartTag) segment);
} else if (segment instanceof EndTag) {
processEndTag((EndTag) segment);
} else {
writer.write(segment.toString());
}
} else {
processText(segment);
}
}
use of net.htmlparser.jericho.Segment in project lotro-tools by dmorcellet.
the class JerichoHtmlUtils method getChildNodes.
/**
* Get all the child nodes of a given parent node.
* This is a recursive search.
* @param root Root node.
* @return A list of nodes.
*/
public static List<Segment> getChildNodes(Element root) {
List<Segment> nodes = new ArrayList<Segment>();
Segment seg = root.getContent();
for (Iterator<Segment> it = seg.getNodeIterator(); it.hasNext(); ) {
Segment s = it.next();
nodes.add(s);
}
return nodes;
}
use of net.htmlparser.jericho.Segment in project lotro-tools by dmorcellet.
the class ItemPageParser method parseMoneyReward.
private Money parseMoneyReward(Element rewardDiv) {
Money m = new Money();
List<Segment> nodes = JerichoHtmlUtils.getChildNodes(rewardDiv);
int nb = nodes.size();
for (int i = 0; i < nb; i++) {
Segment s = nodes.get(i);
if (s.getClass() == Segment.class) {
String text = s.toString();
if (text.equalsIgnoreCase("Worth"))
continue;
int nbCoins = NumericTools.parseInt(s.toString(), 0);
if ((nbCoins > 0) && (i < nb - 1)) {
Segment tmp = nodes.get(i + 1);
if (tmp instanceof StartTag) {
String className = ((StartTag) tmp).getAttributeValue("class");
if ("coin".equals(className)) {
String type = ((StartTag) tmp).getAttributeValue("src");
if (type != null) {
if (type.contains("silver")) {
m.setSilverCoins(nbCoins);
} else if (type.contains("copper")) {
m.setCopperCoins(nbCoins);
} else if (type.contains("gold")) {
m.setGoldCoins(nbCoins);
} else {
_logger.warn("Item [" + _key + "]. Unknown coin type [" + type + "]");
}
}
}
}
}
}
}
return m;
/*
<div class="itemworth">
Worth 3
<img class="coin" src="http://content.turbine.com/sites/lorebook.lotro.com/images/icons/currency/silver.gif">
30
<img class="coin" src="http://content.turbine.com/sites/lorebook.lotro.com/images/icons/currency/copper.gif">
</div>
*/
}
use of net.htmlparser.jericho.Segment in project vue-gwt by Axellience.
the class TemplateParser method processElement.
/**
* Recursive method that will process the whole template DOM tree.
* @param element Current element being processed
*/
private void processElement(Element element) {
context.setCurrentSegment(element);
currentProp = null;
currentAttribute = null;
Attributes attributes = element.getAttributes();
Attribute vForAttribute = attributes != null ? attributes.get("v-for") : null;
if (vForAttribute != null) {
// Add a context layer for our v-for
context.addContextLayer();
// Process the v-for expression, and update our attribute
String processedVForValue = processVForValue(vForAttribute.getValue());
outputDocument.replace(vForAttribute.getValueSegment(), processedVForValue);
}
// Process the element
if (attributes != null)
processElementAttributes(element);
// Process text segments
StreamSupport.stream(((Iterable<Segment>) element::getNodeIterator).spliterator(), false).filter(segment -> !(segment instanceof Tag) && !(segment instanceof CharacterReference)).filter(segment -> {
for (Element child : element.getChildElements()) if (child.encloses(segment))
return false;
return true;
}).forEach(this::processTextNode);
// Recurse downwards
element.getChildElements().forEach(this::processElement);
// After downward recursion, pop the context layer
if (vForAttribute != null)
context.popContextLayer();
}
use of net.htmlparser.jericho.Segment in project lotro-tools by dmorcellet.
the class QuestPageParser method parseQuestField.
private void parseQuestField(Element questField) {
List<Element> strongs = questField.getAllElements(HTMLElementName.STRONG);
if ((strongs != null) && (strongs.size() == 1)) {
List<Segment> nodes = JerichoHtmlUtils.getChildNodes(questField);
Element strong = strongs.get(0);
String key = CharacterReference.decodeCollapseWhiteSpace(strong.getContent());
key = cleanupFieldName(key);
if ("Category".equals(key)) {
String value = nodes.get(3).toString().trim();
_quest.setCategory(value);
} else if ("Scope".equals(key)) {
String value = nodes.get(3).toString().trim();
if ("n/a".equals(value))
value = "";
_quest.setQuestScope(value);
} else if ("Minimum Level".equals(key)) {
String value = nodes.get(3).toString().trim();
Integer minLevel = NumericTools.parseInteger(value);
_quest.setMinimumLevel(minLevel);
} else if ("Maximum Level".equals(key)) {
String value = nodes.get(3).toString().trim();
Integer maxLevel = NumericTools.parseInteger(value);
_quest.setMaximumLevel(maxLevel);
} else if ("Required Classes".equals(key)) {
List<Element> as = questField.getAllElements(HTMLElementName.A);
for (Element a : as) {
String className = CharacterReference.decodeCollapseWhiteSpace(a.getContent());
_quest.addRequiredClass(className);
}
} else if ((PREREQUISITE_QUESTS.equals(key)) || (NEXT_QUESTS.equals(key))) {
List<Element> dds = questField.getAllElements("dd");
if ((dds != null) && (dds.size() == 1)) {
parseQuestsList(dds.get(0), key);
}
} else if ("Arc(s)".equals(key)) {
String value = nodes.get(5).toString().trim();
_quest.setQuestArc(value);
} else if ("Required Races".equals(key)) {
List<Element> as = questField.getAllElements(HTMLElementName.A);
for (Element a : as) {
String race = CharacterReference.decodeCollapseWhiteSpace(a.getContent());
_quest.addRequiredRace(race);
}
} else if ("Monster Play Quest".equals(key)) {
_quest.setFaction(FACTION.MONSTER_PLAY);
} else {
_logger.warn("Quest [" + _key + "]. Unmanaged quest field key [" + key + "]");
}
} else {
parseQuestIcons(questField);
}
}
Aggregations