/**
 * Filename    : TextJsonPrettyPrinter.js
 * Author      : Robert Cerny
 * Created     : 2006-10-30
 * Last Change : 2006-11-20
 *
 * Description:
 *   Prettyprints a JavaScript object for better human understanding. It
 *   takes care of indentation.
 *
 * Usage:
 *   var printer = CERNY.json.TextPrettyPrinter();
 *   var prettyJsonStr = printer.print(myObject);
 *
 * History:
 *   2006-10-30 Created.
 *
 * License:
 */

CERNY.require("CERNY.json.TextPrettyPrinter",
              "CERNY.json.Printer",
              "CERNY.util");

CERNY.json.TextPrettyPrinter = function(indentIncrease, obj) {
    indentIncrease = indentIncrease || 4;

    var self = CERNY.json.Printer(obj);
    self.indentIncrease = indentIncrease;

    self.startObject = CERNY.json.TextPrettyPrinter_startObject;
    self.endObject = CERNY.json.TextPrettyPrinter_endObject;
    self.endValue = CERNY.json.TextPrettyPrinter_endValue;

    return self;
};

CERNY.json.TextPrettyPrinter_startObject = function(str) {
    if (this.state.current() === this.STATES.START) {
        return CERNY.identity(str);
    } else {
        this.indent += this.indentIncrease;
        return CERNY.util.indent(this.indent) + str;
    }
};

CERNY.json.TextPrettyPrinter_endObject = function(str) {
    this.indent -= this.indentIncrease;
    return CERNY.identity(str);
};

CERNY.json.TextPrettyPrinter_endValue = function(str) {
    return str + CERNY.util.indent(this.indent + 1);
};

