196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Projectpackage jdiff; 296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Projectimport java.io.*; 496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Projectimport java.util.*; 596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project/** 796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * The internal representation of an API. 896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * 996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * RootDoc could have been used for representing this, but 1096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * you cannot serialize a RootDoc object - see 1196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * http://developer.java.sun.com/developer/bugParade/bugs/4125581.html 1296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * You might be able use Javadoc.Main() to create another RootDoc, but the 1396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * methods are package private. You can run javadoc in J2SE1.4, see: 1496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * http://java.sun.com/j2se/1.4/docs/tooldocs/javadoc/standard-doclet.html#runningprogrammatically 1596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * but you still can't get the RootDoc object. 1696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * 1796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * The advantage of writing out an XML representation of each API is that 1896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * later runs of JDiff don't have to have Javadoc scan all the files again, 1996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * a possibly lengthy process. XML also permits other source code in 2096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * languages other than Java to be scanned to produce XML, and then versions 2196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * of JDiff can be used to create documents describing the difference in those 2296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * APIs. 2396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * 2496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * See the file LICENSE.txt for copyright details. 2596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * @author Matthew Doar, mdoar@pobox.com 2696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project */ 2796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Projectpublic class API { 2896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 2996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** 3096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * The list of all the top-level packages. 3196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * Each package contains classes, each class contains members, and so on. 3296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project */ 3396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public List packages_; // PackageAPI[] 3496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 3596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** 3696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * The list of all the classes. 3796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * This is used to generate the methods and fields which are inherited, 3896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * rather than storing them in the XML file. 3996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project */ 4096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public Hashtable classes_; 4196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 4296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** 4396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * The String which identifies this API, e.g. "SuperProduct 1.3". 4496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project */ 4596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public String name_ = null; 4696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 4796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** The current package being added to during parsing. */ 4896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public PackageAPI currPkg_ = null; 4996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** The current class being added to during parsing. */ 5096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public ClassAPI currClass_ = null; 5196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** The current constructor being added to during parsing. */ 5296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public ConstructorAPI currCtor_ = null; 5396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** The current method being added to during parsing. */ 5496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public MethodAPI currMethod_ = null; 5596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** The current field being added to during parsing. */ 5696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public FieldAPI currField_ = null; 5796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 5896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** Default constructor. */ 5996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public API() { 6096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project packages_ = new ArrayList(); //PackageAPI[] 6196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project classes_ = new Hashtable(); //ClassAPI 6296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 6396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 6496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project// 6596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project// Methods to display the contents of an API object. 6696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project// 6796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 6896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** Amount by which to increment each indentation. */ 6996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public static final int indentInc = 2; 7096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 7196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** Display the contents of the API object. */ 7296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public void dump() { 7396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project int indent = 0; 7496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project Iterator iter = packages_.iterator(); 7596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project while (iter.hasNext()) { 7696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project dumpPackage((PackageAPI)(iter.next()), indent); 7796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 7896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 7996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 8096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** 8196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * Display the contents of a PackageAPI object. 8296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * 8396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * @param pkg The given PackageAPI object. 8496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * @param indent The number of spaces to indent the output. 8596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project */ 8696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public void dumpPackage(PackageAPI pkg, int indent) { 8796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project for (int i = 0; i < indent; i++) System.out.print(" "); 8896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println("Package Name: " + pkg.name_); 8996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project Iterator iter = pkg.classes_.iterator(); 9096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project while (iter.hasNext()) { 9196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project dumpClass((ClassAPI)(iter.next()), indent + indentInc); 9296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 9396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Display documentation 9496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (pkg.doc_ != null) { 9596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.print("Package doc block:"); 9696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println("\"" + pkg.doc_ + "\""); 9796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 9896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 9996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 10096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** 10196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * Display the contents of a ClassAPI object. 10296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * 10396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * @param c The given ClassAPI object. 10496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * @param indent The number of spaces to indent the output. 10596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project */ 10696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public static void dumpClass(ClassAPI c, int indent) { 10796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project for (int i = 0; i < indent; i++) System.out.print(" "); 10896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (c.isInterface_) 10996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println("Interface name: " + c.name_); 11096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project else 11196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println("Class Name: " + c.name_); 11296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (c.extends_ != null) { 11396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project for (int i = 0; i < indent; i++) System.out.print(" "); 11496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println("Extends: " + c.extends_); 11596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 11696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (c.implements_.size() != 0) { 11796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project for (int i = 0; i < indent; i++) System.out.print(" "); 11896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println("Implements: "); 11996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project Iterator iter = c.implements_.iterator(); 12096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project while (iter.hasNext()) { 12196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project String interfaceImpl = (String)(iter.next()); 12296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project for (int i = 0; i < indent + 2; i++) System.out.print(" "); 12396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println(" " + interfaceImpl); 12496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 12596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 12696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Dump modifiers specific to a class 12796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (c.isAbstract_) 12896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.print("abstract "); 12996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Dump modifiers common to all 13096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project dumpModifiers(c.modifiers_, indent); 13196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Dump ctors 13296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project Iterator iter = c.ctors_.iterator(); 13396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project while (iter.hasNext()) { 13496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project dumpCtor((ConstructorAPI)(iter.next()), indent + indentInc); 13596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 13696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Dump methods 13796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project iter = c.methods_.iterator(); 13896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project while (iter.hasNext()) { 13996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project dumpMethod((MethodAPI)(iter.next()), indent + indentInc); 14096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 14196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Dump fields 14296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project iter = c.fields_.iterator(); 14396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project while (iter.hasNext()) { 14496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project dumpField((FieldAPI)(iter.next()), indent + indentInc); 14596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 14696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Display documentation 14796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (c.doc_ != null) { 14896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.print("Class doc block:"); 14996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println("\"" + c.doc_ + "\""); 15096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } else 15196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println(); 15296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 15396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 15496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** 15596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * Display the contents of the Modifiers object. 15696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * 15796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * @param c The given Modifiers object. 15896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * @param indent The number of spaces to indent the output. 15996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project */ 16096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public static void dumpModifiers(Modifiers m, int indent) { 16196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project for (int i = 0; i < indent; i++) System.out.print(" "); 16296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (m.isStatic) 16396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.print("static "); 16496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (m.isFinal) 16596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.print("final "); 16696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (m.visibility != null) 16796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.print("visibility = " + m.visibility + " "); 16896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Flush the line 16996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println(); 17096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 17196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 17296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** 17396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * Display the contents of a constructor. 17496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * 17596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * @param c The given constructor object. 17696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * @param indent The number of spaces to indent the output. 17796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project */ 17896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public static void dumpCtor(ConstructorAPI c, int indent) { 17996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project for (int i = 0; i < indent; i++) System.out.print(" "); 18096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println("Ctor type: " + c.type_); 18196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Display exceptions 18296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.print("exceptions: " + c.exceptions_ + " "); 18396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Dump modifiers common to all 18496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project dumpModifiers(c.modifiers_, indent); 18596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Display documentation 18696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (c.doc_ != null) { 18796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.print("Ctor doc block:"); 18896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println("\"" + c.doc_ + "\""); 18996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 19096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 19196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 19296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** 19396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * Display the contents of a MethodAPI object. 19496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * 19596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * @param m The given MethodAPI object. 19696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * @param indent The number of spaces to indent the output. 19796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project */ 19896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public static void dumpMethod(MethodAPI m, int indent) { 19996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (m.inheritedFrom_ != null) 20096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project return; 20196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project for (int i = 0; i < indent; i++) System.out.print(" "); 20296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.print("Method Name: " + m.name_); 20396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (m.inheritedFrom_ != null) 20496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println(", inherited from: " + m.inheritedFrom_); 20596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (m.returnType_ != null) 20696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println(", return type: " + m.returnType_); 20796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project else 20896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println(); 20996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Dump modifiers specific to a method 21096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (m.isAbstract_) 21196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.print("abstract "); 21296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (m.isNative_) 21396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.print("native "); 21496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (m.isSynchronized_) 21596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.print("synchronized "); 21696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Display exceptions 21796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.print("exceptions: " + m.exceptions_ + " "); 21896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Dump modifiers common to all 21996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project dumpModifiers(m.modifiers_, indent); 22096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 22196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project Iterator iter = m.params_.iterator(); 22296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project while (iter.hasNext()) { 22396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project dumpParam((ParamAPI)(iter.next()), indent + indentInc); 22496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 22596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Display documentation 22696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (m.doc_ != null) { 22796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.print("Method doc block:"); 22896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println("\"" + m.doc_ + "\""); 22996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 23096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 23196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 23296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** 23396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * Display the contents of a field. 23496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * Does not show inherited fields. 23596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * 23696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * @param f The given field object. 23796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * @param indent The number of spaces to indent the output. 23896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project */ 23996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public static void dumpField(FieldAPI f, int indent) { 24096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (f.inheritedFrom_ != null) 24196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project return; 24296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project for (int i = 0; i < indent; i++) System.out.print(" "); 24396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println("Field Name: " + f.name_ + ", type: " + f.type_); 24496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (f.inheritedFrom_ != null) 24596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println(", inherited from: " + f.inheritedFrom_); 24696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (f.isTransient_) 24796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.print("transient "); 24896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (f.isVolatile_) 24996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.print("volatile "); 25096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Dump modifiers common to all 25196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project dumpModifiers(f.modifiers_, indent); 25296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Display documentation 25396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (f.doc_ != null) 25496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.print("Field doc block:"); 25596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println("\"" + f.doc_ + "\""); 25696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 25796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 25896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** 25996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * Display the contents of a parameter. 26096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * 26196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * @param p The given parameter object. 26296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * @param indent The number of spaces to indent the output. 26396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project */ 26496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public static void dumpParam(ParamAPI p, int indent) { 26596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project for (int i = 0; i < indent; i++) System.out.print(" "); 26696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println("Param Name: " + p.name_ + ", type: " + p.type_); 26796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 26896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 26996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** 27096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * Convert all HTML tags to text by placing them inside a CDATA element. 27196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * Characters still have to be valid Unicode characters as defined by the 27296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * parser. 27396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project */ 27496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public static String stuffHTMLTags(String htmlText) { 27596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (htmlText.indexOf("]]>") != -1) { 27696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project System.out.println("Warning: illegal string ]]> found in text. Ignoring the comment."); 27796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project return ""; 27896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 27996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project return "<![CDATA[" + htmlText + "]]>"; 28096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 28196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 28296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** 28396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * Convert all HTML tags to text by stuffing text into the HTML tag 28496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * to stop it being an HTML or XML tag. E.g. "<code>foo</code>" 28596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * becomes "lEsS_tHaNcode>foolEsS_tHaN/code>". Replace all < 28696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * characters 28796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * with the string "lEsS_tHaN". Also replace & character with the 28896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * string "aNd_cHaR" to avoid text entities. Also replace " 28996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * character with the 29096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * string "qUoTe_cHaR". 29196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project */ 29296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public static String hideHTMLTags(String htmlText) { 29396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project StringBuffer sb = new StringBuffer(htmlText); 29496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project int i = 0; 29596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project while (i < sb.length()) { 29696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (sb.charAt(i) == '<') { 29796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.setCharAt(i ,'l'); 29896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.insert(i+1, "EsS_tHaN"); 29996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } else if (sb.charAt(i) == '&') { 30096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.setCharAt(i ,'a'); 30196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.insert(i+1, "Nd_cHaR"); 30296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } else if (sb.charAt(i) == '"') { 30396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.setCharAt(i ,'q'); 30496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.insert(i+1, "uote_cHaR"); 30596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 30696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project i++; 30796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 30896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project return sb.toString(); 30996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 31096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 31196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** 31296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * Convert text with stuffed HTML tags ("lEsS_tHaN", etc) into HTML text. 31396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project */ 31496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public static String showHTMLTags(String text) { 31596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project StringBuffer sb = new StringBuffer(text); 31696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project StringBuffer res = new StringBuffer(); 31796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project int len = sb.length(); 31896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project res.setLength(len); 31996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project int i = 0; 32096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project int resIdx = 0; 32196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project while (i < len) { 32296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project char c = sb.charAt(i); 32396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (len - i > 8 && c == 'l' && 32496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.charAt(i+1) == 'E' && 32596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.charAt(i+2) == 's' && 32696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.charAt(i+3) == 'S' && 32796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.charAt(i+4) == '_' && 32896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.charAt(i+5) == 't' && 32996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.charAt(i+6) == 'H' && 33096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.charAt(i+7) == 'a' && 33196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.charAt(i+8) == 'N') { 33296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project res.setCharAt(resIdx ,'<'); 33396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project i += 8; 33496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } else if (len - i > 9 && c == 'q' && 33596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.charAt(i+1) == 'U' && 33696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.charAt(i+2) == 'o' && 33796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.charAt(i+3) == 'T' && 33896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.charAt(i+4) == 'e' && 33996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.charAt(i+5) == '_' && 34096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.charAt(i+6) == 'c' && 34196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.charAt(i+7) == 'H' && 34296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.charAt(i+8) == 'a' && 34396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.charAt(i+9) == 'R') { 34496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project res.setCharAt(resIdx ,'"'); 34596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project i += 9; 34696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } else if (len - i > 7 && c == 'a' && 34796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.charAt(i+1) == 'N' && 34896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.charAt(i+2) == 'd' && 34996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.charAt(i+3) == '_' && 35096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.charAt(i+4) == 'c' && 35196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.charAt(i+5) == 'H' && 35296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.charAt(i+6) == 'a' && 35396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.charAt(i+7) == 'R') { 35496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project res.setCharAt(resIdx ,'&'); 35596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project i += 7; 35696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } else { 35796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project res.setCharAt(resIdx, c); 35896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 35996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project i++; 36096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project resIdx++; 36196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 36296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project res.setLength(resIdx); 36396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project return res.toString(); 36496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 36596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project 36696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project /** 36796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * <b>NOT USED</b>. 36896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * 36996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * Replace all instances of <p> with <p/>. Just for the small number 37096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * of HMTL tags which don't require a matching end tag. 37196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * Also make HTML conform to the simple HTML requirements such as 37296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * no double hyphens. Double hyphens are replaced by - and the character 37396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * entity for a hyphen. 37496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * 37596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * Cases where this fails and has to be corrected in the XML by hand: 37696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * Attributes' values missing their double quotes , e.g. size=-2 37796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * Mangled HTML tags e.g. <ttt> 37896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * 37996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * <p><b>NOT USED</b>. There is often too much bad HTML in 38096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * doc blocks to try to handle every case correctly. Better just to 38196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * stuff the *lt; and &: characters with stuffHTMLTags(). Though 38296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * the resulting XML is not as elegant, it does the job with less 38396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project * intervention by the user. 38496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project */ 38596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project public static String convertHTMLTagsToXHTML(String htmlText) { 38696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project StringBuffer sb = new StringBuffer(htmlText); 38796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project int i = 0; 38896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project boolean inTag = false; 38996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project String tag = null; 39096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Needs to re-evaluate this length at each loop 39196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project while (i < sb.length()) { 39296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project char c = sb.charAt(i); 39396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (inTag) { 39496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (c == '>') { 39596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // OPTION Could fail at or fix some errorneous tags here 39696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Make the best guess as to whether this tag is terminated 39796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (Comments.isMinimizedTag(tag) && 39896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project htmlText.indexOf("</" + tag + ">", i) == -1) 39996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.insert(i, "/"); 40096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project inTag = false; 40196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } else { 40296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // OPTION could also make sure that attribute values are 40396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // surrounded by quotes. 40496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project tag += c; 40596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 40696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 40796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (c == '<') { 40896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project inTag = true; 40996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project tag = ""; 41096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 41196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // -- is not allowed in XML, but !-- is part of an comment, 41296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // and --> is also part of a comment 41396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (c == '-' && i > 0 && sb.charAt(i-1) == '-') { 41496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (!(i > 1 && sb.charAt(i-2) == '!')) { 41596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.setCharAt(i, '&'); 41696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.insert(i+1, "#045;"); 41796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project i += 5; 41896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 41996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 42096b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project i++; 42196b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 42296b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project if (inTag) { 42396b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Oops. Someone forgot to close their HTML tag, e.g. "<code." 42496b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project // Close it for them. 42596b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project sb.insert(i, ">"); 42696b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 42796b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project return sb.toString(); 42896b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project } 42996b00fec6cd6068c1c5ae09de0358340c0ec499eThe Android Open Source Project} 430