import "go/printer"

printerパッケージは、AST(Abstract Syntax Tree:抽象構文木)ノードの表示出力を実装しています。

パッケージファイル

nodes.go printer.go

定数

通常、これらのConfig.Modeフラグを使って表示出力の制御を行います。

const (
    GenHTML   uint = 1 << iota // HTMLを生成する
    RawFormat                  // tabwriterを使用しない。(セットするとUseSpacesは無効)
    TabIndent                  // インデントにタブを使用する。(セットするとUseSpacesは無効)
    UseSpaces                  // 配置にタブではなくスペースを使用する
)

Fprint関数

func Fprint(output io.Writer, fset *token.FileSet, node interface{}) os.Error

Fprintは、ASTノードの出力を「整形」します。この関数は、Config.Fprintをデフォルト設定で呼び出します。

Config型

Configノードは、Fprintの出力を制御します。

type Config struct {
    Mode     uint   // デフォルト: 0
    Tabwidth int    // デフォルト: 8
    Styler   Styler // デフォルト: nil
}

(*Config) Fprint関数

func (cfg *Config) Fprint(output io.Writer, fset *token.FileSet, node interface{}) (int, os.Error)

Fprintは、指定した設定cfg使用して、ASTノードの出力を「整形」し、書き込んだ合計バイト数と、エラーがあればエラーを返します。位置情報は、ファイルセットfsetからの相対として解釈されます。ノード型は、*ast.File、もしくはast.Expr、ast.Decl、ast.Spec、ast.Stmに代入適合性をもつ型でなければなりません。

HTMLTag型

HTMLTagで、開始タグと終了タグを規定します。

type HTMLTag struct {
    Start, End string // タグがないときは、空文字列です
}

Styler型

Stylerは、行タグおよびGo言語の基本的な単語のフォーマットを指定します。フォーマットは、テキストとそれを囲んでいるHTMLタグ(空の可能性あり)から構成されます。

type Styler interface {
    LineTag(line int) ([]byte, HTMLTag)
    Comment(c *ast.Comment, line []byte) ([]byte, HTMLTag)
    BasicLit(x *ast.BasicLit) ([]byte, HTMLTag)
    Ident(id *ast.Ident) ([]byte, HTMLTag)
    Token(tok token.Token) ([]byte, HTMLTag)
}