begin var r := new Regex('IEnumerable<(\w+)>'); var section := ''; var funcs := ReadLines('Документация.pas') .Select(s->begin if s.StartsWith('// ') then begin section := s.Remove(0,3); writeln(section); end; Result := s end) .Where(s->s.startswith('function IEnumerable<') or s.startswith('procedure IEnumerable<')).Print(NewLine) .Select(s->s.Replace('function IEnumerable.','function ')) .Select(s->s.Replace('procedure IEnumerable.','procedure ')) .Select(s->s.Replace('function IEnumerable<число>.','function ')) .Select(s->r.Replace(s,'sequence of $1')) .Select(s->s.Replace('<','<').Replace('>','>')) .Select(s->s.Replace('sequence of ','sequence of ')) .Select(s->s.Insert(9,'').Insert(0,'')) .Select(s->Rec(section,s)); var comments := ReadLines('Документация.pas').Where(s->s.startswith('///')).Select(s->s.Remove(0,4)); comments := comments.Select(s->begin s := Trim(s); if s[s.Length]<>'.' then s += '.'; Result := s; end); var z := funcs.Zip(comments,(f,c)->Rec(f.Item1,f.Item2,c)); var g := z.GroupBy(x->x.Item1); var toc := Seq(''); foreach var sect in g do begin var Key: string := sect.Key; //writeln(Key); var qq := Key.SkipWhile(c->not (c in ['a'..'z','A'..'Z'])); Key := new string(qq.ToArray()); var keys := key.ToWords(' ',',').Select(s->''); Writeln(keys); var sq := sect.Select(s->''#13#10''+s.Item2+''+NewLine+'
'+'      '+s.Item3+#13#10''); sq := '

'+sect.Key+'

'+'

Описание методов

Методы приведены для последовательности sequence of T.

'+''+sq+'
'; sq := sq + '

Пример

'; sq := ''+sq+''; sq := '' + keys + '' + sq; WriteLines('Files\'+Key+'.html',sq); var s1 := ''; var s2 := ''; toc := toc + '
  • '+s1; toc := toc + s2; toc := toc + ''; //Println(sect.Key); //Println(sect.AsEnumerable); end; WriteLines('toc.html',toc); //g.Print(NewLine+NewLine); {var z := funcs.Zip(comments,(f,c)->''#13#10''+f+''+NewLine+'
    '+'      '+c+#13#10''); z := ''+z+'
    '; WriteAllLines('a.html',z);} end.