private void setTemplates(Article article, ParsedPage page) { final List<Template> templates = new ArrayList<Template>(10); for (final de.tudarmstadt.ukp.wikipedia.parser.Template t : page .getTemplates()) { final List<String> templateParameters = t.getParameters(); parseTemplatesSchema(article, templateParameters); if (t.getName().toLowerCase().startsWith("infobox")) { article.setInfobox(new Template(t.getName(), templateParameters)); } else { templates.add(new Template(t.getName(), templateParameters)); } } article.setTemplates(templates); }
/** * Returns a List of the Templates of this ContentElement in the Range of s */ public List<Template> getTemplates(Span s){ List<Template> result = new ArrayList<Template>(); for( Template t: templates) if( t.getPos().hits( s ) ) result.add( t ); return result; }
public ResolvedTemplate parseTemplate(Template t, ParsedPage pp) { final String templateName = t.getName(); StringBuilder sb = new StringBuilder(); sb.append(templatePrefix); sb.append( t.getName() + parameterDivisor ); for( String s: t.getParameters()) { sb.append( s + parameterDivisor ); List<String> templateParameters = t.getParameters(); templateParameters.add( emptyLinkText ); result.setPostParseReplacement( t.getParameters().get(1) ); result.setParsedObject( new Link(null, t.getPos() , templateParameters.get(0), Link.type.AUDIO, null ) ); templateParameters.add( emptyLinkText ); result.setPostParseReplacement(t.getParameters().get(1)); result.setParsedObject( new Link(null, t.getPos(), t.getParameters().get(0), Link.type.VIDEO, null ) ); return result;
boolean errorWithSrcLocation = t.getSrcSpan().getEnd() < 0; // this checks for what seems to be when parsing fails in JWPL String templateTextOrig; if (!errorWithSrcLocation){ templateTextOrig = xml.getBody().substring(t.getSrcSpan().getStart(), t.getSrcSpan().getEnd()); }else{ // this makes up for errors in JWPL (or bad script, but it mostly looks like erros) int estimatedLength = t.getPos().getEnd() - t.getPos().getStart(); templateTextOrig = xml.getBody().substring(t.getSrcSpan().getStart(), t.getSrcSpan().getStart() + estimatedLength + 1); String templateName = t.getName(); // SUBARTICLE INFO STUFF templateName = new Title(templateName, false, lang).toString(); // this appears to be necessary due to JWPL's handling of template names ParsedLink.SubarticleType tempSubType; NameSpace type = destTitle.getNamespace(); if (type == NameSpace.ARTICLE){ ParsedLocation location = new ParsedLocation(xml, secNum, paraNum, t.getSrcSpan().getStart()); visitLink(location, destTitle, templateLink.getText(), tempSubType); } else if (type == NameSpace.CATEGORY){ ParsedCategory pc = new ParsedCategory(); pc.location = new ParsedLocation(xml, secNum, paraNum, t.getSrcSpan().getStart()); pc.category = destTitle; visitCategory(pc); Title destTitle = new Title(dest, lang); try { ParsedLocation location = new ParsedLocation(xml, secNum, paraNum, t.getSrcSpan().getStart()); visitLink(location, destTitle, dest, tempSubType); } catch (WikiBrainException e) { LOG.error(String.format("Could not process template-based subarticle link: \t%s\t%s", xml, t.toString()), e);
/** * * Returns the set of names of all templates that are contained in the given * article (without duplicates).<br> * * Note: The names are SQL escaped using {@link StringUtils#sqlEscape(String)}. * * @param pageText * the page to get the templates from * @return a set of template names (without duplicates) */ private Set<String> getTemplateNames(String pageText) { Set<String> names = new HashSet<String>(); if (!pageText.isEmpty()) { try { ParsedPage pp = parser.parse(pageText); List<Template> templates = pp.getTemplates(); for (Template t : templates) { names.add(StringUtils.sqlEscape(t.getName().toLowerCase())); } } catch (Exception e) { // Most likely parsing problems logger.error("Problems parsing page!", e); } } return names; }
Template t = new Template(ts, encodeWikistyle(sm.substring( templateOpenTag + 2, templateNameEnd).trim()), templateOptions); t.setSrcSpan(new SrcSpan(sm.getSrcPos(templateOpenTag), sm .getSrcPos(templateCloseTag + 2))); t.setPos(ts);
private static void checkRange( ContentElement ce ){ List<SrcSpan> eil = new ArrayList<SrcSpan>(); for( Span s: ce.getFormatSpans( FormatType.BOLD ) ) eil.add( s.getSrcSpan() ); for( Span s: ce.getFormatSpans( FormatType.ITALIC ) ) eil.add( s.getSrcSpan() ); for( Span s: ce.getFormatSpans( FormatType.MATH ) ) eil.add( s.getSrcSpan() ); for( Span s: ce.getFormatSpans( FormatType.TAG ) ) eil.add( s.getSrcSpan() ); for( Span s: ce.getFormatSpans( FormatType.NOWIKI ) ) eil.add( s.getSrcSpan() ); for( Link l: ce.getLinks()) eil.add( l.getSrcSpan() ); for( Template t: ce.getTemplates() ) eil.add( t.getSrcSpan() ); ce.setSrcSpan( getEvalInfo( ce.getSrcSpan(), eil) ); }
boolean containsTpl = false; tplLoop:for(Template tpl:pp.getTemplates()){ if(tpl.getName().equalsIgnoreCase(templateName)){ containsTpl=true; break tplLoop;
/** * Generates HTML Output for a {@link Template}. */ private static String templateToHtml( Template t){ if( t == null ) { return "null"; } StringBuilder result = new StringBuilder(); result.append( "<table class=\"Template\">\n" + "<tr><th class=\"Template\">Template</th></tr>\n"+ "<tr><td class=\"Template\">" + "Name: \""+convertTags( t.getName() )+"\"<br>"+ "</td></tr>\n"); if( t.getParameters().size() != 0 ){ result.append("<tr><td class=\"Template\">"); for( String parameter: t.getParameters() ) { result.append("Parameter: \""+convertTags( parameter )+"\"<br>"); } result.append("</td></tr>\n"); } result.append("</table>" ); return result.toString(); }
String templateName = t.getName().toLowerCase(); if( templateName.startsWith("vorlage:") )templateName = templateName.substring(8); else if( templateName.startsWith("template:") )templateName = templateName.substring(9);
/** * Sorts the Templates... */ private static List<Template> sortTemplates(List<Template> templates) { List<Template> result = new ArrayList<Template>(); for (Template t : templates) { int pos = 0; while (pos < result.size() && t.getPos().getStart() > result.get(pos).getPos() .getStart()) { pos++; } result.add(pos, t); } return result; }
public ResolvedTemplate parseTemplate(Template t, ParsedPage pp) { ResolvedTemplate result = new ResolvedTemplate( t ); result.setPreParseReplacement( ResolvedTemplate.TEMPLATESPACER ); StringBuilder sb = new StringBuilder(); sb.append(templatePrefix); sb.append( t.getName()+parameterDivisor ); for( String s: t.getParameters()){ sb.append( s +parameterDivisor ); } sb.delete( sb.length()-parameterDivisor.length(), sb.length() ); sb.append(templatePostfix); result.setPostParseReplacement( sb.toString() ); result.setParsedObject( t ); return result; }
/** * Does the same as revisionContainsTemplateFragment() without using a template index * * @param revId * @param templateFragment * @return * @throws WikiApiException */ public boolean revisionContainsTemplateFragmentWithoutIndex(int revId, String templateFragment) throws WikiApiException{ if(revApi==null){ revApi = new RevisionApi(wiki.getDatabaseConfiguration()); } if(parser==null){ //TODO switch to SWEBLE MediaWikiParserFactory pf = new MediaWikiParserFactory( wiki.getDatabaseConfiguration().getLanguage()); pf.setTemplateParserClass(ShowTemplateNamesAndParameters.class); parser = pf.createParser(); } List<Template> tplList = parser.parse(revApi.getRevision(revId).getRevisionText()).getTemplates(); for(Template tpl:tplList){ if(tpl.getName().toLowerCase().startsWith(templateFragment.toLowerCase())){ return true; } } return false; }
for (int j = tl.size() - 1; j >= 0; j--) delete.add(tl.get(j).getPos());
/** * Does the same as revisionContainsTemplateName() without using a template index * * @param revId * @param templateName * @return * @throws WikiApiException */ public boolean revisionContainsTemplateNameWithoutIndex(int revId, String templateName) throws WikiApiException{ if(revApi==null){ revApi = new RevisionApi(wiki.getDatabaseConfiguration()); } if(parser==null){ //TODO switch to SWEBLE MediaWikiParserFactory pf = new MediaWikiParserFactory( wiki.getDatabaseConfiguration().getLanguage()); pf.setTemplateParserClass(ShowTemplateNamesAndParameters.class); parser = pf.createParser(); } List<Template> tplList = parser.parse(revApi.getRevision(revId).getRevisionText()).getTemplates(); for(Template tpl:tplList){ if(tpl.getName().equalsIgnoreCase(templateName)){ return true; } } return false; }