» » » » Юрий Карпов - Пишем программу для создания книг FB2.


Авторские права

Юрий Карпов - Пишем программу для создания книг FB2.

Здесь можно скачать бесплатно "Юрий Карпов - Пишем программу для создания книг FB2." в формате fb2, epub, txt, doc, pdf. Жанр: Программы. Так же Вы можете читать книгу онлайн без регистрации и SMS на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Рейтинг:
Название:
Пишем программу для создания книг FB2.
Автор:
Издательство:
неизвестно
Жанр:
Год:
неизвестен
ISBN:
нет данных
Скачать:

99Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания...

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

Описание книги "Пишем программу для создания книг FB2."

Описание и краткое содержание "Пишем программу для создания книг FB2." читать бесплатно онлайн.



Подробный комментарий к исходному коду программы создающей книжку в формате FB2.






'^': S:= S + '^'; //

'~': S:= S + '~';

'&': S:= S + '&';

else S:= S + ss[j];

end; // case

end;

L[i]:= ' N| ' + S;

end;

Form1.ListBox1.Items.Assign(L);

L.Free;

end;


procedure NameFB2_File(S: string);

begin //

S:= ExtractFileName(S);

Form1.Caption:= S;

Form1.FB2_file.Text:= ChangeFileExt(S,'.fb2');

end;


procedure TForm1.Open1Click(Sender: TObject);

begin

with OpenDialog1 do

if Execute then

begin

NameFB2_File(FileName);

ListBox1.Clear;

LoadTXT(FileName); // txt

end;

end;


function GetGaner(S: string):string;

var

i: integer;

begin

for i:= 0 to maxg do

if gg[i][2] = S then

begin

result:= gg[i][1];

exit;

end;

result:= s;

end;


procedure SaveAnnotation;

var

i: integer;

begin

OutList.Add('<annotation>');

with form1.Annotation do

for i:= 0 to Lines.Count - 1 do

OutList.Add('<p>'+Lines[i]+'</p>');

OutList.Add('</annotation>');

end;


procedure SavePersons(title: string; LB: TListBox);

var

i: integer;

Person: TPerson;

begin

with LB do

if Count > 0 then

for i:= 0 to Count - 1 do

begin

Person:= TPerson(Items.Objects[i]);

OutList.Add(' <'+title+'>');

with Person do

begin

PrintString('first-name',fname);

PrintString('last-name',lname);

PrintString('middle-name',mname);

PrintString('nick',nick);

PrintString('email',email);

end;

OutList.Add(' </'+title+'>');

end;

end;


procedure SaveSequence;

var

s: string;

begin

with Form1 do

begin

if sequence.Text = '' then exit;

S:= '<sequence name="' +sequence.Text+'"';

if tome.Text = ''

then S:= S + '/>'

else S:= S + ' number="'+tome.Text+'"/>';

end;

OutList.Add(S);


end;


procedure SaveDescription;

const

max = 5;

mas: array[1..max] of string =

(

'<?xml version="1.0" encoding="windows-1251"?>',

'<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0"',

' xmlns: l="http://www.w3.org/1999/xlink">',

' <description>',

' <title-info>'

);

var

i: byte;

S: string;

begin

// head

for i:= 1 to max do

OutList.Add(Mas[i]);


with form1.GenresBox do

if Items.Count > 0 then

for i:= 0 to Items.Count - 1 do

OutList.Add('<genre>'+GetGaner(Items[i])+'</genre>');


SavePersons('author',Form1.ListBox3);

SavePersons('translator',Form1.ListBox2);


with Form1 do

begin

PrintString('book-title',book_title.text);

if Annotation.Lines.Count > 0

then SaveAnnotation;

//if _date.text <> '' then

//OutList.Add('<date value="'+_date.text+'-01-01">'+_date.text+'</date>');


SaveSequence;

OutList.Add(' <lang>'+Lang.Text+'</lang>');


if SLang.ItemIndex > -1 then

begin

S:= Lg[SLang.ItemIndex][1];

if S <> '' then

OutList.Add(' <src-lang>'+S+'</src-lang>');

end;


OutList.Add(' </title-info>');


// **** document-info ****


OutList.Add(' <document-info>');

OutList.Add(' <program-used>my_Make_FB2</program-used>');


PrintString('src-url', url.Text); //??

OutList.Add(' <date value="'+FormatDateTime('yyyy-mm-dd', Now)+'">'+ DateToStr(now) +'</date>');


PrintString('id', id.Text); //??

OutList.Add(' <version>1.0</version>');

OutList.Add(' </document-info>');


// **** publish-info ****


OutList.Add(' <publish-info>');


if Book_name.Text = ''

then PrintString('book-name', book_title.Text)

else PrintString('book-name', Book_name.Text);


PrintString('publisher', publisher.Text); //

PrintString('city', city.Text); //

PrintString('year', year.Text); //

PrintString('isbn', isbn.Text); //

//OutList.Add(' <version>1.0</version>');

OutList.Add(' </publish-info>');


end;


OutList.Add(' </description>');

OutList.Add('<body>');

end;


function SubStyle(m,w: TmyStyle):integer;

begin

result:= integer(m) - integer(w);

end;


procedure SaveBodyFB2;

var

i, j: integer;

S, ss: string;

oldStyle,

LastStyle, CurStyle: TmyStyle; // style


procedure StyleStucture;

begin

if CurStyle <> oldStyle then

begin

if SytleStack.Count = 0 then

begin

SytleStack.Add(TObject(CurStyle))

end

else

begin

LastStyle:= TmyStyle(SytleStack.Last);

case SubStyle(CurStyle,LastStyle) of

0: OutList.Add('</section>');

1: SytleStack.Add(TObject(CurStyle));

else

begin

OutList.Add('</section>');

while CurStyle <> LastStyle do

begin

SytleStack.Delete(SytleStack.Count-1);

OutList.Add('</section>');

LastStyle:= TmyStyle(SytleStack.Last);

end;

end;

end;// case

end;

OutList.Add('<section>');

OutList.Add('<title>');

end;

OutList.Add('<p>'+s+'</p>');

end; // StyleStucture;


begin

oldStyle:= ZZ; EndNotes_count:= 1;

// if

OutList.Add('<section>');


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 + '<a l: href="#n_'+IntToStr(EndNotes_count)+'" type="note">'

+IntToStr(EndNotes_count)+'</a>';

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

end;

'^': S:= S + '&#769;'; // ставим ударение

else S:= S + ss[j];

end; // case

end;


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

then

begin

OutList.Add('<empty-line/>');

continue;

end;


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

begin

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

Poem: OutList.Add('</stanza></poem>');

Epig: OutList.Add('</epigraph>');

Citat: OutList.Add('</cite>');


H1..H5: OutList.Add('</title>');

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


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

Poem: OutList.Add('<poem><stanza>');

Epig: OutList.Add('<epigraph>');

Citat: OutList.Add('<cite>');

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

end;


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

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

Norm,Epig,Citat: OutList.Add('<p>'+S+'</p>');

H1..H5: StyleStucture; // Heading

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

Poem: begin

if S = ''

then OutList.Add('</stanza><stanza>')

else OutList.Add('<v>'+S+'</v>');

end;

Auth: begin

OutList.Add('<text-author>'+S+'</text-author>');

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('</section>');

end;

end;

OutList.Add('</section>');

OutList.Add('</body>');

end;


procedure SaveEndnotes;

var

S: string;

i: integer;

begin

if Form1.EndNotesList.Items.Count = 0 then exit; //<a type="note" l: href="#n_1">[1]</a>


OutList.Add('<body name="notes"><title><p>Примечания</p></title>');


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

begin

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

OutList.Add('<section id="n_'+IntToStr(i+1)+'"><title><p>'+IntToStr(i+1)+'</p>');

OutList.Add('</title><p>'+S+'</p>');

OutList.Add('</section>');

end;


OutList.Add('</body>');

end;


Procedure Make_fb2(S: string);

begin //

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

SytleStack.Clear;


OutList.Clear;

SaveDescription;

SaveBodyFB2;

SaveEndnotes;

OutList.Add('</FictionBook>');


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);

Form2.Button1Click(nil);

Form2.ShowModal;

if Form2.ModalResult = mrOK then

begin

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

end;

end;


procedure TForm1.Button7Click(Sender: TObject);

begin

Form2.ListBox1.Items.Assign(ListBox2.Items);

Form2.Button1Click(nil);

Form2.ShowModal;

if Form2.ModalResult = mrOK then

begin

ListBox2.Items.Assign(Form2.ListBox1.Items);

end;

end;


procedure TForm1.FormCreate(Sender: TObject);

var

i: integer;

begin

Path:= ExtractFileDir(ParamStr(0)) + '\';

OpenDialog1.InitialDir:= Path;

for i:= 0 to maxL do

SLang.Items.Add(Lg[i][2]);

SLang.ItemIndex:= 0;

end;


procedure TForm1.Button3Click(Sender: TObject);

begin

if FileExists(Path + 'EndNotes.txt')

then EndNotesList.Items.LoadFromFile(Path + 'EndNotes.txt');

end;


procedure TForm1.Button9Click(Sender: TObject);

begin

if FileExists(Path + 'Annotation.txt') then


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

Похожие книги на "Пишем программу для создания книг FB2."

Книги похожие на "Пишем программу для создания книг FB2." читать онлайн или скачать бесплатно полные версии.


Понравилась книга? Оставьте Ваш комментарий, поделитесь впечатлениями или расскажите друзьям

Все книги автора Юрий Карпов

Юрий Карпов - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Отзывы о "Юрий Карпов - Пишем программу для создания книг FB2."

Отзывы читателей о книге "Пишем программу для создания книг FB2.", комментарии и мнения людей о произведении.

А что Вы думаете о книге? Оставьте Ваш отзыв.