ObxNoModel.cp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. MODULE JSonObxNoModel;
  2. (**
  3. project = "YSon"
  4. organization = ""
  5. contributors = ""
  6. version = "System/Rsrc/About"
  7. copyright = "Kushnir Piotr Michailovich"
  8. license = "Docu/BB-License"
  9. purpose = "демонстрация работы форматтера без использования динамических моделей данных"
  10. changes = "
  11. - 20130527, pk, автогенерация заголовка, документирование
  12. - 20150204, pk, порт для fw
  13. "
  14. issues = ""
  15. **)
  16. IMPORT
  17. Gen:=JSonGenerator, F:=JSonFormatter,
  18. Out;
  19. TYPE
  20. Wr = POINTER TO RECORD (Gen.Writer) END; (* дефолтный вывод - в лог *)
  21. PROCEDURE (w: Wr) Char (c: CHAR);
  22. BEGIN
  23. Out.Char(c);
  24. END Char;
  25. PROCEDURE (w: Wr) Whitespace (s: ARRAY OF CHAR);
  26. BEGIN
  27. CASE s[0] OF
  28. 09X: Out.Tab;
  29. |0DX, 0AX: Out.Ln;
  30. |' ': Out.Char(' ');
  31. ELSE Out.String(s$) END
  32. END Whitespace;
  33. (* формирование структуры JSON непосредственно при выполнении комманд форматтера *)
  34. PROCEDURE Do*;
  35. TYPE Base = POINTER TO RECORD END;
  36. VAR b: Base; wr: Wr; f: F.Formatter; res: INTEGER;
  37. BEGIN
  38. Out.Ln;
  39. NEW(wr);
  40. NEW(b);
  41. wr.SetBase(b);
  42. f:=F.dir.New(wr);
  43. (* демонстрация пошагового результата *)
  44. f.WriteSym(F.arrBegin, res); (* [ *)
  45. f.WriteSym(F.objBegin, res); (* { *)
  46. f.WriteName('obj', res); (* "obj" *)
  47. f.WriteSym(F.objBegin, res); (* { *)
  48. f.WriteSym(F.objEnd, res); (* } *)
  49. f.WriteName('arr', res); (* "arr" *)
  50. f.WriteSym(F.arrBegin, res); (* [ *)
  51. f.WriteValue(F.atomVal, 'true', res); (* true *)
  52. f.WriteValue(F.atomVal, 'true', res); (* true *)
  53. f.WriteValue(F.atomVal, 'true', res); (* true *)
  54. f.WriteSym(F.objBegin, res); (* { *)
  55. f.WriteSym(F.objEnd, res); (* } *)
  56. f.WriteSym(F.arrBegin, res); (* [ *)
  57. f.WriteSym(F.arrEnd, res); (* ] *)
  58. f.WriteSym(F.arrEnd, res); (* ] *)
  59. f.WriteName('sss', res); (* "sss" *)
  60. f.WriteValue(F.atomVal, 'true', res); (* true *)
  61. f.WriteName('sss1', res); (* "sss1" *)
  62. f.WriteValue(F.stringVal, 'hello, world!', res); (* "hello, world!" *)
  63. f.WriteSym(F.objEnd, res); (* } *)
  64. f.WriteSym(F.arrEnd, res); (* ] *)
  65. END Do;
  66. BEGIN
  67. END JSonObxNoModel.
  68. (*JediPlain*gvFEZXZDb21tYW5kZXJzLlN0ZFZpZXdEZXNjAPFEZXZDb21tYW5kZXJzLlZpZXdEZXNjAPFWaWV3cy5WaWV3RGVzYwDwU3RvcmVzLlN0b3JlRGVzYwAAAAAAAAAAAAAAAAAGAAAAAAAAFQAA*)YSonObxNoModel.Do