MODULE JSonObxNoModel; (** project = "YSon" organization = "" contributors = "" version = "System/Rsrc/About" copyright = "Kushnir Piotr Michailovich" license = "Docu/BB-License" purpose = "демонстрация работы форматтера без использования динамических моделей данных" changes = " - 20130527, pk, автогенерация заголовка, документирование - 20150204, pk, порт для fw " issues = "" **) IMPORT Gen:=JSonGenerator, F:=JSonFormatter, P:=JSonParser, Str, Out; TYPE Wr = POINTER TO RECORD (Gen.Writer) END; (* дефолтный вывод - в лог *) Reader = POINTER TO RECORD (P.Reader) base: Str.Dyn; pos: INTEGER; END; StdTarget = POINTER TO RECORD (P.Target) (* res, root, this: YSonModels.Value; *) name: ARRAY 256 OF CHAR; END; PROCEDURE (t: StdTarget) Result(): ANYPTR; BEGIN RETURN NIL END Result; PROCEDURE (t: StdTarget) LevelDown (id, type: INTEGER); BEGIN Out.String("down"); Out.Int(id); Out.Int(type); Out.Ln; END LevelDown; PROCEDURE (t: StdTarget) NextName (IN s: ARRAY OF CHAR); BEGIN t.name:=s$; Out.String("name:"); Out.String(s); Out.Ln; END NextName; PROCEDURE (t: StdTarget) LevelUp; BEGIN Out.String("up"); Out.Ln; END LevelUp; PROCEDURE (t: StdTarget) ThisValue (IN x: ARRAY OF CHAR; quoted: BOOLEAN); BEGIN Out.String("value:"); Out.String(x); Out.Bool(quoted); Out.Ln; END ThisValue; PROCEDURE (r: Reader) Read (OUT ch: CHAR): BOOLEAN; VAR ok: BOOLEAN; BEGIN ASSERT(r.Base()#NIL, 20); ok:=~r.Eot(); IF ok THEN ch:=r.base.Char(r.pos); INC(r.pos);END; RETURN ok END Read; PROCEDURE (r: Reader) SetPos (x: INTEGER); BEGIN r.pos:=x; END SetPos; PROCEDURE (r: Reader) Pos (): INTEGER; BEGIN RETURN r.pos END Pos; PROCEDURE (r: Reader) ConnectTo (source: ANYPTR); BEGIN ASSERT(source#NIL, 20); WITH source: Str.Dyn DO r.base:=source; r.pos:=0; ELSE HALT(100) END; END ConnectTo; PROCEDURE (r: Reader) Base (): ANYPTR; BEGIN RETURN r.base END Base; PROCEDURE (r: Reader) Eot(): BOOLEAN; BEGIN RETURN ~(r.pos