183b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com/*
2a7139f6586c9bb8452e4c648ce582f8fbc626740JesusFreke@JesusFreke.com * Copyright (C) 2007 The Android Open Source Project
383b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com *
4a7139f6586c9bb8452e4c648ce582f8fbc626740JesusFreke@JesusFreke.com * Licensed under the Apache License, Version 2.0 (the "License");
5a7139f6586c9bb8452e4c648ce582f8fbc626740JesusFreke@JesusFreke.com * you may not use this file except in compliance with the License.
6a7139f6586c9bb8452e4c648ce582f8fbc626740JesusFreke@JesusFreke.com * You may obtain a copy of the License at
783b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com *
8a7139f6586c9bb8452e4c648ce582f8fbc626740JesusFreke@JesusFreke.com *      http://www.apache.org/licenses/LICENSE-2.0
9a7139f6586c9bb8452e4c648ce582f8fbc626740JesusFreke@JesusFreke.com *
10a7139f6586c9bb8452e4c648ce582f8fbc626740JesusFreke@JesusFreke.com * Unless required by applicable law or agreed to in writing, software
11a7139f6586c9bb8452e4c648ce582f8fbc626740JesusFreke@JesusFreke.com * distributed under the License is distributed on an "AS IS" BASIS,
12a7139f6586c9bb8452e4c648ce582f8fbc626740JesusFreke@JesusFreke.com * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a7139f6586c9bb8452e4c648ce582f8fbc626740JesusFreke@JesusFreke.com * See the License for the specific language governing permissions and
14a7139f6586c9bb8452e4c648ce582f8fbc626740JesusFreke@JesusFreke.com * limitations under the License.
1583b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com */
1683b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
17128e8279c3cf44cc1d1c8f263035ba8e4044d5c6JesusFreke@JesusFreke.com/*
18128e8279c3cf44cc1d1c8f263035ba8e4044d5c6JesusFreke@JesusFreke.com * As per the Apache license requirements, this file has been modified
19128e8279c3cf44cc1d1c8f263035ba8e4044d5c6JesusFreke@JesusFreke.com * from its original state.
20128e8279c3cf44cc1d1c8f263035ba8e4044d5c6JesusFreke@JesusFreke.com *
21128e8279c3cf44cc1d1c8f263035ba8e4044d5c6JesusFreke@JesusFreke.com * Such modifications are Copyright (C) 2010 Ben Gruver, and are released
22128e8279c3cf44cc1d1c8f263035ba8e4044d5c6JesusFreke@JesusFreke.com * under the original license
23128e8279c3cf44cc1d1c8f263035ba8e4044d5c6JesusFreke@JesusFreke.com */
24128e8279c3cf44cc1d1c8f263035ba8e4044d5c6JesusFreke@JesusFreke.com
2583b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.compackage org.jf.dexlib.Util;
2683b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
2783b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com/**
2883b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com * Interface for a binary output destination that may be augmented
2983b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com * with textual annotations.
3083b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com */
3183b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.compublic interface AnnotatedOutput
3283b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com        extends Output {
3383b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com    /**
3483b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     * Get whether this instance will actually keep annotations.
3583b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     *
3683b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     * @return <code>true</code> iff annotations are being kept
3783b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     */
3883b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com    public boolean annotates();
3983b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
4083b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com    /**
4183b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     * Get whether this instance is intended to keep verbose annotations.
4283b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     * Annotators may use the result of calling this method to inform their
4383b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     * annotation activity.
4483b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     *
4583b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     * @return <code>true</code> iff annotations are to be verbose
4683b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     */
4783b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com    public boolean isVerbose();
4883b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
4983b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com    /**
5083b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     * Add an annotation for the subsequent output. Any previously
5183b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     * open annotation will be closed by this call, and the new
5283b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     * annotation marks all subsequent output until another annotation
5383b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     * call.
5483b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     *
5583b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     * @param msg non-null; the annotation message
5683b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     */
5783b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com    public void annotate(String msg);
5883b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
5983b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com    /**
6083b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     * Add an annotation for a specified amount of subsequent
6183b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     * output. Any previously open annotation will be closed by this
6283b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     * call. If there is already pending annotation from one or more
6383b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     * previous calls to this method, the new call "consumes" output
6483b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     * after all the output covered by the previous calls.
6583b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     *
6683b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     * @param amt &gt;= 0; the amount of output for this annotation to
6783b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     * cover
6883b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     * @param msg non-null; the annotation message
6983b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     */
7083b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com    public void annotate(int amt, String msg);
7183b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
7283b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com    /**
7383b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     * End the most recent annotation. Subsequent output will be unannotated,
7483b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     * until the next call to {@link #annotate}.
7583b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     */
7683b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com    public void endAnnotation();
7783b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
7883b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com    /**
7983b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     * Get the maximum width of the annotated output. This is advisory:
8083b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     * Implementations of this interface are encouraged to deal with too-wide
8183b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     * output, but annotaters are encouraged to attempt to avoid exceeding
8283b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     * the indicated width.
8383b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     *
8483b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     * @return &gt;= 1; the maximum width
8583b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com     */
8683b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com    public int getAnnotationWidth();
8783b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
8883b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com    public void setIndentAmount(int indentAmount);
8983b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com    public void indent();
9083b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com    public void deindent();
9183b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com}