public RewriterResults rewrite(Gadget gadget, MutableContent content) { if (gadget.getSpec().getModulePrefs().getFeatures().ContainsKey("caja") || "1".Equals(gadget.getContext().getParameter("caja"))) { URI retrievedUri = gadget.getContext().getUrl(); UriCallback2 cb = new UriCallback2(retrievedUri); MessageQueue mq = new SimpleMessageQueue(); DefaultGadgetRewriter rw = new DefaultGadgetRewriter(mq); CharProducer input = CharProducer.Factory.create( new java.io.StringReader(content.getContent()), FilePosition.instance(new InputSource(new java.net.URI(retrievedUri.ToString())), 2, 1, 1)); java.lang.StringBuilder output = new java.lang.StringBuilder(); try { rw.rewriteContent(new java.net.URI(retrievedUri.ToString()), input, cb, output); } catch (GadgetRewriteException e) { throwCajolingException(e, mq); return(RewriterResults.notCacheable()); } catch (IOException e) { throwCajolingException(e, mq); return(RewriterResults.notCacheable()); } content.setContent(tameCajaClientApi() + output.ToString()); } return(null); }
public static void rewrite(java.io.Reader content, Uri source, Dictionary <String, IHtmlTagTransformer> transformers, java.io.Writer writer) { CharProducer producer = CharProducer.Factory.create(content, new InputSource(new java.net.URI(source.ToString()))); HtmlLexer lexer = new HtmlLexer(producer); try { Token lastToken = null; Token currentTag = null; IHtmlTagTransformer currentTransformer = null; bool tagChanged; while (lexer.hasNext()) { tagChanged = false; Token token = lexer.next() as Token; if (token.type == HtmlTokenType.IGNORABLE) { continue; } if (token.type == HtmlTokenType.TAGBEGIN) { currentTag = token; tagChanged = true; } if (tagChanged) { if (currentTransformer == null) { transformers.TryGetValue(currentTag.toString().Substring(1).ToLower(), out currentTransformer); } else { if (!currentTransformer.acceptNextTag(currentTag)) { writer.write(currentTransformer.close()); transformers.TryGetValue(currentTag.toString().Substring(1).ToLower(), out currentTransformer); } } } if (currentTransformer == null) { writer.write(producePreTokenSeparator(token, lastToken)); writer.write(token.toString()); writer.write(producePostTokenSeparator(token, lastToken)); } else { currentTransformer.accept(token, lastToken); } if (token.type == HtmlTokenType.TAGEND) { currentTag = null; } lastToken = token; } if (currentTransformer != null) { writer.write(currentTransformer.close()); } writer.flush(); } catch (Exception pe) { throw pe; } }
public static List <String> rewrite(java.io.Reader content, Uri source, ILinkRewriter rewriter, java.io.Writer writer, bool extractImports) { List <String> imports = new List <string>(); CharProducer producer = CharProducer.Factory.create(content, new InputSource(new java.net.URI(source.ToString()))); CssLexer lexer = new CssLexer(producer); try { bool inImport = false; while (lexer.hasNext()) { Token token = lexer.next(); if (extractImports) { if (token.type == CssTokenType.SYMBOL && token.text.ToLower().Equals("@import")) { inImport = true; continue; } if (inImport) { if (token.type == CssTokenType.URI) { Match matcher = urlMatcher.Match(token.text); if (matcher.Success) { imports.Add(matcher.Groups[2].Value.Trim()); } } else if (token.type != CssTokenType.SPACE && token.type != CssTokenType.PUNCTUATION) { inImport = false; } } if (!inImport) { writer.write(token.text); } } else { if (token.type == CssTokenType.URI) { writer.write(rewriteLink(token, source, rewriter)); continue; } writer.write(token.text); } } writer.flush(); } catch (ParseException pe) { pe.printStackTrace(); } catch (Exception ioe) { throw ioe; } return(imports); }