Register Guidelines E-Books Today's Posts Search

Go Back   MobileRead Forums > E-Book Software > Sigil

Notices

Reply
 
Thread Tools Search this Thread
Old 08-28-2024, 09:16 AM   #31
KevinH
Sigil Developer
KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.
 
Posts: 8,160
Karma: 5450818
Join Date: Nov 2009
Device: many
Hi BeckyEbook,
Thanks! Nicely done. I tried it on LiberationMono ttf font but since the descender was negative it did not quite work as expected.

The Qt6 FontEngine code uses values as follows:
1. grabs hhea values for ascender and descender and lineGap.
2. if OS2 table exists it replaces them with the sTypo values of the same

So if we modify a font for use in Qt6/Sigil (as opposed to for generic non-qt6 based software), we should probably make sure that those 3 values for hhea ascender, descender, lineGap match the 3 values in the OS2 sTypo if the OS2 table exists, and then set (not clear) the USE_TYPO_METRICS flag.

I will grab the IBM Plex Monospaced font from github and the LiberationMono font from github and dump the metrics just to see if there is any consistency across the various metrics across fonts to see if this approach is even possible.

Perhaps for Linux, your approach of just scaling all metrics and leaving gap at 0 would be more robust.

Thanks!

Last edited by KevinH; 08-28-2024 at 09:22 AM.
KevinH is offline   Reply With Quote
Old 08-28-2024, 11:25 AM   #32
KevinH
Sigil Developer
KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.
 
Posts: 8,160
Karma: 5450818
Join Date: Nov 2009
Device: many
I grabbed fresh official releases for IBMPlexMono-Regular.ttf and LibrerationMono-Regular.ttf direct from their official release pages on github.

I then used FontForge to dump the font metrics information:

Code:
                   LiberationMono    IBMPlexMono
                  --------------    -----------
Ascent            1638               780
Descent            410               220
EM Square         2048              1000

Win Ascent        1705              1025
Win Descent        615               275

Use TYPO            No                No
Typo Ascent       1255               780
Typo Descent      -386              -220
Typo LineGap         0               300

hhea Ascent       1705              1025
hhea Descent      -615              -275
hhea LineGap         0                 0
So you can see just how confused things are,

The hhea values, the Win values, and the Typo values all differ in the same font for no good reason at all.

The em space according to the ttf spec should be a power of 2 (in the IBM case it is not).

The USE_TYPO_METRICS flag is not set in either but according to the Microsoft font docs it should be set and the Typo ones are the preferred values (but neither is using them, and the values do not make sense in the case of the Liberation font)

The IBM font seems to be designed around a baseline to baseline (line height) measure of 1300, whereas the Liberatifont uses 2320 but its Typo values are just plain wrong.

At least in the IBM font Win Ascent + Win Descent = 1300, for Typo (780 - -280 + 300) = 1300 and for hhea (1025 - -275 + 0) = 1300 so the line height based on all 3 measures it at least consistent.


No wonder the world of fonts is so messed up. *No one* follows the spec and every font engine around is loaded with code to fix up these values on the fly just to get things to work.

-----

Since the OS2 table in a ttf font is actually optional (but always included as far as I can tell) and the hhea table is required, we do the following:

1. If not OS2, we use the hhea values and are done unless they are 0
2. if OS2 table exists we next check the USE_TYPO_METRICS flag.
3. If USE_TYPO_METRICS is set, we use its TYPO values.
4. If not set, we can not trust the TYPO values but since Qt6 uses them, we set them to match the hhea table values no matter what. We can then decide to set or not set the USE_TYPO_METRICS flag.
5. If the Typo values are 0 we use the WinAscent and WinDescent values and assume line gap is 0

What a mess!

Last edited by KevinH; 08-28-2024 at 11:40 AM.
KevinH is offline   Reply With Quote
Advert
Old 08-28-2024, 01:13 PM   #33
KevinH
Sigil Developer
KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.
 
Posts: 8,160
Karma: 5450818
Join Date: Nov 2009
Device: many
@BeckyEbook,

Okay, I took your ChangeMonoFont-v7.py and tweaked it to create a ChangeMonoFont-v8.py that tries the approach I used for the LiberationMono font.

So when you get a free moment, would you please grab this version and edit it (comment out my LiberationMono font input/output, and uncomment your IBMPlexMono ones and give this a try inside Sigil.)

It seems to give nice (almost double) spacing. Since it does not play with usWinAscent and usWindDescent it may only work on Qt6 apps on Linux. But it worth a shot at things for Windows. I will try it on macOS later today.

Thanks!

ps. It first tries the hhea info, but if it is missing it defaults to using the OS2 usWinAscent and Descent for initial values (setting linegap to 0)

If the USE_TYPO_METRICS flag is not set, it doesn't trust the sTypo values and so fixes the Typo metrics using the gathered above ascent, descent and line gap values, then it sets that flag (updating the version number if needed)

If the USE_TYPO_METRICS flag is set, it assumes they are correct and uses them to fix up the hhea metrics from them.

Then it scales the line gaps values in Typo and hhea and sets them.
It then adjusts the names to meet the spec (no spaces allowed in internal font name) and outputs it.
Attached Files
File Type: py ChangeMonoFont-v8.py (2.4 KB, 32 views)

Last edited by KevinH; 08-28-2024 at 02:37 PM.
KevinH is offline   Reply With Quote
Old 08-28-2024, 01:25 PM   #34
BeckyEbook
Guru
BeckyEbook ought to be getting tired of karma fortunes by now.BeckyEbook ought to be getting tired of karma fortunes by now.BeckyEbook ought to be getting tired of karma fortunes by now.BeckyEbook ought to be getting tired of karma fortunes by now.BeckyEbook ought to be getting tired of karma fortunes by now.BeckyEbook ought to be getting tired of karma fortunes by now.BeckyEbook ought to be getting tired of karma fortunes by now.BeckyEbook ought to be getting tired of karma fortunes by now.BeckyEbook ought to be getting tired of karma fortunes by now.BeckyEbook ought to be getting tired of karma fortunes by now.BeckyEbook ought to be getting tired of karma fortunes by now.
 
BeckyEbook's Avatar
 
Posts: 783
Karma: 2298438
Join Date: Jan 2017
Location: Poland
Device: Various
Modified by v8 "Liberation Mono-ls150" works on my Sigil (Windows 10).
Attached Thumbnails
Click image for larger version

Name:	sigil-code-view-liberation-mono-original.png
Views:	51
Size:	63.0 KB
ID:	210461   Click image for larger version

Name:	sigil-code-view-liberation-mono-modified.png
Views:	54
Size:	63.2 KB
ID:	210462  

Last edited by BeckyEbook; 08-28-2024 at 01:46 PM. Reason: Screenshots
BeckyEbook is offline   Reply With Quote
Old 08-28-2024, 01:31 PM   #35
KevinH
Sigil Developer
KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.
 
Posts: 8,160
Karma: 5450818
Join Date: Nov 2009
Device: many
Great! Thanks for testing it. Now I need to test it on Mac.

Attached are some screenshots from my Linux box:
Attached Thumbnails
Click image for larger version

Name:	original_lib_mono.png
Views:	47
Size:	77.5 KB
ID:	210459   Click image for larger version

Name:	ChangeMonoFont_V8_Version.png
Views:	49
Size:	84.5 KB
ID:	210460  
KevinH is offline   Reply With Quote
Advert
Old 08-28-2024, 01:54 PM   #36
KevinH
Sigil Developer
KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.
 
Posts: 8,160
Karma: 5450818
Join Date: Nov 2009
Device: many
And I just tested it on macOS (installing it only for my user and not system installed) and it worked just fine giving lots of space between lines.

So BeckyEbook's code (even in its early versions) has clearly demonstrated that we could use a python3 program to allow the user to scale the line spacing as needed in their preferred monospaced ttf font.

If fontTool is pure python, we may be able to include it in a Sigil plugin and have the plugin do the work.

So this is probably an approach that will work for those few who need or want more linespacing without hurting Sigil's performance esecially on large text files.

Nicely Done BeckyEbook!

Last edited by KevinH; 08-28-2024 at 02:41 PM.
KevinH is offline   Reply With Quote
Old 08-28-2024, 09:49 PM   #37
Turtle91
A Hairy Wizard
Turtle91 ought to be getting tired of karma fortunes by now.Turtle91 ought to be getting tired of karma fortunes by now.Turtle91 ought to be getting tired of karma fortunes by now.Turtle91 ought to be getting tired of karma fortunes by now.Turtle91 ought to be getting tired of karma fortunes by now.Turtle91 ought to be getting tired of karma fortunes by now.Turtle91 ought to be getting tired of karma fortunes by now.Turtle91 ought to be getting tired of karma fortunes by now.Turtle91 ought to be getting tired of karma fortunes by now.Turtle91 ought to be getting tired of karma fortunes by now.Turtle91 ought to be getting tired of karma fortunes by now.
 
Turtle91's Avatar
 
Posts: 3,225
Karma: 19000635
Join Date: Dec 2012
Location: Charleston, SC today
Device: iPhone 15/11/X/6/iPad 1,2,Air & Air Pro/Surface Pro/Kindle PW & Fire
Question: if it is a plug-in would you need to run it every time you open Sigil? If so, is there a way to tell Sigil to automatically run a given plugin(s) on opening??
Turtle91 is offline   Reply With Quote
Old 08-28-2024, 09:55 PM   #38
DiapDealer
Grand Sorcerer
DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.
 
DiapDealer's Avatar
 
Posts: 28,044
Karma: 199464182
Join Date: Jan 2010
Device: Nexus 7, Kindle Fire HD
I'm assuming the plugin would be used once to create a modified monotype font that could be installed to the OS and selected by Sigil for use as the Code View font.
DiapDealer is offline   Reply With Quote
Old 08-28-2024, 10:00 PM   #39
KevinH
Sigil Developer
KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.KevinH ought to be getting tired of karma fortunes by now.
 
Posts: 8,160
Karma: 5450818
Join Date: Nov 2009
Device: many
Quote:
Originally Posted by Turtle91 View Post
Question: if it is a plug-in would you need to run it every time you open Sigil? If so, is there a way to tell Sigil to automatically run a given plugin(s) on opening??
Not on opening but a single keystroke can run any of 3 Automation lists now.

But DiapDealer is correct. It would just be run once and the User would have to install the resulting font manually and use Sigil's Preferences to select it for CV.

Last edited by KevinH; 08-28-2024 at 10:30 PM.
KevinH is offline   Reply With Quote
Old 08-29-2024, 07:18 AM   #40
Turtle91
A Hairy Wizard
Turtle91 ought to be getting tired of karma fortunes by now.Turtle91 ought to be getting tired of karma fortunes by now.Turtle91 ought to be getting tired of karma fortunes by now.Turtle91 ought to be getting tired of karma fortunes by now.Turtle91 ought to be getting tired of karma fortunes by now.Turtle91 ought to be getting tired of karma fortunes by now.Turtle91 ought to be getting tired of karma fortunes by now.Turtle91 ought to be getting tired of karma fortunes by now.Turtle91 ought to be getting tired of karma fortunes by now.Turtle91 ought to be getting tired of karma fortunes by now.Turtle91 ought to be getting tired of karma fortunes by now.
 
Turtle91's Avatar
 
Posts: 3,225
Karma: 19000635
Join Date: Dec 2012
Location: Charleston, SC today
Device: iPhone 15/11/X/6/iPad 1,2,Air & Air Pro/Surface Pro/Kindle PW & Fire
Ok. Got it. Thanks!
Turtle91 is offline   Reply With Quote
Old 08-29-2024, 02:25 PM   #41
DNSB
Bibliophagist
DNSB ought to be getting tired of karma fortunes by now.DNSB ought to be getting tired of karma fortunes by now.DNSB ought to be getting tired of karma fortunes by now.DNSB ought to be getting tired of karma fortunes by now.DNSB ought to be getting tired of karma fortunes by now.DNSB ought to be getting tired of karma fortunes by now.DNSB ought to be getting tired of karma fortunes by now.DNSB ought to be getting tired of karma fortunes by now.DNSB ought to be getting tired of karma fortunes by now.DNSB ought to be getting tired of karma fortunes by now.DNSB ought to be getting tired of karma fortunes by now.
 
DNSB's Avatar
 
Posts: 40,603
Karma: 157444382
Join Date: Jul 2010
Location: Vancouver
Device: Kobo Sage, Libra Colour, Lenovo M8 FHD, Paperwhite 4, Tolino epos
Tried the font metrics and looks like it works.

One other quick question, I compiled Sigil 2.30 under Windows and had to modify the original command line I used a while back (2.1.0???) since 2.3.0 insisted on finding the Python.exe installed with 2.3.0 as the executable so I had to force the Python install location. Is this expected?
Code:
-DTRY_NEWER_FINDPYTHON3=1
-DPython3_LIBRARIES="%localappdata%\Programs\Python\Python311\libs\"
-DPython3_INCLUDE_DIRS="%localappdata%\Programs\Python\Python311\include"
-DPython3_EXECUTABLE="%localappdata%\Programs\Python\Python311\"
Edit: The reason for compiling Sigil 2.3.0 was to check out the fix for the double popups. I haven't seen one in opening ~20 ePubs so looks good.

Last edited by DNSB; 08-29-2024 at 02:33 PM.
DNSB is offline   Reply With Quote
Old 08-29-2024, 02:43 PM   #42
DiapDealer
Grand Sorcerer
DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.
 
DiapDealer's Avatar
 
Posts: 28,044
Karma: 199464182
Join Date: Jan 2010
Device: Nexus 7, Kindle Fire HD
Quote:
Originally Posted by DNSB View Post
Tried the font metrics and looks like it works.

One other quick question, I compiled Sigil 2.30 under Windows and had to modify the original command line I used a while back (2.1.0???) since 2.3.0 insisted on finding the Python.exe installed with 2.3.0 as the executable so I had to force the Python install location. Is this expected?
Code:
-DTRY_NEWER_FINDPYTHON3=1
-DPython3_LIBRARIES="%localappdata%\Programs\Python\Python311\libs\"
-DPython3_INCLUDE_DIRS="%localappdata%\Programs\Python\Python311\include"
-DPython3_EXECUTABLE="%localappdata%\Programs\Python\Python311\"
Edit: The reason for compiling Sigil 2.3.0 was to check out the fix for the double popups. I haven't seen one in opening ~20 ePubs so looks good.
That used to happen to me in the past. Not sure what triggers it, actually (perhaps Sigil was actually running in memory during the build?). I've been manually specifying the Python3 components (as you did) for years. I'm pretty sure Python3_EXECUTABLE needs to point to the actual binary, though.

Last edited by DiapDealer; 08-29-2024 at 02:48 PM.
DiapDealer is offline   Reply With Quote
Old 08-29-2024, 03:04 PM   #43
DNSB
Bibliophagist
DNSB ought to be getting tired of karma fortunes by now.DNSB ought to be getting tired of karma fortunes by now.DNSB ought to be getting tired of karma fortunes by now.DNSB ought to be getting tired of karma fortunes by now.DNSB ought to be getting tired of karma fortunes by now.DNSB ought to be getting tired of karma fortunes by now.DNSB ought to be getting tired of karma fortunes by now.DNSB ought to be getting tired of karma fortunes by now.DNSB ought to be getting tired of karma fortunes by now.DNSB ought to be getting tired of karma fortunes by now.DNSB ought to be getting tired of karma fortunes by now.
 
DNSB's Avatar
 
Posts: 40,603
Karma: 157444382
Join Date: Jul 2010
Location: Vancouver
Device: Kobo Sage, Libra Colour, Lenovo M8 FHD, Paperwhite 4, Tolino epos
Quote:
Originally Posted by DiapDealer View Post
That used to happen to me in the past. Not sure what triggers it, actually (perhaps Sigil was actually running in memory during the build?). I've been manually specifying the Python3 components (as you did) for years. I'm pretty sure Python3_EXECUTABLE needs to point to the actual binary, though (perhaps Python3_LIBRARIES as well).
Thanks for the information. Interesting oddment: When I added python.exe to the end of the executable item, I had to remove the "s around the entry or the source directory was not seen. It didn't seem to make any difference to the compile cycle whether I had python.exe at the end of the item or not.
DNSB is offline   Reply With Quote
Old 08-29-2024, 05:34 PM   #44
DiapDealer
Grand Sorcerer
DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.
 
DiapDealer's Avatar
 
Posts: 28,044
Karma: 199464182
Join Date: Jan 2010
Device: Nexus 7, Kindle Fire HD
I'm away from my desktop ATM. I'll check what I use for the official Sigil builds when I get back. I typically try hard not to need any quotes for any of my build paths.
DiapDealer is offline   Reply With Quote
Old 08-29-2024, 07:02 PM   #45
DiapDealer
Grand Sorcerer
DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.DiapDealer ought to be getting tired of karma fortunes by now.
 
DiapDealer's Avatar
 
Posts: 28,044
Karma: 199464182
Join Date: Jan 2010
Device: Nexus 7, Kindle Fire HD
Here's my official Sigil release build cmake config:

Code:
cmake -G "Ninja" ^
-DTRY_NEWER_FINDPYTHON3=1 ^
-DINNO_COMP=lzma2/ultra64 ^
-DPython3_EXECUTABLE=C:/Users/Doug/AppData/Local/Programs/Python/Python311/python.exe ^
-DPython3_LIBRARIES=C:/Users/Doug/AppData/Local/Programs/Python/Python311/libs/python311.lib ^
-DPython3_INCLUDE_DIRS=C:/Users/Doug/AppData/Local/Programs/Python/Python311/include ^
-DQt6_DIR=C:/MyQtx64/Qt6.7.2ltcg/lib/cmake/Qt6 ^
-DCMAKE_BUILD_TYPE=Release ^
C:/Users/Doug/Documents/github/sigil
I'm sure the %LOCALAPPDATA% variable would not cause any problem. The INNO_COMP define is only available post-Sigil 2.3.0. If you leave it out altogether, The Sigil installer will be built with lower/faster compression (defaults to zip/7). I got tired of waiting forever to test stuff. The lzma2/ultra64 is now for releases only.

Also note that post 2.3.0, Sigil no longer bundles the VCRedist2015+ (nor checks to see if it's installed). The redist is standard on Windows 10 (1809)+ -- and that's the minimum OS requirement for building Sigil on Windows.

Last edited by DiapDealer; 08-29-2024 at 07:05 PM.
DiapDealer is offline   Reply With Quote
Reply

Tags
code view, qt_styles.qss


Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
How to change background color in Code View window philja Sigil 13 10-06-2022 12:27 PM
replace in book view changes view to code view cybmole Sigil 4 10-28-2012 02:20 PM
Sigil highlight Book View No Longer Shows in Code View Themus Sigil 4 10-04-2012 08:54 PM
How do I change the syntax colouring and increase the font size in the Code View? nicciglen Sigil 5 02-08-2012 10:34 AM
lock book view & code view windows into synch cybmole Sigil 5 01-19-2011 11:30 PM


All times are GMT -4. The time now is 02:35 AM.


MobileRead.com is a privately owned, operated and funded community.