Пишем программу (в Delphi) для создания книг FB2 - страница 10

стр.

>

>begin

>oldStyle:= ZZ; EndNotes_count:= 1;

>// if

>OutList.Add('

');

>with Form1.ListBox1 do

>for i:= 0 to Count – 1 do // просматриваем текст

>begin

>S:= Items[i];

>Ss:= GetStyle(S, CurStyle); // получаем чистую строку и стиль

>s:= '';

>if ss <> '' then

>for j:= 1 to length(Ss) do

>begin // просматриваем строку

>case ss[j] of

>'~': begin // если это концевая сноска

>S:= S + ''

>+IntToStr(EndNotes_count)+'';

>inc(EndNotes_count); // увеличиваем счетчик сносок

>end;

>'^': S:= S + '́'; // ставим ударение

>else S:= S + ss[j];

>end; // case

>end;

>if (S = '') and (CurStyle <> Poem)

>then

>begin

>OutList.Add('');

>continue;

>end;

>if (CurStyle <> oldStyle) and (CurStyle <> Auth) then

>begin

>case oldStyle of // завершение предыдущего блока

>Poem: OutList.Add('');

>Epig: OutList.Add('');

>Citat: OutList.Add('');

>H1..H5: OutList.Add('');

>end; // case завершение предыдущего блока

>case CurStyle of // начало блока

>Poem: OutList.Add('');

>Epig: OutList.Add('');

>Citat: OutList.Add('');

>end; // case начало блока

>end;

>// анализ стилей

>case CurStyle of // в зависимости от стиля абзаца

>Norm,Epig,Citat: OutList.Add('

'+S+'

');

>H1..H5: StyleStucture; // Heading

>Sub: OutList.Add(''+s+''); // Subtitle

>Poem: begin

>if S = ''

>then OutList.Add('')

>else OutList.Add(''+S+'');

>end;

>Auth: begin

>OutList.Add(''+S+'');

>if oldStyle in [Poem, Epig, Citat]

>then CurStyle:= oldStyle;

>end;

>None: continue; //None

>end; // case

>oldStyle:= CurStyle;

>end; // for просмотр текста

>if SytleStack.Count > 0 then

>begin // закрываем все открытые секции

>while SytleStack.Count > 0 do

>begin

>SytleStack.Delete(SytleStack.Count-1);

>OutList.Add('

');

>end;

>end;

>OutList.Add('

');

>OutList.Add('');

>end;

>procedure SaveEndnotes;

>var

>S: string;

>i: integer;

>begin

>if Form1.EndNotesList.Items.Count = 0 then exit; //[1]

>OutList.Add('<p>Примечания</p>');

>for i:= 0 to Form1.EndNotesList.Items.Count – 1 do

>begin

>S:= Form1.EndNotesList.Items[i];

>OutList.Add('

<p>'+IntToStr(i+1)+'</p>');</code></p><p><code>>OutList.Add('

'+S+'

');

>OutList.Add('

');

>end;

>OutList.Add('');

>end;

>Procedure Make_fb2(S: string);

>begin //

>if Form1.ListBox1.Items.Count = 0 then exit;

>SytleStack.Clear;

>OutList.Clear;

>SaveDescription;

>SaveBodyFB2;

>SaveEndnotes;

>OutList.Add('');

>OutList.SaveToFile(S); //++ +

>showMessage('Done.');

>end;

>function BookHaveName: boolean;

>begin

>with Form1 do

>result:= (book_title.Text <> '') and

>(FB2_file.Text <> '') and

>(GenresBox.Count > 0);

>end;

>procedure TForm1.SaveasFB21Click(Sender: TObject);

>begin

>if not BookHaveName then

>begin

>PageControl1.ActivePageIndex:= 0;

>ShowMessage('Fill the form.');

>exit;

>end;

>SaveDialog1.FileName:= form1.FB2_file.Text;

>if SaveDialog1.Execute then

>Make_fb2(SaveDialog1.FileName);

>end;

>function SetStyle(n: TmyStyle):string;

>begin

>case n of

>Norm: result:= ' N';

>Epig: result:= ' E';

>Auth: result:= ' A';

>H1: result:= 'H1';

>H2: result:= 'H2';

>H3: result:= 'H3';

>H4: result:= 'H4';

>H5: result:= 'H5';

>Sub: result:= ' S';

>Poem: result:= ' P';

>Citat: result:= ' C';

>None: result:= '-';

>end; // case

>end;

>function SetStyle1(n: TmyStyle):string;

>begin

>result:= ' '+ SetStyle(n)+'| ';

>end;

>procedure ChangeStyle(LStyle: TmyStyle);

>var

>n, curIndex: integer;

>S: string;

>begin

>with Form1.ListBox1 do

>begin

>curIndex:= ItemIndex;

>if curIndex = –1 then exit;

>S:= Items[curIndex];

>n:= pos('|', s);

>delete(S, 1, n+1);

>Items[curIndex]:= SetStyle1(LStyle)+ S;

>if ItemIndex < Items.Count – 1

>then ItemIndex:= ItemIndex+1;

>SetFocus;

>end;

>end;

>procedure TForm1.Button12Click(Sender: TObject);

>begin

>ChangeStyle(TmyStyle(RG.itemindex));

>end;

>procedure TForm1.Button4Click(Sender: TObject);

>begin

>Form3.ListBox1.Items.Assign(GenresBox.Items);

>Form3.ShowModal;

>if Form3.ModalResult = mrOK then

>begin

>GenresBox.Items.Assign(Form3.ListBox1.Items);

>end;

>end;

>procedure TForm1.Button10Click(Sender: TObject);

>begin

>Form2.ListBox1.Items.Assign(ListBox3.Items);