import {Fatal} from '../lang/Fatal'; import {ObjectBase} from '../lang/ObjectBase'; import {Objects} from '../lang/Objects'; import {ResultEnum} from '../lang/ResultEnum'; import {StringBuffer} from '../lang/StringBuffer'; import {StringUtil} from '../lang/StringUtil'; import {ClassUtil} from '../reflect/ClassUtil'; //========================================================== // 标签类。 // // @class // @author maocy // @version 150114 //========================================================== export class Tag extends ObjectBase { //.......................................................... // @attribute protected _name: string; protected _children: Objects; protected _trimLeft: boolean; protected _trimRight: boolean; //========================================================== // 构建处理。 //========================================================== public constructor() { super(); this._name = 'Tag'; } //========================================================== // 开始处理。 // // @param context 环境 // @return 处理结果 //========================================================== public onBegin(context) { return ResultEnum.Continue; } //========================================================== // 结束处理。 // // @param context 环境 // @return 处理结果 //========================================================== public onEnd(context) { return ResultEnum.Continue; } //========================================================== // 获得名称。 // // @return 名称 //========================================================== public name() { return this._name; } //========================================================== // 设置属性值。 // // @param name 名称 // @param value 内容 //========================================================== public set(name, value) { throw new Fatal(this, 'Unknown attribute name. (name={1}, value={2})', name, value); } //========================================================== // 增加一个子标签。 // // @method // @param tag 子标签 //========================================================== public push(tag) { var children = this._children; if (!children) { children = this._children = new Objects(); } children.push(tag); } //========================================================== // 解析处理。 // // @param context 环境 //========================================================== public parse(context) { // 开始处理 var resultCd = this.onBegin(context); if (resultCd == ResultEnum.Continue) { // 子标签处理 var children = this._children; if (children) { var count = children.count(); for (var i = 0; i < count; i++) { var child = children.get(i); resultCd = child.parse(context); if (resultCd == ResultEnum.Cancel) { return resultCd; } context._trimLeft = child._trimLeft; context._trimRight = child._trimRight; } } return this.onEnd(context); } return resultCd; } //========================================================== //获得字符串。 // // @return 字符串 //========================================================== public toString(): string { return null; } //========================================================== //获取运行时信息。 // // @method // @param ps:source:TString 信息 // @param pt:tag:FTag 标签 // @param pl:level:Integer 级别 //========================================================== public innerDump(ps, pt, pl) { ps.appendRepeat(' ', pl); ps.append(ClassUtil.dump(pt)); // 追加属性 var s = pt.toString(); if (!StringUtil.isEmpty(s)) { ps.append(' [', s, ']'); } // 追加子标签 var children = pt._children; if (children) { ps.append('\n'); var count = children.count(); for (var i = 0; i < count; i++) { var child = children.get(i); this.innerDump(ps, child, pl + 1); if (i < count - 1) { ps.append('\n'); } } } } //========================================================== //获取运行时信息。 // // @method // @return String 运行信息 //========================================================== public dump() { var result = new StringBuffer(); this.innerDump(result, this, 0); return result.flush(); } }