Freda: the free ebook reader

Freda is a free, advertising-supported program for reading electronic books (ebooks) on Windows Phones.

Features:

You can download Freda from the Windows Phone Marketplace.

Note: there is an earlier version of Freda for Windows Mobile 6.x (and 5, 2003 and WinCE). See here.

screenshot screenshot screenshot screenshot
screenshot screenshot screenshot screenshot
screenshot screenshot screenshot screenshot
screenshot screenshot screenshot screenshot

Quick Start

When you first start Freda, you will see a table containing six classic books. To open one of them, touch the book image. A page will open showing details of the selected book, and the book will start to download. You can then tap the book image to open the book and start reading the first page Normally, this will be a 'title page', containing the book title and/or the picture from the cover. You will see a page number indicator, "-/-" at the bottom of the page (the -/- symbols mean that Freda has not finished scanning though the book, and so it doesn't yet know how many pages there are). Coloured moving dots will appear at the top of the screen as long as the scanning process continues (maybe for several minutes), but you can begin reading right away - tap the bottom of the page to begin reading.

For more information, read on ...

Freda Functions

There are two main sections of Freda - the 'Chooser' screens which you use to select a book, and the 'Reader' screen that you use to read it. Within each of these screens, you have a selection of pages for accessing the different features.

The Chooser screen consists of a panorama view, showing recent books, as list of different places where you can find books (sources) and a list of additional functions. When you open a book, Freda will display the book details, and allow you to start reading the book using the Reader screen.

Whatever screen you are on, the hardware 'Back' button will always take you back to the previous screen.

Chooser

The chooser screen consists of four tab panorama sections - a table of recent books, a link to the currently open book, a list of book sources, and an 'extras' tab that you can use to get at various other features of Freda. These are shown on a 'panorama' display; swipe left or right to move between them.

Chooser - Bookshelf

Chooser - Bookshelf

The bookshelf shows a table of recently-opened books (when you first run Freda, it is pre-populated with a list of classics from Feedbooks). To open a book, tap on the book tile.

Freda will then display the details of the book:

Chooser - Book

From here, you can open the book by tapping on the image (or the 'open' button in the app bar at the bottom of the screen). You can also 'pin' the book to the start screen, and (by swiping to the left) edit its details or delete it.

Chooser - Library

Chooser - Library

Alternatively, by tapping the 'more...' item on the bookshelf screen you can access your full library (that is, the collection of all your books).

You can keep as many books as you like in your bookshelf, and you can filter them using the 'title' and 'author' controls at the bottom of the screen.

Chooser - Sources

Chooser - Sources

The next section of the main chooser screen is the list of book sources. To open one of the book sources, tap on it. A new page will be shown, where you can navigate around the source and select a book to download. By swiping left on this screen, you can find tabs for renaming the source, hiding it, setting password details etc.

The 'more...' item on the bookmark list will take you to a more detailed book source view, which allows you to see all sources including the 'hidden'ones (which are shown in semi-transparent style). This detailed source view also includes a '+' button, which you can use to add new sources.

When you first run Freda, you will see book sources for Feedbooks, Calibre (see here for details of how to set this up), SkyDrive, Gutenberg and Epub Books. Further 'hidden' sources are provided; you can see these on the detailed bookmark list (by tapping 'more...' ).

Chooser - OPDS Catalogs

Chooser - OPDS

These screens allow you to find and download books from popular on-line book catalogs, such as Feedbooks, Smashwords and Gutenberg (and your own Calibre catalog, if you have set this up). The screen shows a combination of 'catalog' links (which look like folders) and 'book' links (which look like thumbnail images, showing book covers or a book icon). Tapping a 'catalog link' button takes you to another place in the catalog (for example, 'Recent' may take you to a list of recently-added books). Tapping a 'book link' tile will download or open a book from the catalog.

Above the list of links, you will see five buttons, for moving around within the catalog:

Depending where you are in the catalog, some of these buttons may be absent (for instance, the 'next' and 'previous' pages will only appear if you are looking at a multi-page list, such as 'all authors beginning 'A'').

The 'search' button will be available only if the 'search string' has been set up for this catalog. You can set this up using the 'edit' tab for the source (swipe left).

The 'authentication' tab allows you to set a user name and password for catalogs that use HTTP/Digest authentication (Calibre does this). Other catalogs may use different authentication schemes (cookie-based, for example); Freda cannot log on to these catalogs, so you may need to use your web browser to download books from this type of catalog.

Chooser - SkyDrive

You can connect to Microsoft SkyDrive using Freda, and download book files from there. Tap the SkyDrive tile on the chooser screen to get started (if you're updating from an earlier version of Freda, there might not be a SkyDrive tile; in that case, use the 'add source' button to create one). When you first open the SkyDrive source (and afterwards, any time you tap the 'login' button) Freda will display the Microsoft Live connection screen. You need to enter the email address and password associated with your Windows Live account, and tap the 'Yes' button to grant permission for Freda to read your SkyDrive.

skydrive authentication 1 skydrive authentication 2

Freda will then attempt to connect to SkyDrive. Once it succeeds, Freda will show a screen containing a a combination of 'folder' links (which look like folders) and 'book' links (which look like books). Tapping a 'folder link' button takes you to a subfolder in your SkyDrive. Tapping a 'book link' tile will download or open a book file.

Above the list of links, you will see three buttons:

Chooser - DropBox

If you have a DropBox account, Freda can connect to it using this type of book source. Use the 'add source' button to create a DropBox book source. Enter a name for the source ('my dropbox' for instance) and the name of the folder where you want to start (if unsure, use '/', or just leave the value blank). Tap the (✓) ('OK') button to create the source. DropBox will then ask you to provide an email address and password, so Freda can set up the link to your DropBox. If you want to change these in the future, you can access them using the 'login' button on the source screen.

The screen shows a combination of 'folder' links (which look like folders) and 'book' links (which look like books). Tapping a 'folder link' button takes you to a subfolder in your DropBox store. Tapping a 'book link' tile will download or open a book file.

Above the list of links, you will see three buttons:

Chooser - Extras

Chooser - Extras

The 'extras' screen shows a list of additional features within the program:

  1. support will display a screen that you can use to access documentaion and release notes, clear settings, or email a request for help.
  2. feedback offers links that you can use to share book recommendations with friends, send us suggestions for improvements to Freda, etc.
  3. settings takes you to the program's settings screen
  4. backup and restore allows you to make (or restore) a backup copy of your bookshelf and sources. The backup will contain details of all the book sources you have set up, and it will contain information about all the books you have downloaded (title, author, URL the book came from ... ). It will not include the books files themselves - so after restoring from a backup file, you may find you need to download the book again before you can read it.

Reader Screen

Reader - Book

The Reader screen shows the text of the book you are reading. While a book is opening, it will show a row of dots at the top of the screen; as soon as Freda has some text to show you, the text will come up on screen. In the background, Freda will continue to download and prepare other sections of the book. EPUB books are broken into chapters, and Freda takes advantage of this when loading books, by quickly loading whichever chapter you need to see, and putting it on-screen just as soon as it is ready. The program will carry on with loading all the other chapters as a 'background' task, but you can begin reading in the meantime. Until book loading is complete, you may find that screen movements are jerky and not very responsive, however.

To page forward or back, tap at the edge of the screen or slide the screen up and down. To access all the other functions of the Reader screen, tap-and-hold on the central area of the screen. These user interface gestures are customisable (see Settings).

Reader - Controls

A center-tap-and-hold while reading book text will display the Reader 'control' screen.

book controls

The screen contains a table of buttons:

Below this section of the screen, you will see a list of 'preset settings'; tap on one of these to apply the indicated new settings. You can add new presets using the Settings screen.

On the right hand side of the screen is a vertical slider that you can use to move to another place in the book (or tap on the page number above the slider if you want to enter a specific page number). Triangular symbols next to the slider show the position of bookmarks in the book.

At the bottom of the screen is a control for changing how a 'swipe' gesture is interpreted. If you set this to 'select' then when you drag your finger across the screen it will select an area of text, then ask you what you want to do with it. Otherwise, a 'swipe' gesture will change the page (scrolling, panning or turning the page, depending on your program settings and the direction of the swipe gesture).

Around the edge of the screen, the custom control areas are shown. By default, screen taps in all these regions will trugger a page change (indicated by the four-way arrow). But you can cutomise these controls (see Settings)

Settings

The Settings screen allows you to customise various program settings, controlling appearance and behaviour of the program.

settings-basic

The basic settings screen shows buttons for some standard colour schemes, a font selector control and [+] and [-] buttons for increasing/decreasing text size, and a slider for changing the brightness of the book screen. There is a text block (containing the 'lorem ipsum' text) so you can see the settings you have chosen. To apply your chosen settings, tap the 'back' hardware button; to revert to the previous settings, use the 'undo' button.

settings-controls

The controls screen shows all the places on the book page that you can tap, to navigate from page to page, or to access program features. Each location shows an icon indicating what control action is associated with that area, or an empty circle if there is no special action associated with it. Tap on a location to see the list of available control actions, and modify the action if you wish. To apply your chosen settings, tap the 'back' hardware button; to revert to the previous settings, use the 'undo' button.

settings-advanced

To access the full range of program settings, swipe across to the 'advanced' settings screen. To modify a setting on this screen, tap on the setting text; this will display some explanatory text and a control that you can use to modify the setting. Modified settings are shown with a '*' next to them. Once you have made all the changes you wish, you can apply the settings by tapping the 'back' hardware button; to revert to the previous settings, use the 'undo' button.

Text Appearance

These settings are used to modify the appearance of text on the screen.

Ink (Foreground) Foreground colour for text.

Paper (Background) Background colour for text.

Link ink Foreground colour for link (href) text.

Brightness the brightness of displayed text (10=darkest, 100=lightest)

Font The name of the font that Freda will use for book text.

Font size The font size that Freda will use for regular text (large text will be displayed 3 points larger).

Orientation The orientation (portrait or landscape) that is used for displaying book text. There is also a value 'auto', which will rotate the text according to the orientation of the phone.

Controls

Tap screen Controls the effect of a tap gesture (in the main page area). For each gesture, available behaviours will be some or all of:

  1. Change page: move to the next or previous page of the book.
  2. Display controls: display Freda's controls screen.
  3. Ignore: do nothing.

Tap edge Controls the effect of a tap gesture (at the edge of the page area).

Tap word Controls the effect of a tap gesture on a word. You can choose to handle this just the same as any other kind of tap, or you can choose to jump directly to the dictionary or translate screen when a word is tapped.

Tap corner ... You can set special behaviours for a tap at each corner of the page, or you can set no special behaviour (in which case a corner tap will be handled just like an edge tap). The special behaviours include adding an annotation or bookmark, or going to the 'settings' screen.

Hold Edge Controls the effect of a 'hold' (long tap) gesture at the edge of the page area.

Page Edge For the 'Tap Edge' gesture setting, what % of page is considered to be 'edge'.

Page Change Motion Controls the appearance of a page turn; you can set it to 'spin', 'slide' or 'none'.

Turn One Page at a Time If 'yes', then page 'flick' gestures will turn only a single page; if 'no', such gestures will (if energetic enough) cause you to flick through multiple pages.

Reverse page change direction Controls the direction in which the page will turn in response to a screen edge tap.

Layout

Line spacing The spacing between lines. 1 gives the usual appearance.

Page Number Style The value (none) means that no page numbers will be shown. Other values will show a page number at the foot of each page: 'page' means the page number; 'chapter+page' will show chapter number and page-within-chapter; 'percent' will show what percentage of the book has been read so far.

Border The amount of border (in pixels) area that will be left blank around the edge of the page.

Hyphenation If set, long words will be broken up by hyphens, so they appear across multiple lines when this is necessary for the page layout. If not set, words will never be broken up by hyphens. Note: when upgrading from an earlier version of Freda, you may find that this setting does not work on books that are already in the bookshelf. If you want it to work for such books, use the 'delete temporary files' button on the 'support' tab of the chooser screen.

Force alignment If set to any value but 'none', this setting will force the all text to be aligned as indicated, regardless of the formatting instructions provided by the book itself.

Force indent If set, the first line of each paragraph will be indented, regardless of the formatting instructions provided by the book itself.

Line break after para If set, a line break will be added after every after paragraph.

Remove blank lines If set, Freda will suppress consecutive blank lines in the book (any number of blank lines will be shown as a single blank line). If you've set this option and are still seeing big vertical gaps, try reducing the 'Max Margin' setting, as the gap may be a margin rather than a blank line.

Max Margin Sets a scaling factor that will make margin sizes smaller or larger. Note, it won't create a margin for you, if the book itself doesn't specify a margin in its style sheet(s).

Smart para breaks in TXT files If not set, Freda will assume that every line in a TXT file is meant to be a separate paragraph; if set, Freda will concatenate lines that (based on the absence of '.' and suchlike punctuation marks) seem to belong in a single sentence. This option is not available in the Chinese version of Freda, because it doesn't work well with Chinese punctuation.

Show clock on book screen If set, a digital clock will be shown at the top of the book screen.

Advanced

Password If you want to set a password for Freda, tap this setting, enter the new password into the two 'new password' boxes and then tap the 'change password' button. To get rid of the password, you can enter blank text into the password boxes.

Encoding The character encoding used for reading the book file. Try changing this value if some characters (notably quote marks) are wrongly displayed in a book.

Override encoding If true, the 'Encoding' setting will always be used, regardless of what is specified in the book file. If false, the Encoding setting will be used only when the book file specifies no encoding.

Max rulesets in stylesheet Some books contain a large number of spurious style definitions. To improve performance, you can tell Freda to ignore these - a zero value indicates that all definitions will be loaded; any other value specified how many to load, before ignoring all the rest

Divs are Paragraphs Normally, when rendering EPUB and HTML, Freda assumes that the P tag introduces paragraphs, but the DIV tag doesn't - so layout options applicable to paragraphs (like 'force line break after para') won't be applied to DIV elements. If you want to change that behaviour, set this setting, which will tell Freda to treat DIVs as if they were Ps.

Prompt before following links If 'yes', the program will ask you to confirm before following links (hrefs) in a book.

Confirm program exit If 'yes', the program will ask you to confirm before exiting; if 'no', the program will exit when you tap the 'back' button from the main page.

Action when book link is tapped When you tap a book link (on a web book source, or DropBox, SkyDrive or an OPDS book source), the program can either open the book, or it can download the book to to the bookshelf while continuing to view the book source. This setting lets you tell the program which of these things to do, or whether it should ask what to do every time.

Low Memory Mode If 'yes', then program will operate in low memory mode. You should use this mode if your phone has only 512MB of memory, and you can try it in any case if you are experiencing problems with the app freezing. It will result in slower book loading and poorer performance in general. Note: you may need to restart the program to get this setting to take effect

settings-presets

The Settings screen also provides a 'presets' page, which you can use to load and apply 'presets' (a preset is a named set of new settings). The 'Presets' page shows you a list of presets; tap on one of them to apply it. If you want to add a new preset, scroll down to the bottom of the presets list, type in the new preset name and tap the [add favourite] button.

To save current settings into a preset, long-tap on it, and then choose the 'save' option.

You need to specify what particular settings should be included in the preset that you are saving. As a rule, you don't want to include every setting in a preset: I have some presets that relate mainly to layout, where I want different layout setups for different kinds of book (one for TXTs, another for Feedbooks books, another for Calibre-converted PDFs, another for Calibre-converted HTML, ...) but I also have different settings for colour/style (one for night-time, another for reading on the train, another for sunlight) and different control setups (one for standing in a train, another for lying in bed). If you put all your settings into every preset, you will keep modifying settings that you didn't want to change.

For all but the first four presets, there is also a 'delete' function, which you can use to get rid of the indicated preset.

Support

Freda is still work in progress (but hey, you get what you pay for ... and Freda is free!). If you are experiencing problems with the program, you can use this screen to re-initialise the program in various ways, or to send us a support request by email.

Troubleshooting and Advanced Topics

Margin and Layout Problems

Freda tries to interpret the margin and indent directives in a book in a reasonable way, but for some books you may have issues such as:

To resolve these problems for a particular book, use the Settings screen to change the 'Max Margin' value. You should experiment with lower (or zero) values, and see which value gives the best appearance.

Funny Characters appearing in the text (TXT books)

A TXT file contains a stream of bytes. Any program that wants to turn those bytes into text has to make some assumption about how the author of those bytes expected them to be converted into text - because the file just contains the bytes, in doesn't include any hints about what the bytes actually mean. In technical terms, the program (e.g. Freda) needs to decide what Encoding the author used, when converting their text into bytes. To learn all about encodings, look the subject up on Wikipedia ('Unicode' is a reasonable place to start).

If you don't want to make a lifetime's study of the subject, all you really need to know is: If your TXT book appears to include streams of weird characters, particularly in places where you expected to see quote-marks, dashes or accented characters, it's happening because Freda guessed what encoding was used by the file's author, and Freda guessed wrong. You can tell Freda what encoding it should be using for a particular book by using the Settings screen.

Funny Characters appearing in the text (EPUB and HTML books)

Unlike TXT files, EPUB and HTML files contain information to say how the file's bytes are intended to encode characters.

If your EPUB or HTML document is displayed with streams of weird characters, particularly in places where you expected to see quote-marks, dashes or accented characters, it's happening because Freda was unable to understand the encoding information suppplied by the file. That could happen, for example, because the file was badly formatted (a lot of Gutenberg EPUBs have scrambled, unintelligible encoding info), or because the encoding is an unusual one. You can tell Freda what encoding it should be using for a particular book by using the Settings screen. Note that you may need to change the setting 'Override Encoding' to true, to tell Freda that it must use your selected encoding, regardless of the encoding specified in the book itself.

DRM-Protected Books

Books that you have bought and downloaded from such sites as Barnes and Noble and Kobo may well be DRM-protected (encrypted). This is very likely to be the case if you have downloaded them using Adobe Digital Editions; such books are typically protected using the ADEPT copy-protection mechanism. Freda cannot read DRM-protected books. If you try to read a DRM-protected book using Freda, you will generally see just blank pages. A careful search of the internet (or, to be honest, even a rather perfunctory one) will tell you how to remove ADEPT DRM-protection from EPUB books - but do note that the procedure may be illegal where you live. I cannot recommend that you use it.

Untrusted web-sites and https

HTTPS connectivity to websites and OPDS sources may fail if the site's certification authority is not trusted by Microsoft (i.e. its root certificate is not in the phone's certificate store). To fix this problem, install the necessary certificate. For Feedbooks, you can do this by navigating to http://www.startssl.com/certs/ca.cer in Internet Explorer on the phone, then following the instructions to install the certificate.

Known Limitations (a.k.a. Development 'to do' list)

Formatting

For performance reasons, and in recognition of the fact that Windows Phone screens are small, Freda does not implement rich formatting features. Text alignment (left/right/centred/justified) is supported, as are the text styles regular, bold, italic and large. There is also limited support for indenting, line/page-breaks, and left, right, top and bottom margins around elements. More exotic formatting options (drop caps, flow round images, boxes, custom colours and embedded fonts ...) are not supported. If there is some formatting feature that you particularly desire, please email a request and I will add it to the list for future development.

CSS Style Sheets

Freda's handling of CSS style sheets is limited in two ways:

1) In-line styles are only partially interpreted.

2) Selectors cannot be concatenated (so Freda will not understand the syntax "div.foo p.bar {...}", intended to apply the properties {...} to any p.bar elements which have a div.foo ancestor). Concatenated selectors will be ignored. Freda does understand compound selectors like div.foo or p#bar.

HTML Books

HTML books are considered to consist of only a single file. If you have a set of HTML files that constitute separate volumes of a single work, Freda will be able to open them individually, but it will not understand references/links between them. If linkages between HTML files are important for you, you should build an EPUB file out of your collection of HTML files.

Bug Reports and Support Requests

Freda is a work in progress, and if you should happen to encounter any problems, I will be pleased to fix them.

Bug Reports are best emailed to me at support@turnipsoft.co.uk (using the 'email for support' button')

Please give as much detail as you can about any message that Freda displayed when the problem happened.

Support Questions that the manual does not satisfactorily address can be emailed to me; I will answer them, and add to the manual as necessary.

Licensing

The program uses the Majestic-12 HTMLParser, SharpBox and SharpZipLib libraries, which are licensed on terms permitting redistribution for commercial and non-commercial purposes. Freda also includes (in the source file CSSParser.cs) code adapted from Bonesoft's 'Simple CSS Parser' sample. This source code is also licensed on terms permitting its redistribution for commercial and non-commercial purposes.

Freda: the free ebook reader for Windows Phone

http://www.turnipsoft.co.uk/

Copyright © 2009-12 Turnipsoft freda@turnipsoft.co.uk


This license governs use of Freda. If you use Freda you accept this license. If you do not accept the license, do not use Freda.

1. Definitions

The terms "reproduce," "reproduction" and "distribution" have the same meaning here as under U.S. copyright law.

"You" means the licensee of the software.

"Your company" means the company you worked for when you downloaded the software.

"Internal use" means use within your company and specifically excludes the right to distribute the software outside of your company.

"Licensed patents" means any Turnipsoft patent claims which read directly on the software as distributed under this license.

2. Grant of Rights

(A) Copyright Grant- Subject to the terms of this license, Turnipsoft grants you a non-transferable, non-exclusive, worldwide, royalty-free copyright license to reproduce the software and reference it for internal use.

(B) Patent Grant- Subject to the terms of this license, Turnipsoft grants you a non-transferable, non-exclusive, worldwide, royalty-free patent license under licensed patents to use the software within your company.

3. Limitations

(A) No Trademark License- This license does not grant you any rights to use Turnipsoft's name, logo, or trademarks.

(B) If you begin patent litigation against Turnipsoft over patents that you think may apply to the software (including a cross-claim or counterclaim in a lawsuit), your license to the software ends automatically.

(C) The software is licensed "as-is." You bear the risk of using it. Turnipsoft gives no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, Turnipsoft excludes the implied warranties of merchantability, fitness for a particular purpose and non-infringement.


This program uses the Majestic-12 HTMLParser library http://www.majestic12.co.uk/projects/html_parser.php, which is available under the BSD licence, as follows:

Copyright © Alex Chudnovsky, Majestic-12 Ltd (UK). 2005+ All rights reserved

Web: http://www.majestic12.co.uk

E-mail: alexc@majestic12.co.uk

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

* Neither the name of the Majestic-12 nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

This program uses the SharpBox library http://sharpbox.codeplex.com, which is available under the MIT licence, as follows:

Copyright © Dirk Eisenberg, Yury Averkiev, Renald Dubus, Jay Ongg . 2010

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

This program incorporates, in the source file CSSParser.cs, source code taken from BoneSoft's Simple CSS Parser sample, which is released under the Code Project Open Licence 1.02:

Code Project Open License 1.02

This License governs Your use of the Work. This License is intended to allow developers to use the Source Code and Executable Files provided as part of the Work in any application in any form.

The main points subject to the terms of the License are:

This License is entered between You, the individual or other entity reading or otherwise making use of the Work licensed pursuant to this License and the individual or other entity which offers the Work under the terms of this License ("Author").

License

THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CODE PROJECT OPEN LICENSE ("LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.

BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HEREIN, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE AUTHOR GRANTS YOU THE RIGHTS CONTAINED HEREIN IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. IF YOU DO NOT AGREE TO ACCEPT AND BE BOUND BY THE TERMS OF THIS LICENSE, YOU CANNOT MAKE ANY USE OF THE WORK.

Definitions.

  1. "Articles" means, collectively, all articles written by Author which describes how the Source Code and Executable Files for the Work may be used by a user.
  2. "Author" means the individual or entity that offers the Work under the terms of this License.
  3. "Derivative Work" means a work based upon the Work or upon the Work and other pre-existing works.
  4. "Executable Files" refer to the executables, binary files, configuration and any required data files included in the Work.
  5. "Publisher" means the provider of the website, magazine, CD-ROM, DVD or other medium from or by which the Work is obtained by You.
  6. "Source Code" refers to the collection of source code and configuration files used to create the Executable Files.
  7. "Standard Version" refers to such a Work if it has not been modified, or has been modified in accordance with the consent of the Author, such consent being in the full discretion of the Author.
  8. "Work" refers to the collection of files distributed by the Publisher, including the Source Code, Executable Files, binaries, data files, documentation, whitepapers and the Articles.
  9. "You" is you, an individual or entity wishing to use the Work and exercise your rights under this License.

Fair Use/Fair Use Rights. Nothing in this License is intended to reduce, limit, or restrict any rights arising from fair use, fair dealing, first sale or other limitations on the exclusive rights of the copyright owner under copyright law or other applicable laws.

License Grant. Subject to the terms and conditions of this License, the Author hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:

  1. You may use the standard version of the Source Code or Executable Files in Your own applications.
  2. You may apply bug fixes, portability fixes and other modifications obtained from the Public Domain or from the Author. A Work modified in such a way shall still be considered the standard version and will be subject to this License.
  3. You may otherwise modify Your copy of this Work (excluding the Articles) in any way to create a Derivative Work, provided that You insert a prominent notice in each changed file stating how, when and where You changed that file.
  4. You may distribute the standard version of the Executable Files and Source Code or Derivative Work in aggregate with other (possibly commercial) programs as part of a larger (possibly commercial) software distribution.
  5. The Articles discussing the Work published in any form by the author may not be distributed or republished without the Author's consent. The author retains copyright to any such Articles. You may use the Executable Files and Source Code pursuant to this License but you may not repost or republish or otherwise distribute or make available the Articles, without the prior written consent of the Author.

Any subroutines or modules supplied by You and linked into the Source Code or Executable Files this Work shall not be considered part of this Work and will not be subject to the terms of this License.

Patent License. Subject to the terms and conditions of this License, each Author hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, import, and otherwise transfer the Work.

Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:

  1. You agree not to remove any of the original copyright, patent, trademark, and attribution notices and associated disclaimers that may appear in the Source Code or Executable Files.
  2. You agree not to advertise or in any way imply that this Work is a product of Your own.
  3. The name of the Author may not be used to endorse or promote products derived from the Work without the prior written consent of the Author.
  4. You agree not to sell, lease, or rent any part of the Work. This does not restrict you from including the Work or any part of the Work inside a larger software distribution that itself is being sold. The Work by itself, though, cannot be sold, leased or rented.
  5. You may distribute the Executable Files and Source Code only under the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this License with every copy of the Executable Files or Source Code You distribute and ensure that anyone receiving such Executable Files and Source Code agrees that the terms of this License apply to such Executable Files and/or Source Code. You may not offer or impose any terms on the Work that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute the Executable Files or Source Code with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License.
  6. You agree not to use the Work for illegal, immoral or improper purposes, or on pages containing illegal, immoral or improper material. The Work is subject to applicable export laws. You agree to comply with all such laws and regulations that may apply to the Work after Your receipt of the Work.

Representations, Warranties and Disclaimer. THIS WORK IS PROVIDED "AS IS", "WHERE IS" AND "AS AVAILABLE", WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES OR CONDITIONS OR GUARANTEES. YOU, THE USER, ASSUME ALL RISK IN ITS USE, INCLUDING COPYRIGHT INFRINGEMENT, PATENT INFRINGEMENT, SUITABILITY, ETC. AUTHOR EXPRESSLY DISCLAIMS ALL EXPRESS, IMPLIED OR STATUTORY WARRANTIES OR CONDITIONS, INCLUDING WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF MERCHANTABILITY, MERCHANTABLE QUALITY OR FITNESS FOR A PARTICULAR PURPOSE, OR ANY WARRANTY OF TITLE OR NON-INFRINGEMENT, OR THAT THE WORK (OR ANY PORTION THEREOF) IS CORRECT, USEFUL, BUG-FREE OR FREE OF VIRUSES. YOU MUST PASS THIS DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE WORK OR DERIVATIVE WORKS.

Indemnity. You agree to defend, indemnify and hold harmless the Author and the Publisher from and against any claims, suits, losses, damages, liabilities, costs, and expenses (including reasonable legal or attorneys' fees) resulting from or relating to any use of the Work by You.

Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL THE AUTHOR OR THE PUBLISHER BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK OR OTHERWISE, EVEN IF THE AUTHOR OR THE PUBLISHER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

Termination.

  1. This License and the rights granted hereunder will terminate automatically upon any breach by You of any term of this License. Individuals or entities who have received Derivative Works from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 6, 7, 8, 9, 10 and 11 will survive any termination of this License.
  2. If You bring a copyright, trademark, patent or any other infringement claim against any contributor over infringements You claim are made by the Work, your License from such contributor to the Work ends automatically.
  3. Subject to the above terms and conditions, this License is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, the Author reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.

Publisher. The parties hereby confirm that the Publisher shall not, under any circumstances, be responsible for and shall not have any liability in respect of the subject matter of this License. The Publisher makes no warranty whatsoever in connection with the Work and shall not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. The Publisher reserves the right to cease making the Work available to You at any time without notice

Miscellaneous

  1. This License shall be governed by the laws of the location of the head office of the Author or if the Author is an individual, the laws of location of the principal place of residence of the Author.
  2. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this License, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
  3. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
  4. This License constitutes the entire agreement between the parties with respect to the Work licensed herein. There are no understandings, agreements or representations with respect to the Work not specified herein. The Author shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Author and You.

This program uses the SharpZipLib library http://www.icsharpcode.net/OpenSource/SharpZipLib/, which is available under the GPL licence, with the following exception:

Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination.

As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.