Albite Reader is an open-source e-book reader for Java Mobile released under the Apache 2.0 License and developed by Svetlin Ankov. Works with EPUB, txt and (x)html files.
Implemented features
- anti-aliased bitmap font in four sizes with over 500 glyphs, including latin, cyrillic and greek
- hyphenation for 29 languages
- 23 character encodings, including UTF-8 and most of ISO-8859 and Windows-125x
- animated touch-guided scrolling
- horizontal and vertical scrolling
- on-touch dictionary look up
- units conversion: temperature, length, area, ...
- portrait and landscape view
- images and basic styling
- color profiles
- portable book settings
- bookmarks
- table of contents
System requirements
Profile
|
MIDP 2.0
|
Configuration
|
CLDC 1.1
|
Optional packages
|
File API (JSR-75)
|
Used heap memory
|
depends on the version
|
Features in detail
Here goes a detailed review of all currently implemented features.
Bitmap Font
Bitmap font rendering is achieved through my own implementation. The font used, Droid Serif, has been pre-rendered in several different sizes: 12px, 14px, 16px, 18px, 24px and 28px. All have been anti-aliased except for the 12px version, which looks much better without it. Supported (or sometimes partially) character ranges are:
- Latin + Latin Supplement (191 chars)
- Latin Extended A (128 chars)
- Latin Extended B (10 chars)
- Spacing Modifier Letters (11 chars)
- Greek and Coptic (75 chars)
- Cyrillic (94 chars)
- Latin Extended Additional (12 chars)
- Greek Extended (1 char)
- General Punctuation (34 chars)
- Subscripts and Superscripts (1 char)
- Currency Symbols (4 chars)
- Letter-like Symbols (6 chars)
- Number Forms (4 chars)
- Mathematical Operators (12 chars)
- Geometric Shapes (1 chars)
Hyphenation
Hyphenation for 29 languages:
- Basque
- Bulgarian
- Catalan
- Croatian
- Czech
- Danish
- Dutch
- German
- Greek
- English
- Esperanto
- Estonian
- Finnish
- French
- Icelandic
- Indonesian
- Italian
- Latin
- Latvian
- Polish
- Portuguese
- Romanian
- Russian
- Slovene
- Spanish
- Swedish
- Turkish
- Ukrainian
- Welsh
Character Encodings
Support for 23 character encodings:
- UTF-8
- ASCII
- ISO-8859-1
- ISO-8859-2
- ISO-8859-3
- ISO-8859-4
- ISO-8859-5
- ISO-8859-7
- ISO-8859-9
- ISO-8859-10
- ISO-8859-13
- ISO-8859-14
- ISO-8859-15
- ISO-8859-16
- WINDOWS-1250
- WINDOWS-1251
- WINDOWS-1252
- WINDOWS-1253
- WINDOWS-1254
- WINDOWS-1257
- KOI8-R
- KOI8-RU
- KOI8-U
Unit conversion
Conversion between 80 units in 11 unit groups.
- Temperature
- C, K
- F, Degree of Frost
- Length
- mm, cm, dm, m, km
- mil, in, ft, yd, fm, ch, fur, mi, land
- cable, nautical mile
- Area
- mm2, cm2, dc2, m2, a, daa, ha, km2
- sq ft, sq yd, ac, sq mi
- Volume
- mL, L, mm3, cm3, dm3, m3
- fl oz, gi, pt, qt, gal
- Mass
- mg, g, kg, t
- gr, oz, lb, st, cwt, ton
- Velocity
- m/s, km/h
- fps, mph
- kn
- Pressure
- Pa, hPa, kPa, mbar, bar
- mmHg, inHg
- Atm
- psi
- Power
- mW, W, kW, MW
- HPS
- Energy
- Wh, kWh
- J
- cal
- Linear density
- DPI
- DPCM
- Angle
- rad
- deg
Images and styling
- Supports italic, bold and headings
- Supports text centering
- Supports images and alt text
- Supports horizontal rulers
- Partially supports
pre
text
- Doesn't support CSS
- Doesn't support tables
- Doesn't support links and anchors
Portable book settings: the .alx and .alb files
After opening a book for the first time, Albite READER will create a file with the same name, but with an .alx extension. This is a binary file containing your book reading progress. This includes:
- Current chapter and position
- Current hyphenation language
- Last visited position in every chapter
- Current encoding of every chapter
If you make any bookmarks in a book, Albite READER will also create a .alb file. This is a XML file which contains your bookmarked text and positions.
There are several advantages of this technique compared to the usual approach of using the RMS:
- You can backup your reading progress
- All your book settings are preserved upon application update
- You can continue reading on another phone
- Your bookmarks are completely accessible so you can open them in a text processor.
Used resources
APIs
kXML2
It's a BSD-licensed XML pull parser, especially adequate for Java Mobile. It's small and unobtrusive. You can read more at their homepage.
AlbiteZIP
It's a Java Mobile port of GNU Classpath's java.util.zip
package using the AlbiteRandomReadingFile API, which implements a RandomAccessFile
with writing capabilities stripped away. Reading EPUB files relies on AlbiteZIP to work with their archives. AlbiteZIP's sources and some sample code are available at GitHub.
AlbiteCharacterDecoder
Provides the ability read characters not natively supported by Java's InputStreamReader
. The API is based on some code from libiconv. Sources, examples, tests and binaries are available at GitHub.
AlbiteUnits
A simple java API for converting various physical units. Sources and binaries at GitHub.
ZLTextTeXHyphenator
Zlibrary's hyphenator used in FBReaderJ. Licensed under GPL 2.
Fonts
Droid Serif
That's the font used on Android devices. It's quite nice and is built with the idea of rendering well on small screens and at small sizes. It supports some good amount of glyphs (around 500) and character ranges. It's licensed under the Apache 2.0 license. You can download the Droid fonts in TTF from here.
Hyphenation patterns
The used hyphenation patterns are the ones from TeX's site or some modified versions from FBReaderJ.
Current limitations
There are too many limited factors: your phone is limited, Java Mobile is limited and my personal time is limited. So, it points to the conclusion that Albite READER is limited, too. I'd like you to know of the current limitations, so that you can decide for yourself if they may stand in your way.
- No support for links and anchors (i.e. objects findable by their id)
- No support for toc.ncx. Chapters are made according to the files from the spine element in the opf file and are titled using a successive number.
- No support for accelerometers. I know it's cool, but there are some technical limitations to consider, including battery life when reading for a long time. No to mention that I often tilt the phone to a variety of angles if I am reading in my bed.
- No book library. Books are opened through a file browser.
- Images are shown in separate pages.
- Font is available in four sizes only. That's because bitmap fonts are being used. Using SVG/TTF fonts is not only slow (one can cache the glyphs after all), but ugly. Or one may need super-sampling which would make it terribly slow. Java Mobile on the other hand, has limited supported for fonts. It supports a maximum of three font sizes, and often limited amount of glyphs. Not to mention the fact that font rendering in Java Mobile is dreadfully on some devices (like my Samsung GT-5230).
- No support for subscript and superscript. That's because of the previous limitation.
- No support for tables.
- No support for CSS.
- Books with too many chapters might make the current TOC unusable. For instance, the complete War and Peace has more than 300 chapters, so the list of chapters becomes incredibly long and painful to browse.
- Languages with right-to-left text direction or hieroglyphic ones are not supported, including Chinese, Japanese, Hebrew, Arabic, etc.
- No language localization. In other words, the app is available only in English.
- No bold fonts. Instead of using bold fonts, the text is rendered in another color. Using bitmap fonts would significantly (i.e. at least twice) increase the size of both JAR and needed heap memory.
- There is a theoretical possibility of corruption of the .alx files. More precisely, it can happen if the battery dies exactly when saving the data to the phone or if the app is closed using the red key and it is unable to close fast enough. Thankfully enough, this possibility must be very slight in most situations.