content: /*
   * Copyright (C) 2015 The Android Open Source Project
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package com.android.ahat;
  
  import java.util.List;
  
  /**
   * An interface for rendering a page of content to the user.
   */
  interface Doc extends AutoCloseable {
    /**
     * Output the title of the page.
     */
    void title(String format, Object... args);
  
    /**
     * Print a line of text for a page menu.
     */
    void menu(DocString string);
  
    /**
     * Start a new section with the given title.
     */
    void section(String title);
  
    /**
     * Print a line of text in a normal font.
     */
    void println(DocString string);
  
    /**
     * Print a line of text in a large font that is easy to see and click on.
     */
    void big(DocString string);
  
    /**
     * Start a table with the given columns.
     *
     * An IllegalArgumentException is thrown if no columns are provided.
     *
     * This should be followed by calls to the 'row' method to fill in the table
     * contents and the 'end' method to end the table.
     */
    void table(Column... columns);
  
    /**
     * Start a table with the following heading structure:
     *   |  description  |  c2  | c3 | ... |
     *   | h1 | h2 | ... |      |    |     |
     *
     * Where subcols describes h1, h2, ...
     * and cols describes c2, c3, ...
     *
     * This should be followed by calls to the 'row' method to fill in the table
     * contents and the 'end' method to end the table.
     */
    void table(DocString description, List<Column> subcols, List<Column> cols);
  
    /**
     * Add a row to the currently active table.
     * The number of values must match the number of columns provided for the
     * currently active table.
     */
    void row(DocString... values);
  
    /**
     * Start a new description list.
     *
     * This should be followed by calls to description() and finally a call to
     * end().
     */
    void descriptions();
  
    /**
     * Add a description to the currently active description list.
     */
    void description(DocString key, DocString value);
  
    /**
     * End the currently active table or description list.
     */
    void end();
  }
  