Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- I have plans to implement something like 'Brook Language' (Brool, that's it, BrooL). Imagine this script:
- const
- le = LineEnding;
- script =
- 'person.persontype.thetype=sometype' + le +
- 'person.id=1' + le +
- 'person.name=Silvio Clécio' + le +
- 'person.docs[0].number=DOC.1' + le +
- 'person.docs[0].authors[0]=Chico' + le +
- 'person.docs[0].authors[1]=Cesar' + le +
- 'person.docs[1].number=DOC.2' + le +
- 'person.docs[1].authors[0]=Waldir' + le +
- 'person.docs[1].authors[1]=Gilson' + le +
- 'person.phones.notes[0]=Call Gilson please' + le +
- 'person.phones.notes[1]=Call to 99 9 999-9999' + le +
- 'person.phones[0].number=88 9 8888-8888' + le +
- 'person.phones[1].number=99 9 9999-9999';
- It can populate this objects:
- var
- n: string;
- s: string = '';
- doc: TDoc;
- author: TAuthor;
- pho: TPhone;
- per: TPerson;
- psr: TBrookObjectParser;
- src: TStrings;
- begin
- per := TPerson.Create;
- psr := TBrookObjectParser.Create(nil);
- src := TStringList.Create;
- try
- src.Text := script;
- psr.Parse(per, src);
- s := 'Type: ' + per.PersonType.TheType + le;
- s += 'ID: ' + IntToStr(per.Id) + le;
- s += 'Name: ' + per.Name + le;
- s += 'Docs: ' + le;
- for doc in per.Docs do
- begin
- s += ' ' + doc.Number + le;
- for author in doc.Authors do
- s += ' by ' + author.Name + le;
- end;
- s += 'Phones: ' + le;
- for pho in per.Phones do
- s += ' ' + pho.Number + le;
- s += 'Notes: ' + le;
- for n in per.Phones.Notes do
- s += ' ' + n + le;
- WriteLn('All object values: ');
- WriteLn(s);
- finally
- src.Free;
- per.Free;
- psr.Free;
- end;
- end;
- ---
- { TAuthor }
- TAuthor = class
- private
- FName: string;
- published
- property Name: string read FName write FName;
- end;
- { TAuthors }
- TAuthors = specialize TFPGList<TAuthor>;
- ---
- { TDoc }
- TDoc = class
- private
- FAuthors: TAuthors;
- FNumber: string;
- public
- constructor Create;
- destructor Destroy; override;
- published
- property Number: string read FNumber write FNumber;
- property Authors: TAuthors read FAuthors write FAuthors;
- end;
- { TDocs }
- TDocs = specialize TFPGList<TDoc>;
- { TDocsParserItem }
- TDocsParserItem = specialize TBrookParserItem<TDocs, TDoc>;
- ---
- { TPersonType }
- TPersonType = class
- private
- FTheType: string;
- published
- property TheType: string read FTheType write FTheType;
- end;
- { TPerson }
- TPerson = class
- private
- FDocs: TDocs;
- FId: Integer;
- FName: string;
- FPersonType: TPersonType;
- FPhones: TPhones;
- public
- constructor Create;
- destructor Destroy; override;
- published
- property PersonType: TPersonType read FPersonType;
- property Id: Integer read FId write FId;
- property Name: string read FName write FName;
- property Docs: TDocs read FDocs write FDocs;
- property Phones: TPhones read FPhones write FPhones;
- end;
- ---
- { TPhone }
- TPhone = class
- private
- FNumber: string;
- published
- property Number: string read FNumber write FNumber;
- end;
- { TPhones }
- TPhones = class(specialize TFPGList<TPhone>)
- private
- FNotes: TStrings;
- public
- constructor Create;
- destructor Destroy; override;
- property Notes: TStrings read FNotes write FNotes;
- end;
- ---
- So, you can create dynamically some HTML controls, enjoying Brool in your inputs, for example:
- static input:
- <input type="text" name="person.name"/>
- dynamically created via JS:
- <input type="text" name="doc[0].number"/>
- <input type="text" name="doc[1].number"/>
- ...
- <input type="text" name="doc[N].number"/>
- 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".
- See this topic here: http://pastebin.com/M1vxVTkp
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement