/** * Copyright 2009, Google Inc. All rights reserved. * Licensed to PSF under a Contributor Agreement. */ package org.python.indexer.demos; import org.python.indexer.Indexer; import org.python.indexer.Outliner; import java.util.List; /** * Generates a static-html outline for a file. */ class HtmlOutline { private Indexer indexer; private StringBuilder buffer; public HtmlOutline(Indexer idx) { this.indexer = idx; } /** * Generates HTML outline for {@code path}. * @return the html as an {@code UL} element */ public String generate(String path) throws Exception { buffer = new StringBuilder(1024); List<Outliner.Entry> entries = indexer.generateOutline(path); addOutline(entries); String html = buffer.toString(); buffer = null; return html; } private void addOutline(List<Outliner.Entry> entries) { add("<ul>\n"); for (Outliner.Entry e : entries) { addEntry(e); } add("</ul>\n"); } private void addEntry(Outliner.Entry e) { add("<li>"); String style = null; switch (e.getKind()) { case FUNCTION: case METHOD: case CONSTRUCTOR: style = "function"; break; case CLASS: style = "type-name"; break; case PARAMETER: style = "parameter"; break; case VARIABLE: case SCOPE: style = "identifier"; break; } add("<a href='#"); add(e.getQname()); add("'>"); if (style != null) { add("<span class='"); add(style); add("'>"); } add(e.getName()); if (style != null) { add("</span>"); } add("</a>"); if (e.isBranch()) { addOutline(e.getChildren()); } add("</li>"); } private void add(String text) { buffer.append(text); } }