Advertisement
Guest User

Untitled

a guest
May 26th, 2014
19
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.93 KB | None | 0 0
  1. I have plans to implement something like 'Brook Language' (Brool, that's it, BrooL). Imagine this script:
  2.  
  3. const
  4. le = LineEnding;
  5. script =
  6. 'person.persontype.thetype=sometype' + le +
  7. 'person.id=1' + le +
  8. 'person.name=Silvio Clécio' + le +
  9. 'person.docs[0].number=DOC.1' + le +
  10. 'person.docs[0].authors[0]=Chico' + le +
  11. 'person.docs[0].authors[1]=Cesar' + le +
  12. 'person.docs[1].number=DOC.2' + le +
  13. 'person.docs[1].authors[0]=Waldir' + le +
  14. 'person.docs[1].authors[1]=Gilson' + le +
  15. 'person.phones.notes[0]=Call Gilson please' + le +
  16. 'person.phones.notes[1]=Call to 99 9 999-9999' + le +
  17. 'person.phones[0].number=88 9 8888-8888' + le +
  18. 'person.phones[1].number=99 9 9999-9999';
  19.  
  20. It can populate this objects:
  21.  
  22. var
  23. n: string;
  24. s: string = '';
  25. doc: TDoc;
  26. author: TAuthor;
  27. pho: TPhone;
  28. per: TPerson;
  29. psr: TBrookObjectParser;
  30. src: TStrings;
  31. begin
  32. per := TPerson.Create;
  33. psr := TBrookObjectParser.Create(nil);
  34. src := TStringList.Create;
  35. try
  36. src.Text := script;
  37. psr.Parse(per, src);
  38. s := 'Type: ' + per.PersonType.TheType + le;
  39. s += 'ID: ' + IntToStr(per.Id) + le;
  40. s += 'Name: ' + per.Name + le;
  41. s += 'Docs: ' + le;
  42. for doc in per.Docs do
  43. begin
  44. s += ' ' + doc.Number + le;
  45. for author in doc.Authors do
  46. s += ' by ' + author.Name + le;
  47. end;
  48. s += 'Phones: ' + le;
  49. for pho in per.Phones do
  50. s += ' ' + pho.Number + le;
  51. s += 'Notes: ' + le;
  52. for n in per.Phones.Notes do
  53. s += ' ' + n + le;
  54. WriteLn('All object values: ');
  55. WriteLn(s);
  56. finally
  57. src.Free;
  58. per.Free;
  59. psr.Free;
  60. end;
  61. end;
  62.  
  63. ---
  64.  
  65. { TAuthor }
  66.  
  67. TAuthor = class
  68. private
  69. FName: string;
  70. published
  71. property Name: string read FName write FName;
  72. end;
  73.  
  74. { TAuthors }
  75.  
  76. TAuthors = specialize TFPGList<TAuthor>;
  77.  
  78. ---
  79.  
  80. { TDoc }
  81.  
  82. TDoc = class
  83. private
  84. FAuthors: TAuthors;
  85. FNumber: string;
  86. public
  87. constructor Create;
  88. destructor Destroy; override;
  89. published
  90. property Number: string read FNumber write FNumber;
  91. property Authors: TAuthors read FAuthors write FAuthors;
  92. end;
  93.  
  94. { TDocs }
  95.  
  96. TDocs = specialize TFPGList<TDoc>;
  97.  
  98. { TDocsParserItem }
  99.  
  100. TDocsParserItem = specialize TBrookParserItem<TDocs, TDoc>;
  101.  
  102. ---
  103.  
  104. { TPersonType }
  105.  
  106. TPersonType = class
  107. private
  108. FTheType: string;
  109. published
  110. property TheType: string read FTheType write FTheType;
  111. end;
  112.  
  113. { TPerson }
  114.  
  115. TPerson = class
  116. private
  117. FDocs: TDocs;
  118. FId: Integer;
  119. FName: string;
  120. FPersonType: TPersonType;
  121. FPhones: TPhones;
  122. public
  123. constructor Create;
  124. destructor Destroy; override;
  125. published
  126. property PersonType: TPersonType read FPersonType;
  127. property Id: Integer read FId write FId;
  128. property Name: string read FName write FName;
  129. property Docs: TDocs read FDocs write FDocs;
  130. property Phones: TPhones read FPhones write FPhones;
  131. end;
  132.  
  133. ---
  134.  
  135. { TPhone }
  136.  
  137. TPhone = class
  138. private
  139. FNumber: string;
  140. published
  141. property Number: string read FNumber write FNumber;
  142. end;
  143.  
  144. { TPhones }
  145.  
  146. TPhones = class(specialize TFPGList<TPhone>)
  147. private
  148. FNotes: TStrings;
  149. public
  150. constructor Create;
  151. destructor Destroy; override;
  152. property Notes: TStrings read FNotes write FNotes;
  153. end;
  154.  
  155. ---
  156.  
  157. So, you can create dynamically some HTML controls, enjoying Brool in your inputs, for example:
  158.  
  159. static input:
  160.  
  161. <input type="text" name="person.name"/>
  162.  
  163. dynamically created via JS:
  164.  
  165. <input type="text" name="doc[0].number"/>
  166. <input type="text" name="doc[1].number"/>
  167. ...
  168. <input type="text" name="doc[N].number"/>
  169.  
  170. And all content would sent via URI: "person.name=ABC&doc[0].number=123&doc[1].number=456...doc[N].number=NNN", avoiding any problems with conversion of "values to HTTP / HTTP to values".
  171.  
  172. See this topic here: http://pastebin.com/M1vxVTkp
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement