/* * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation, either version 3 of the License, or (at your option) any later * version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program. If not, see <http://www.gnu.org/licenses/>. */ package YANModPack.util.htmltmpls; import java.util.Map; import java.util.regex.Pattern; /** * @author FBIagent */ public final class HTMLTemplateUtils { public static int findSequenceEnd(StringBuilder string, int startOffset, HTMLTemplateFunc func) { int dept = 0; String seqStart = func.getSequenceStart(); String seqEnd = func.getSequenceEnd(); String escapedSeqStart = "\\" + seqStart; String escapedSeqEnd = "\\" + seqEnd; while (true) { int endSeqOffset = string.indexOf(seqEnd, startOffset); if (endSeqOffset == -1) { return -1; // there is no sequence end to find } int escapedSeqStartOffset = string.indexOf(escapedSeqStart, startOffset); int escapedSeqEndOffset = string.indexOf(escapedSeqEnd, startOffset); int startSeqOffset = string.indexOf(seqStart, startOffset); if (((endSeqOffset < startSeqOffset) || (startSeqOffset == -1)) && ((endSeqOffset < escapedSeqStartOffset) || (escapedSeqStartOffset == -1)) && ((endSeqOffset < escapedSeqEndOffset) || (escapedSeqEndOffset == -1))) { if (dept == 0) { return endSeqOffset + seqEnd.length(); } --dept; startOffset = endSeqOffset + seqEnd.length(); } else if ((startSeqOffset != -1) && (startSeqOffset < endSeqOffset) && ((startSeqOffset < escapedSeqStartOffset) || (escapedSeqStartOffset == -1)) && ((startSeqOffset < escapedSeqEndOffset) || (escapedSeqEndOffset == -1))) { startOffset = startSeqOffset + seqStart.length(); ++dept; } else if ((escapedSeqStartOffset != -1) && ((escapedSeqStartOffset < escapedSeqEndOffset) || (escapedSeqEndOffset == -1))) { startOffset += escapedSeqStartOffset + escapedSeqStart.length(); } else if ((escapedSeqEndOffset != -1) && ((escapedSeqEndOffset < escapedSeqStartOffset) || (escapedSeqStartOffset != -1))) { startOffset += escapedSeqEndOffset + escapedSeqEnd.length(); } } } /** * Searches the placeholder specified by placeholderString inside the placeholders map * @param placeholderString placeholder to search for * @param placeholders map with the placeholders available * @return the placeholder if found, null otherwise */ public static HTMLTemplatePlaceholder getPlaceholder(String placeholderString, Map<String, HTMLTemplatePlaceholder> placeholders) { if (placeholders == null) { return null; } String[] placeholderParts = placeholderString.split(Pattern.quote(".")); HTMLTemplatePlaceholder placeholder = null; for (String placeholderPart : placeholderParts) { if (placeholder == null) { placeholder = placeholders.get(placeholderPart); if (placeholder == null) { break; } } else { placeholder = placeholder.getChild(placeholderPart); if (placeholder == null) { break; } } } return placeholder; } /** * Get the value of the placeholder specified by placeholderString * @param placeholderString the placeholder to get the value from * @param placeholders placeholder map to search in * @return the value of the found placeholder * @throws Exception the placeholder was not found or the value is null */ public static String getPlaceholderValue(String placeholderString, Map<String, HTMLTemplatePlaceholder> placeholders) throws Exception { HTMLTemplatePlaceholder placeholder = getPlaceholder(placeholderString, placeholders); if (placeholder == null) { throw new Exception(); } String value = placeholder.getValue(); if (value == null) { throw new Exception(); } return value; } /** * Get the childs of the placeholder specified by placeholderString in an unmodifyable map * @param placeholderString the placeholder to get the childs from * @param placeholders placeholder map to search in * @return the childs in an unmodifyable map of the found placeholder * @throws Exception the placeholder was not found */ public static Map<String, HTMLTemplatePlaceholder> getPlaceholderChilds(String placeholderString, Map<String, HTMLTemplatePlaceholder> placeholders) throws Exception { HTMLTemplatePlaceholder placeholder = getPlaceholder(placeholderString, placeholders); if (placeholder == null) { throw new Exception(); } return placeholder.getChilds(); } }