1
0
Fork 0
mirror of https://github.com/geometer/FBReaderJ.git synced 2025-10-03 17:59:33 +02:00

new style intro text: generator + Russian data

This commit is contained in:
Nikolay Pultsin 2014-12-19 21:41:13 +00:00
parent d9dd438b90
commit 5071283605
7 changed files with 134 additions and 1 deletions

View file

@ -55,7 +55,15 @@
<echo message="DONE (Checking if native libraries are up-to-date)"/> <echo message="DONE (Checking if native libraries are up-to-date)"/>
</target> </target>
<target name="-pre-build" depends="init, native"> <target name="genhelp">
<exec executable="./help/generate.py">
<arg value="help/proto"/>
<arg value="help/html"/>
<arg value="assets/data/intro"/>
</exec>
</target>
<target name="-pre-build" depends="init, native, genhelp">
</target> </target>
<!-- <!--
<target name="-pre-compile"> <target name="-pre-compile">
@ -69,6 +77,7 @@
<delete dir="gen" /> <delete dir="gen" />
<delete dir="bin" /> <delete dir="bin" />
<delete dir="out" /> <delete dir="out" />
<delete dir="assets/data/intro" />
<echo message="DONE (Deleting temporary files)" /> <echo message="DONE (Deleting temporary files)" />
</target> </target>

63
help/generate.py Executable file
View file

@ -0,0 +1,63 @@
#!/usr/bin/python
import os, re, shutil, sys, time, zipfile
def collect_languages(proto_dir):
return [os.path.splitext(name)[0] for name in os.listdir(proto_dir) if name.endswith('.html')]
def find_title(path):
pattern = re.compile(r'<h2>(.*)<\/h2>')
with open(path, 'r') as stream:
for line in stream:
match = pattern.match(line)
if match:
return match.group(1)
return None
def string_from_template(template_path, data):
result = ''
pattern = re.compile(r'(.*)\$([^$]*)\$(.*\n)')
with open(template_path, 'r') as istream:
for line in istream:
match = pattern.match(line)
if match:
result += match.group(1) + data[match.group(2)] + match.group(3)
else:
result += line
return result
def generate_epub(proto_dir, html_dir, epub, lang):
html_file = os.path.join(html_dir, lang + '.html')
title = find_title(html_file)
if not title:
raise Exception('Title not found in %s' % htmlfile)
data = {
'TITLE': title,
'LANG': lang,
'ID': 'fbreader:intro:%s:%d' % (lang, time.time())
}
with zipfile.ZipFile(epub, 'w', zipfile.ZIP_DEFLATED) as zip_file:
zip_file.writestr('mimetype', 'application/epub+zip', zipfile.ZIP_STORED)
zip_file.write(os.path.join(proto_dir, 'container.xml'), arcname='META-INF/container.xml')
zip_file.write(os.path.join(proto_dir, 'style.css'), arcname='style.css')
zip_file.writestr('main.html', string_from_template(html_file, data))
zip_file.writestr('content.opf', string_from_template(os.path.join(proto_dir, 'content.opf'), data))
zip_file.write(os.path.join(proto_dir, 'fbreader.png'), arcname='fbreader.png')
if __name__ == '__main__':
if len(sys.argv) != 4:
exit('Usage: %s <proto_dir> <html_dir> <output_dir>' % sys.argv[0])
proto_dir = sys.argv[1]
html_dir = sys.argv[2]
output_dir = sys.argv[3]
os.makedirs(output_dir)
for lang in collect_languages(html_dir):
epub = os.path.join(output_dir, 'intro-' + lang + '.epub')
if os.path.exists(epub):
os.remove(epub)
print 'Generating intro for language %s...' % lang
generate_epub(proto_dir, html_dir, epub, lang)

33
help/html/ru.html Normal file
View file

@ -0,0 +1,33 @@
<?xml version='1.0' encoding='utf-8'?>
<html xmlns:fbreader='http://data.fbreader.org/xhtml-extension/'>
<head>
<link type='text/css' rel='stylesheet' href='style.css'/>
</head>
<body>
<h2>FBReader: краткое руководство</h2>
<h3 id='first'>Популярные книги</h3>
<p>Хотите начать читать прямо сейчас? Мы предлагаем на выбор несколько книг. Нажмите на обложку, книга скачается из сети и сразу же откроется в FBReader. Чтобы вернуться потом к этому тексту, выберите в меню пункт &laquo;Стартовый экран&raquo;.</p>
<p class='opds last'><fbreader:opds size='5' src='https://books.fbreader.org/opds/recommended/lang/$LANG$.xml'/></p>
<h3 id='network'>Что ещё почитать?</h3>
<p class='last'>В FBReader есть раздел <a href='fbreader-action:networkLibrary'>&laquo;Сетевая библиотека&raquo;</a>. В нескольких каталогах собраны книги на разных языках, некоторые можно полностью скачать бесплатно, в некоторых доступны только первые несколько глав, а продолжение можно купить за деньги. Если вы знаете адреса других каталогов, вы можете добавить их в свой список, и скачивать книги из них прямо в свой FBReader.</p>
<h3 id='sync'>Храните книги в облаке</h3>
<p>У вас есть книги на компьютере, и вы хотите перенести их на это устройство? Или наоборот, книги, которые вы скачали на это устройство, хотите сохранить понадёжнее? Это можно сделать, не соединяя компьютер и телефон (планшет) между собой. В FBReader есть возможность синхронизации. <a href='fbreader-action:preferences#sync'>Включите её</a>, и все ваши книги автоматически попадут в облако (на ваш собственный Google Drive). С компьютера доступ к коллекции книг происходит через сайт <a href='https://books.fbreader.org/'>Книжной сети FBReader</a>.</p>
<p class='last'>Хотите читать одну и ту же книгу днём на телефоне, а вечером на планшете? И не искать страницу, с которой продолжить? Синхронизация FBReader решит и эту проблему. Включите её на обоих устройствах, и вы никогда не потеряете место, на котором остановились.</p>
<h3 id='formats'>Какие файлы понимает FBReader</h3>
<p>FBReader открывает файлы большинства популярных &laquo;книжных&raquo; форматов. Но не все виды файлов подходят ему одинаково хорошо. Идеально, если у вас специально изготовленная электронная книга, в формате <code>ePub</code>, <code>fb2</code> или <code>mobi</code> (известном также под именем <code>azw3</code> или <code>kindle</code>). Другие способы хранение текста (<code>rtf</code>, <code>doc</code>, <code>html</code>, <code>txt</code>) тоже подходят, но стоит понимать, что они не предназначены именно для книг, и читать их в FBReader не всегда столь же удобно.</p>
<p class='last'>&laquo;Не совсем текстовые&raquo; форматы, <code>PDF</code> и <code>DjVu</code>, FBReader тоже понимает. Но чтобы программа не слишком разрасталась, мы вынесли их поддержку в отдельные плагины <a href='https://play.google.com/store/apps/details?id=org.geometerplus.fbreader.plugin.pdf'>для PDF</a> и <a href='https://play.google.com/store/apps/details?id=org.geometerplus.fbreader.plugin.djvu'>для DjVu</a>.</p>
<h3 id='more'>И это всё?</h3>
<p class='last'>Разумеется, нет. В таком кратком тексте мы не рассказали про возможности настройки FBReader, про интеграцию с программой Calibre, про другие плагины, например, для автоматического чтения вслух. Новые возможности появляются регулярно, ведь обновления FBReader выходят не реже раза в месяц. Если вы хотите узнать больше &ndash; заходите <a href='http://ru.fbreader.org/'>на наш сайт</a>, или <a href='http://ru.fbreader.org/content/about-us#social'>ищите нас в социальных сетях</a>.</p>
<h3 id='help'>У меня проблема, кто мне поможет?</h3>
<p class='last'>Лучший способ &ndash; написать о проблеме в одной из социальных сетей. Ссылки вы найдёте выше, а в сетях много активных пользователей, которые увидят ваш вопрос. Мы тоже читаем сети, и регулярно в них отвечаем. Если вы уверены, что ваш вопрос обязательно задать напрямую разработчикам, <a href="mailto:contact@fbreader.org">напишите нам электронное письмо</a>.</p>
<h3>Оглавление</h3>
<ul>
<li><a href='#first'>Популярные книги</a></li>
<li><a href='#network'>Что бы ещё почитать?</a></li>
<li><a href='#sync'>Храните книги в облаке</a></li>
<li><a href='#formats'>Какие файлы понимает FBReader</a></li>
<li><a href='#more'>И это всё?</a></li>
<li><a href='#help'>У меня проблема, кто мне поможет?</a></li>
</ul>
</body>
</html>

6
help/proto/container.xml Normal file
View file

@ -0,0 +1,6 @@
<?xml version="1.0"?>
<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
<rootfiles>
<rootfile full-path="content.opf" media-type="application/oebps-package+xml"/>
</rootfiles>
</container>

18
help/proto/content.opf Normal file
View file

@ -0,0 +1,18 @@
<?xml version='1.0' encoding='utf-8'?>
<package xmlns='http://www.idpf.org/2007/opf' unique-identifier='dcidid' version='2.0'>
<metadata xmlns:dc='http://purl.org/dc/elements/1.1/'>
<dc:title>$TITLE$</dc:title>
<dc:language>$LANG$</dc:language>
<dc:identifier>$ID$</dc:identifier>
<dc:creator>FBReader</dc:creator>
<meta content='cover_image' name='cover'/>
</metadata>
<manifest>
<item id='stylesheet' href='styles.css' media-type='text/css'/>
<item id='main' href='main.html' media-type='application/xhtml+xml'/>
<item href='fbreader.png' id='cover_image' media-type='image/png'/>
</manifest>
<spine toc='ncx'>
<itemref idref='main'/>
</spine>
</package>

BIN
help/proto/fbreader.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

4
help/proto/style.css Normal file
View file

@ -0,0 +1,4 @@
h3 { page-break-after: avoid; }
h2, .last { padding-bottom: 1.3em; }
p { margin: 10px 0 0 0; }
p.opds { padding-top: 0.5em; text-align: center; text-indent: 0; page-break-before: avoid; }