]> git.wh0rd.org - tt-rss.git/commitdiff
Merge pull request #186 from EyesX/master
authorAndrew Dolgov <fox+ttrss@fakecake.org>
Tue, 14 May 2013 04:35:52 +0000 (21:35 -0700)
committerAndrew Dolgov <fox+ttrss@fakecake.org>
Tue, 14 May 2013 04:35:52 +0000 (21:35 -0700)
Updated Swedish (sv_SE) translation

107 files changed:
api/index.php
cdm.css
classes/api.php
classes/article.php
classes/auth/base.php
classes/db/pdo.php
classes/feedenclosure.php [new file with mode: 0644]
classes/feeditem.php [new file with mode: 0644]
classes/feeditem/atom.php [new file with mode: 0644]
classes/feeditem/common.php [new file with mode: 0644]
classes/feeditem/rss.php [new file with mode: 0644]
classes/feedparser.php [new file with mode: 0644]
classes/feeds.php
classes/handler/public.php
classes/pluginhost.php
classes/pref/feeds.php
classes/pref/filters.php
classes/pref/prefs.php
classes/pref/users.php
classes/rpc.php
classes/sanitizedummy.php [deleted file]
classes/ttrssmailer.php
include/colors.php
include/errorhandler.php
include/functions.php
include/rssfuncs.php
include/version.php
index.php
install/index.php
js/FeedTree.js
js/feedlist.js
js/prefs.js
js/tt-rss.js
js/viewfeed.js
lib/MiniTemplator.class.php
lib/phpqrcode/bindings/tcpdf/qrcode.php
lib/phpqrcode/phpqrcode.php
lib/phpqrcode/qrencode.php
lib/phpqrcode/qrmask.php
lib/phpqrcode/qrsplit.php
lib/simplepie/simplepie.inc [deleted file]
locale/cs_CZ/LC_MESSAGES/messages.mo
locale/cs_CZ/LC_MESSAGES/messages.po
locale/fr_FR/LC_MESSAGES/messages.mo
locale/fr_FR/LC_MESSAGES/messages.po
locale/nl_NL/LC_MESSAGES/messages.mo
locale/nl_NL/LC_MESSAGES/messages.po
plugins/af_unburn/init.php
plugins/auth_internal/init.php
plugins/auth_remote/init.php
plugins/bookmarklets/init.php
plugins/digest/digest.css [deleted file]
plugins/digest/digest.js [deleted file]
plugins/digest/digest_body.php [deleted file]
plugins/digest/images/tile.png [deleted file]
plugins/digest/init.php [deleted file]
plugins/digest/mobile.css [deleted file]
plugins/example/example.js [deleted file]
plugins/example/init.php [deleted file]
plugins/example_api/init.php [deleted file]
plugins/example_article/init.js [deleted file]
plugins/example_article/init.php [deleted file]
plugins/example_feed/init.php [deleted file]
plugins/example_routing/init.php [deleted file]
plugins/example_vfeed/init.php [deleted file]
plugins/import_export/init.php
plugins/mobile/article.php [deleted file]
plugins/mobile/backend.php [deleted file]
plugins/mobile/cat.php [deleted file]
plugins/mobile/feed.php [deleted file]
plugins/mobile/home.php [deleted file]
plugins/mobile/index.php [deleted file]
plugins/mobile/init.php [deleted file]
plugins/mobile/iui/LICENSE.txt [deleted file]
plugins/mobile/iui/NOTICE.txt [deleted file]
plugins/mobile/iui/backButton.png [deleted file]
plugins/mobile/iui/blueButton.png [deleted file]
plugins/mobile/iui/cancel.png [deleted file]
plugins/mobile/iui/grayButton.png [deleted file]
plugins/mobile/iui/iui-logo-touch-icon.png [deleted file]
plugins/mobile/iui/iui.css [deleted file]
plugins/mobile/iui/iui.js [deleted file]
plugins/mobile/iui/iuix.css [deleted file]
plugins/mobile/iui/iuix.js [deleted file]
plugins/mobile/iui/listArrow.png [deleted file]
plugins/mobile/iui/listArrowSel.png [deleted file]
plugins/mobile/iui/listGroup.png [deleted file]
plugins/mobile/iui/loading.gif [deleted file]
plugins/mobile/iui/pinstripes.png [deleted file]
plugins/mobile/iui/redButton.png [deleted file]
plugins/mobile/iui/selection.png [deleted file]
plugins/mobile/iui/thumb.png [deleted file]
plugins/mobile/iui/toggle.png [deleted file]
plugins/mobile/iui/toggleOn.png [deleted file]
plugins/mobile/iui/toolButton.png [deleted file]
plugins/mobile/iui/toolbar.png [deleted file]
plugins/mobile/iui/whiteButton.png [deleted file]
plugins/mobile/login_form.php [deleted file]
plugins/mobile/logout.php [deleted file]
plugins/mobile/mobile-functions.php [deleted file]
plugins/mobile/mobile.css [deleted file]
plugins/mobile/mobile.js [deleted file]
plugins/mobile/prefs.php [deleted file]
prefs.php
tt-rss.css
update.php
utility.css

index 9f0d93f695d19880e1c1b77bd08dbeb662cd3790..facdf82c54db587e9cd07f6cb826b6daec494555 100644 (file)
@@ -57,7 +57,7 @@
 
        $method = strtolower($_REQUEST["op"]);
 
-       $handler = new API(Db::get(), $_REQUEST);
+       $handler = new API($_REQUEST);
 
        if ($handler->before($method)) {
                if ($method && method_exists($handler, $method)) {
diff --git a/cdm.css b/cdm.css
index 657950140e8c92a838f0bdd77149ffb5073d0b07..6028c6ead39fce99ce7055c4feed6f659b604895 100644 (file)
--- a/cdm.css
+++ b/cdm.css
@@ -55,6 +55,7 @@ div.cdmContent a:hover {
 
 div.cdmContentInner {
        margin : 10px;
+       line-height : 20px;
 }
 
 div.cdmContentInner img {
@@ -70,53 +71,78 @@ div.cdmFooter {
        clear : both;
 }
 
-div.cdm {
-       border-width : 0px 1px 1px 0px;
-       border-collapse : collapse;
-       border-color : #c0c0c0;
-       border-style : solid;
-       background : #fafafa;
+div.cdm.expanded {
+       margin-top : 4px;
+       margin-bottom : 4px;
 }
 
 div.cdm.expandable {
-       background : #f0f0f0;
+       background-color : #f0f0f0;
+       border-width : 0px 0px 1px 0px;
+       border-color : #c0c0c0;
+       border-style : solid;
 }
 
-div.cdm.expanded, div.cdm.expandable {
-       margin : 4px 4px 0px 4px;
-       border-width : 1px;
-       border-color : #c0c0c0;
-       box-shadow : 0px 0px 3px #ccc;
+div.cdm.expandable > hr {
+       display : none;
 }
 
-div.cdm.expanded div.cdmHeader {
-       background : #e0e0e0;
+div.cdm.expanded > hr {
+       margin-top : 0px;
+       margin-bottom : 0px;
 }
 
 div.cdm.Unread {
        background : white;
 }
 
-div.cdm.Unread div.cdmHeader {
-       background : #ecf4ff;
-}
-
 div.cdm.active {
        border-color : #88b0f0;
        background : white ! important;
-       box-shadow : 0px 0px 3px #4684ff;
 }
 
-div.cdm.active div.cdmHeader {
-       background : #ecf4ff;
+div.cdm.expandable div.cdmHeader a.title {
+       font-weight : bold;
+       color : gray;
+}
+
+div.cdm.expandable.Unread div.cdmHeader a.title {
+       color : black;
 }
 
-div.cdm.active div.cdmHeader a.title {
+div.cdm.expandable.active div.cdmHeader a.title {
        color : #4684ff;
 }
 
+div.cdm.expanded div.cdmHeader {
+       background : transparent ! important;
+}
+
+div.cdm.expanded div.cdmHeader a.title {
+       font-size : 14px;
+       color : gray;
+       font-weight : bold;
+}
+
+
+div.cdm.expanded.active div.cdmHeader a.title {
+       color : #4684ff;
+}
+
+div.cdm.expanded.Unread div.cdmHeader a.title {
+       color : black;
+}
+
+div.cdm.expanded div.cdmContent {
+       color : gray;
+}
+
+div.cdm.expanded.Unread div.cdmContent {
+       color : black;
+}
+
 div.cdm.active div.cdmContent {
-       background : white;
+       color : black;
 }
 
 span.cdmExcerpt {
@@ -145,6 +171,7 @@ div.cdmFeedTitle a.title {
        font-style : italic;
        font-weight : bold;
 }
+
 div.cdmFeedTitle a {
        color : gray;
 }
@@ -153,10 +180,6 @@ div.cdmFeedTitle a:hover {
        color : #4684ff;
 }
 
-div.articleNote {
-       border-style : dashed none dashed none;
-}
-
 div.cdmHeader span.hlFeed {
        float : right;
        font-weight : normal;
@@ -171,12 +194,14 @@ div.cdmHeader div.hlFeed, div.cdmHeader div.hlFeed a {
        font-size : 11px;
 }
 
-div.cdmContentInner p {
-       max-width : 650px;
+div.cdm .hlFeed a {
+       border-radius : 4px;
+       display : inline-block;
+       padding : 1px 4px 1px 4px;
 }
 
-.Unread div.cdmHeader {
-       font-weight : bold;
+div.cdmContentInner p {
+       max-width : 650px;
 }
 
 div.cdmContentInner iframe {
@@ -189,8 +214,4 @@ div.cdmHeader span.author {
        font-weight : normal;
 }
 
-div.cdm.expanded div.cdmHeader a.title, div.cdm.active div.cdmHeader a.title {
-       font-size : 13px;
-}
-
 
index badd0b5647a610ced9f260a8984cefff32bd1f1e..f5e4a0c5cb76853bd62e44b8b79d41c9dded21cd 100644 (file)
@@ -14,12 +14,12 @@ class API extends Handler {
                        header("Content-Type: text/json");
 
                        if (!$_SESSION["uid"] && $method != "login" && $method != "isloggedin") {
-                               print $this->wrap(self::STATUS_ERR, array("error" => 'NOT_LOGGED_IN'));
+                               $this->wrap(self::STATUS_ERR, array("error" => 'NOT_LOGGED_IN'));
                                return false;
                        }
 
                        if ($_SESSION["uid"] && $method != "logout" && !get_pref('ENABLE_API_ACCESS')) {
-                               print $this->wrap(self::STATUS_ERR, array("error" => 'API_DISABLED'));
+                               $this->wrap(self::STATUS_ERR, array("error" => 'API_DISABLED'));
                                return false;
                        }
 
@@ -38,12 +38,12 @@ class API extends Handler {
 
        function getVersion() {
                $rv = array("version" => VERSION);
-               print $this->wrap(self::STATUS_OK, $rv);
+               $this->wrap(self::STATUS_OK, $rv);
        }
 
        function getApiLevel() {
                $rv = array("level" => self::API_LEVEL);
-               print $this->wrap(self::STATUS_OK, $rv);
+               $this->wrap(self::STATUS_OK, $rv);
        }
 
        function login() {
@@ -65,33 +65,33 @@ class API extends Handler {
                }
 
                if (!$uid) {
-                       print $this->wrap(self::STATUS_ERR, array("error" => "LOGIN_ERROR"));
+                       $this->wrap(self::STATUS_ERR, array("error" => "LOGIN_ERROR"));
                        return;
                }
 
                if (get_pref("ENABLE_API_ACCESS", $uid)) {
                        if (authenticate_user($login, $password)) {               // try login with normal password
-                               print $this->wrap(self::STATUS_OK, array("session_id" => session_id(),
+                               $this->wrap(self::STATUS_OK, array("session_id" => session_id(),
                                        "api_level" => self::API_LEVEL));
                        } else if (authenticate_user($login, $password_base64)) { // else try with base64_decoded password
-                               print $this->wrap(self::STATUS_OK,      array("session_id" => session_id(),
+                               $this->wrap(self::STATUS_OK,    array("session_id" => session_id(),
                                        "api_level" => self::API_LEVEL));
                        } else {                                                         // else we are not logged in
-                               print $this->wrap(self::STATUS_ERR, array("error" => "LOGIN_ERROR"));
+                               $this->wrap(self::STATUS_ERR, array("error" => "LOGIN_ERROR"));
                        }
                } else {
-                       print $this->wrap(self::STATUS_ERR, array("error" => "API_DISABLED"));
+                       $this->wrap(self::STATUS_ERR, array("error" => "API_DISABLED"));
                }
 
        }
 
        function logout() {
                logout_user();
-               print $this->wrap(self::STATUS_OK, array("status" => "OK"));
+               $this->wrap(self::STATUS_OK, array("status" => "OK"));
        }
 
        function isLoggedIn() {
-               print $this->wrap(self::STATUS_OK, array("status" => $_SESSION["uid"] != ''));
+               $this->wrap(self::STATUS_OK, array("status" => $_SESSION["uid"] != ''));
        }
 
        function getUnread() {
@@ -99,15 +99,15 @@ class API extends Handler {
                $is_cat = $this->dbh->escape_string($_REQUEST["is_cat"]);
 
                if ($feed_id) {
-                       print $this->wrap(self::STATUS_OK, array("unread" => getFeedUnread($feed_id, $is_cat)));
+                       $this->wrap(self::STATUS_OK, array("unread" => getFeedUnread($feed_id, $is_cat)));
                } else {
-                       print $this->wrap(self::STATUS_OK, array("unread" => getGlobalUnread()));
+                       $this->wrap(self::STATUS_OK, array("unread" => getGlobalUnread()));
                }
        }
 
        /* Method added for ttrss-reader for Android */
        function getCounters() {
-               print $this->wrap(self::STATUS_OK, getAllCounters());
+               $this->wrap(self::STATUS_OK, getAllCounters());
        }
 
        function getFeeds() {
@@ -119,7 +119,7 @@ class API extends Handler {
 
                $feeds = $this->api_get_feeds($cat_id, $unread_only, $limit, $offset, $include_nested);
 
-               print $this->wrap(self::STATUS_OK, $feeds);
+               $this->wrap(self::STATUS_OK, $feeds);
        }
 
        function getCategories() {
@@ -176,7 +176,7 @@ class API extends Handler {
                        }
                }
 
-               print $this->wrap(self::STATUS_OK, $cats);
+               $this->wrap(self::STATUS_OK, $cats);
        }
 
        function getHeadlines() {
@@ -219,9 +219,9 @@ class API extends Handler {
                                $include_attachments, $since_id, $search, $search_mode,
                                $include_nested, $sanitize_content);
 
-                       print $this->wrap(self::STATUS_OK, $headlines);
+                       $this->wrap(self::STATUS_OK, $headlines);
                } else {
-                       print $this->wrap(self::STATUS_ERR, array("error" => 'INCORRECT_USAGE'));
+                       $this->wrap(self::STATUS_ERR, array("error" => 'INCORRECT_USAGE'));
                }
        }
 
@@ -293,11 +293,11 @@ class API extends Handler {
                                }
                        }
 
-                       print $this->wrap(self::STATUS_OK, array("status" => "OK",
+                       $this->wrap(self::STATUS_OK, array("status" => "OK",
                                "updated" => $num_updated));
 
                } else {
-                       print $this->wrap(self::STATUS_ERR, array("error" => 'INCORRECT_USAGE'));
+                       $this->wrap(self::STATUS_ERR, array("error" => 'INCORRECT_USAGE'));
                }
 
        }
@@ -352,7 +352,7 @@ class API extends Handler {
                        }
                }
 
-               print $this->wrap(self::STATUS_OK, $articles);
+               $this->wrap(self::STATUS_OK, $articles);
 
        }
 
@@ -370,7 +370,7 @@ class API extends Handler {
 
                $config["num_feeds"] = (int)$num_feeds;
 
-               print $this->wrap(self::STATUS_OK, $config);
+               $this->wrap(self::STATUS_OK, $config);
        }
 
        function updateFeed() {
@@ -380,7 +380,7 @@ class API extends Handler {
 
                update_rss_feed($feed_id, true);
 
-               print $this->wrap(self::STATUS_OK, array("status" => "OK"));
+               $this->wrap(self::STATUS_OK, array("status" => "OK"));
        }
 
        function catchupFeed() {
@@ -389,13 +389,13 @@ class API extends Handler {
 
                catchup_feed($feed_id, $is_cat);
 
-               print $this->wrap(self::STATUS_OK, array("status" => "OK"));
+               $this->wrap(self::STATUS_OK, array("status" => "OK"));
        }
 
        function getPref() {
                $pref_name = $this->dbh->escape_string($_REQUEST["pref_name"]);
 
-               print $this->wrap(self::STATUS_OK, array("value" => get_pref($pref_name)));
+               $this->wrap(self::STATUS_OK, array("value" => get_pref($pref_name)));
        }
 
        function getLabels() {
@@ -432,7 +432,7 @@ class API extends Handler {
                                "checked" => $checked));
                }
 
-               print $this->wrap(self::STATUS_OK, $rv);
+               $this->wrap(self::STATUS_OK, $rv);
        }
 
        function setArticleLabel() {
@@ -460,7 +460,7 @@ class API extends Handler {
                        }
                }
 
-               print $this->wrap(self::STATUS_OK, array("status" => "OK",
+               $this->wrap(self::STATUS_OK, array("status" => "OK",
                        "updated" => $num_updated));
 
        }
@@ -471,10 +471,10 @@ class API extends Handler {
                if ($plugin && method_exists($plugin, $method)) {
                        $reply = $plugin->$method();
 
-                       print $this->wrap($reply[0], $reply[1]);
+                       $this->wrap($reply[0], $reply[1]);
 
                } else {
-                       print $this->wrap(self::STATUS_ERR, array("error" => 'UNKNOWN_METHOD', "method" => $method));
+                       $this->wrap(self::STATUS_ERR, array("error" => 'UNKNOWN_METHOD', "method" => $method));
                }
        }
 
@@ -484,9 +484,9 @@ class API extends Handler {
                $content = $this->dbh->escape_string(strip_tags($_REQUEST["content"]));
 
                if (Article::create_published_article($title, $url, $content, "", $_SESSION["uid"])) {
-                       print $this->wrap(self::STATUS_OK, array("status" => 'OK'));
+                       $this->wrap(self::STATUS_OK, array("status" => 'OK'));
                } else {
-                       print $this->wrap(self::STATUS_ERR, array("error" => 'Publishing failed'));
+                       $this->wrap(self::STATUS_ERR, array("error" => 'Publishing failed'));
                }
        }
 
@@ -714,9 +714,9 @@ class API extends Handler {
 
                if ($this->dbh->num_rows($result) != 0) {
                        Pref_Feeds::remove_feed($feed_id, $_SESSION["uid"]);
-                       print $this->wrap(self::STATUS_OK, array("status" => "OK"));
+                       $this->wrap(self::STATUS_OK, array("status" => "OK"));
                } else {
-                       print $this->wrap(self::STATUS_ERR, array("error" => "FEED_NOT_FOUND"));
+                       $this->wrap(self::STATUS_ERR, array("error" => "FEED_NOT_FOUND"));
                }
        }
 
@@ -727,12 +727,11 @@ class API extends Handler {
                $password = $this->dbh->escape_string($_REQUEST["password"]);
 
                if ($feed_url) {
-                       $rc = subscribe_to_feed($feed_url, $category_id,
-                               $login, $password, false);
+                       $rc = subscribe_to_feed($feed_url, $category_id, $login, $password);
 
-                       print $this->wrap(self::STATUS_OK, array("status" => $rc));
+                       $this->wrap(self::STATUS_OK, array("status" => $rc));
                } else {
-                       print $this->wrap(self::STATUS_ERR, array("error" => 'INCORRECT_USAGE'));
+                       $this->wrap(self::STATUS_ERR, array("error" => 'INCORRECT_USAGE'));
                }
        }
 
@@ -746,9 +745,9 @@ class API extends Handler {
 
                if ($pf){
                        $data = $pf->makefeedtree();
-                       print $this->wrap(self::STATUS_OK, array("categories" => $data));
+                       $this->wrap(self::STATUS_OK, array("categories" => $data));
                } else {
-                       print $this->wrap(self::STATUS_ERR, array("error" =>
+                       $this->wrap(self::STATUS_ERR, array("error" =>
                                'UNABLE_TO_INSTANTIATE_OBJECT'));
                }
 
index 1198eefa95cc3ebd7624c981df33b8ab4fe791e5..e9f86f2984d6a709fe5cf8aeb0c4caebd0018eec 100644 (file)
@@ -215,7 +215,7 @@ class Article extends Handler_Protected {
                $this->dbh->query("UPDATE ttrss_user_entries SET
                        score = '$score' WHERE ref_id IN ($ids) AND owner_uid = " . $_SESSION["uid"]);
 
-               print json_encode(array("id" => $id,
+               print json_encode(array("id" => $ids,
                        "score_pic" => get_score_pic($score)));
        }
 
index 83f99d109f8ff66a2dba0759ea7d4c2d1a20249f..69acd0985c6ceb87a173eafa2983a411589a07ff 100644 (file)
@@ -16,10 +16,12 @@ class Auth_Base {
 
        // Auto-creates specified user if allowed by system configuration
        // Can be used instead of find_user_by_login() by external auth modules
-       function auto_create_user($login) {
+       function auto_create_user($login, $password = false) {
                if ($login && defined('AUTH_AUTO_CREATE') && AUTH_AUTO_CREATE) {
                        $user_id = $this->find_user_by_login($login);
 
+                       if (!$password) $password = make_password();
+
                        if (!$user_id) {
                                $login = $this->dbh->escape_string($login);
                                $salt = substr(bin2hex(get_random_bytes(125)), 0, 250);
index 59499139dcc7329660a6db30dffab48ae4d06abf..126f5150a75365ff64b2ed82a0cac202114832a8 100644 (file)
@@ -79,7 +79,7 @@ class Db_PDO implements IDb {
        }
 
        function last_error() {
-               return join(" ", $pdo->errorInfo());
+               return join(" ", $this->pdo->errorInfo());
        }
 
        function init() {
diff --git a/classes/feedenclosure.php b/classes/feedenclosure.php
new file mode 100644 (file)
index 0000000..d610dd7
--- /dev/null
@@ -0,0 +1,7 @@
+<?php
+class FeedEnclosure {
+       public $link;
+       public $type;
+       public $length;
+}
+?>
diff --git a/classes/feeditem.php b/classes/feeditem.php
new file mode 100644 (file)
index 0000000..e64a13f
--- /dev/null
@@ -0,0 +1,15 @@
+<?php
+abstract class FeedItem {
+       abstract function get_id();
+       abstract function get_date();
+       abstract function get_link();
+       abstract function get_title();
+       abstract function get_description();
+       abstract function get_content();
+       abstract function get_comments_url();
+       abstract function get_comments_count();
+       abstract function get_categories();
+       abstract function get_enclosures();
+       abstract function get_author();
+}
+?>
diff --git a/classes/feeditem/atom.php b/classes/feeditem/atom.php
new file mode 100644 (file)
index 0000000..b981dc3
--- /dev/null
@@ -0,0 +1,109 @@
+<?php
+class FeedItem_Atom extends FeedItem_Common {
+       function get_id() {
+               $id = $this->elem->getElementsByTagName("id")->item(0);
+
+               if ($id) {
+                       return $id->nodeValue;
+               } else {
+                       return $this->get_link();
+               }
+       }
+
+       function get_date() {
+               $updated = $this->elem->getElementsByTagName("updated")->item(0);
+
+               if ($updated) {
+                       return strtotime($updated->nodeValue);
+               }
+       }
+
+       function get_link() {
+               $links = $this->elem->getElementsByTagName("link");
+
+               foreach ($links as $link) {
+                       if ($link && $link->hasAttribute("href") && (!$link->hasAttribute("rel")
+                                       || $link->getAttribute("rel") == "alternate")) {
+                               return $link->getAttribute("href");
+                       }
+               }
+       }
+
+       function get_title() {
+               $title = $this->elem->getElementsByTagName("title")->item(0);
+
+               if ($title) {
+                       return $title->nodeValue;
+               }
+       }
+
+       function get_content() {
+               $content = $this->elem->getElementsByTagName("content")->item(0);
+
+               if ($content) {
+                       return $content->nodeValue;
+               }
+       }
+
+       function get_description() {
+               $summary = $this->elem->getElementsByTagName("summary")->item(0);
+
+               if ($summary) {
+                       return $summary->nodeValue;
+               }
+       }
+
+       function get_categories() {
+               $categories = $this->elem->getElementsByTagName("category");
+               $cats = array();
+
+               foreach ($categories as $cat) {
+                       if ($cat->hasAttribute("term"))
+                               array_push($cats, $cat->getAttribute("term"));
+               }
+
+               $categories = $this->xpath->query("dc:subject", $this->elem);
+
+               foreach ($categories as $cat) {
+                       array_push($cats, $cat->nodeValue);
+               }
+
+               return $cats;
+       }
+
+       function get_enclosures() {
+               $links = $this->elem->getElementsByTagName("link");
+
+               $encs = array();
+
+               foreach ($links as $link) {
+                       if ($link && $link->hasAttribute("href") && $link->hasAttribute("rel")) {
+                               if ($link->getAttribute("rel") == "enclosure") {
+                                       $enc = new FeedEnclosure();
+
+                                       $enc->type = $link->getAttribute("type");
+                                       $enc->link = $link->getAttribute("href");
+                                       $enc->length = $link->getAttribute("length");
+
+                                       array_push($encs, $enc);
+                               }
+                       }
+               }
+
+               $enclosures = $this->xpath->query("media:content", $this->elem);
+
+               foreach ($enclosures as $enclosure) {
+                       $enc = new FeedEnclosure();
+
+                       $enc->type = $enclosure->getAttribute("type");
+                       $enc->link = $enclosure->getAttribute("url");
+                       $enc->length = $enclosure->getAttribute("length");
+
+                       array_push($encs, $enc);
+               }
+
+               return $encs;
+       }
+
+}
+?>
diff --git a/classes/feeditem/common.php b/classes/feeditem/common.php
new file mode 100644 (file)
index 0000000..0787a42
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+abstract class FeedItem_Common extends FeedItem {
+       protected $elem;
+       protected $xpath;
+       protected $doc;
+
+       function __construct($elem, $doc, $xpath) {
+               $this->elem = $elem;
+               $this->xpath = $xpath;
+               $this->doc = $doc;
+       }
+
+       function get_author() {
+               $author = $this->elem->getElementsByTagName("author")->item(0);
+
+               if ($author) {
+                       $name = $author->getElementsByTagName("name")->item(0);
+
+                       if ($name) return $name->nodeValue;
+
+                       $email = $author->getElementsByTagName("email")->item(0);
+
+                       if ($email) return $email->nodeValue;
+
+                       if ($author->nodeValue)
+                               return $author->nodeValue;
+               }
+
+               $author = $this->xpath->query("dc:creator", $this->elem)->item(0);
+
+               if ($author) {
+                       return $author->nodeValue;
+               }
+       }
+
+       // todo
+       function get_comments_url() {
+
+       }
+
+       function get_comments_count() {
+               $comments = $this->xpath->query("slash:comments", $this->elem)->item(0);
+
+               if ($comments) {
+                       return $comments->nodeValue;
+               }
+       }
+
+
+}
+?>
diff --git a/classes/feeditem/rss.php b/classes/feeditem/rss.php
new file mode 100644 (file)
index 0000000..2f363b4
--- /dev/null
@@ -0,0 +1,107 @@
+<?php
+class FeedItem_RSS extends FeedItem_Common {
+       function get_id() {
+               $id = $this->elem->getElementsByTagName("guid")->item(0);
+
+               if ($id) {
+                       return $id->nodeValue;
+               } else {
+                       return $this->get_link();
+               }
+       }
+
+       function get_date() {
+               $pubDate = $this->elem->getElementsByTagName("pubDate")->item(0);
+
+               if ($pubDate) {
+                       return strtotime($pubDate->nodeValue);
+               }
+       }
+
+       function get_link() {
+               $link = $this->elem->getElementsByTagName("link")->item(0);
+
+               if ($link) {
+                       return $link->nodeValue;
+               }
+       }
+
+       function get_title() {
+               $title = $this->elem->getElementsByTagName("title")->item(0);
+
+               if ($title) {
+                       return $title->nodeValue;
+               }
+       }
+
+       function get_content() {
+               $content = $this->xpath->query("content:encoded", $this->elem)->item(0);
+
+               if ($content) {
+                       return $content->nodeValue;
+               }
+
+               $content = $this->elem->getElementsByTagName("description")->item(0);
+
+               if ($content) {
+                       return $content->nodeValue;
+               }
+       }
+
+       function get_description() {
+               $summary = $this->elem->getElementsByTagName("description")->item(0);
+
+               if ($summary) {
+                       return $summary->nodeValue;
+               }
+       }
+
+       function get_categories() {
+               $categories = $this->elem->getElementsByTagName("category");
+               $cats = array();
+
+               foreach ($categories as $cat) {
+                       array_push($cats, $cat->nodeValue);
+               }
+
+               $categories = $this->xpath->query("dc:subject", $this->elem);
+
+               foreach ($categories as $cat) {
+                       array_push($cats, $cat->nodeValue);
+               }
+
+               return $cats;
+       }
+
+       function get_enclosures() {
+               $enclosures = $this->elem->getElementsByTagName("enclosure");
+
+               $encs = array();
+
+               foreach ($enclosures as $enclosure) {
+                       $enc = new FeedEnclosure();
+
+                       $enc->type = $enclosure->getAttribute("type");
+                       $enc->link = $enclosure->getAttribute("url");
+                       $enc->length = $enclosure->getAttribute("length");
+
+                       array_push($encs, $enc);
+               }
+
+               $enclosures = $this->xpath->query("media:content", $this->elem);
+
+               foreach ($enclosures as $enclosure) {
+                       $enc = new FeedEnclosure();
+
+                       $enc->type = $enclosure->getAttribute("type");
+                       $enc->link = $enclosure->getAttribute("url");
+                       $enc->length = $enclosure->getAttribute("length");
+
+                       array_push($encs, $enc);
+               }
+
+               return $encs;
+       }
+
+}
+?>
diff --git a/classes/feedparser.php b/classes/feedparser.php
new file mode 100644 (file)
index 0000000..d60db8a
--- /dev/null
@@ -0,0 +1,180 @@
+<?php
+class FeedParser {
+       private $doc;
+       private $error;
+       private $items;
+       private $link;
+       private $title;
+       private $type;
+       private $xpath;
+
+       const FEED_RDF = 0;
+       const FEED_RSS = 1;
+       const FEED_ATOM = 2;
+
+       function __construct($data) {
+               libxml_use_internal_errors(true);
+               libxml_clear_errors();
+               $this->doc = new DOMDocument();
+               $this->doc->loadXML($data);
+               $this->error = $this->format_error(libxml_get_last_error());
+               libxml_clear_errors();
+
+               $this->items = array();
+       }
+
+       function init() {
+               $root = $this->doc->firstChild;
+               $xpath = new DOMXPath($this->doc);
+               $xpath->registerNamespace('atom', 'http://www.w3.org/2005/Atom');
+               $xpath->registerNamespace('media', 'http://search.yahoo.com/mrss/');
+               $xpath->registerNamespace('rdf', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#');
+               $xpath->registerNamespace('slash', 'http://purl.org/rss/1.0/modules/slash/');
+               $xpath->registerNamespace('dc', 'http://purl.org/dc/elements/1.1/');
+               $xpath->registerNamespace('content', 'http://purl.org/rss/1.0/modules/content/');
+
+               $this->xpath = $xpath;
+
+               $root = $xpath->query("(//atom:feed|//channel|//rdf:rdf|//rdf:RDF)")->item(0);
+
+               if ($root) {
+                       switch (mb_strtolower($root->tagName)) {
+                       case "rdf:rdf":
+                               $this->type = $this::FEED_RDF;
+                               break;
+                       case "channel":
+                               $this->type = $this::FEED_RSS;
+                               break;
+                       case "feed":
+                               $this->type = $this::FEED_ATOM;
+                               break;
+                       default:
+                               $this->error = "Unknown/unsupported feed type";
+                               return;
+                       }
+
+                       switch ($this->type) {
+                       case $this::FEED_ATOM:
+
+                               $title = $xpath->query("//atom:feed/atom:title")->item(0);
+
+                               if ($title) {
+                                       $this->title = $title->nodeValue;
+                               }
+
+                               $link = $xpath->query("//atom:feed/atom:link[not(@rel)]")->item(0);
+
+                               if ($link && $link->hasAttributes()) {
+                                       $this->link = $link->getAttribute("href");
+                               }
+
+                               $articles = $xpath->query("//atom:entry");
+
+                               foreach ($articles as $article) {
+                                       array_push($this->items, new FeedItem_Atom($article, $this->doc, $this->xpath));
+                               }
+
+                               break;
+                       case $this::FEED_RSS:
+
+                               $title = $xpath->query("//channel/title")->item(0);
+
+                               if ($title) {
+                                       $this->title = $title->nodeValue;
+                               }
+
+                               $link = $xpath->query("//channel/link")->item(0);
+
+                               if ($link && $link->hasAttributes()) {
+                                       $this->link = $link->getAttribute("href");
+                               }
+
+                               $articles = $xpath->query("//channel/item");
+
+                               foreach ($articles as $article) {
+                                       array_push($this->items, new FeedItem_RSS($article, $this->doc, $this->xpath));
+                               }
+
+                               break;
+                       case $this::FEED_RDF:
+                               $xpath->registerNamespace('rssfake', 'http://purl.org/rss/1.0/');
+
+                               $title = $xpath->query("//rssfake:channel/rssfake:title")->item(0);
+
+                               if ($title) {
+                                       $this->title = $title->nodeValue;
+                               }
+
+                               $link = $xpath->query("//rssfake:channel/rssfake:link")->item(0);
+
+                               if ($link) {
+                                       $this->link = $link->nodeValue;
+                               }
+
+                               $articles = $xpath->query("//rssfake:item");
+
+                               foreach ($articles as $article) {
+                                       array_push($this->items, new FeedItem_RSS($article, $this->doc, $this->xpath));
+                               }
+
+                               break;
+
+                       }
+               } else {
+                       $this->error = "Unknown/unsupported feed type";
+                       return;
+               }
+       }
+
+       function format_error($error) {
+               if ($error) {
+                       return sprintf("LibXML error %s at line %d (column %d): %s",
+                               $error->code, $error->line, $error->column,
+                               $error->message);
+               } else {
+                       return "";
+               }
+       }
+
+       function error() {
+               return $this->error;
+       }
+
+       function get_link() {
+               return $this->link;
+       }
+
+       function get_title() {
+               return $this->title;
+       }
+
+       function get_items() {
+               return $this->items;
+       }
+
+       function get_links($rel) {
+               $rv = array();
+
+               switch ($this->type) {
+               case $this::FEED_ATOM:
+                       $links = $this->xpath->query("//atom:feed/atom:link");
+
+                       foreach ($links as $link) {
+                               if (!$rel || $link->hasAttribute('rel') && $link->getAttribute('rel') == $rel) {
+                                       array_push($rv, $link->getAttribute('href'));
+                               }
+                       }
+                       break;
+               case $this::FEED_RSS:
+                       $links = $this->xpath->query("//channel/link");
+                       foreach ($links as $link) {
+                               if (!$rel || $link->hasAttribute('rel') && $link->getAttribute('rel') == $rel) {
+                                       array_push($rv, $link->getAttribute('href'));
+                               }
+                       }
+                       break;
+               }
+
+               return $rv;
+       }
+} ?>
index f21bb3ce5ed3ed3db9514391021d8a7df6493046..5ca607c588ce5dc554dfd57589343edc31488de4 100644 (file)
@@ -288,8 +288,6 @@ class Feeds extends Handler_Protected {
                        $expand_cdm = get_pref('CDM_EXPANDED');
 
                        while ($line = $this->dbh->fetch_assoc($result)) {
-                               $class = ($lnum % 2) ? "even" : "odd";
-
                                $id = $line["id"];
                                $feed_id = $line["feed_id"];
                                $label_cache = $line["label_cache"];
@@ -316,6 +314,8 @@ class Feeds extends Handler_Protected {
                                        array_push($topmost_article_ids, $id);
                                }
 
+                               $class = "";
+
                                if (sql_bool_to_bool($line["unread"])) {
                                        $class .= " Unread";
                                        ++$num_unread;
@@ -409,23 +409,6 @@ class Feeds extends Handler_Protected {
                                        if (!isset($rgba_cache[$feed_id])) {
                                                $rgba_cache[$feed_id] = join(",", _color_unpack($fav_color));
                                        }
-
-                                       $rgba = $rgba_cache[$feed_id];
-
-                                       if (sql_bool_to_bool($line["unread"]))
-                                               $endalpha = '0.3';
-                                       else
-                                               $endalpha = '0.1';
-
-                                       // W3C definition seems to work in FF and Chrome
-                                       $row_background = "background-image : linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba($rgba, $endalpha) 100%);";
-
-                                       /* $row_background = "background-image : -moz-linear-gradient(left, rgba(255, 255, 255, 0) 50%, rgba($rgba, 0.2) 100%);".
-                                               "background-image : linear-gradient(to right, rgba(255, 255, 255, 0) 50%, rgba($rgba, 0.2) 100%);";
-                                               "background-image : -webkit-gradient(linear, left top, right top, color-stop(50%, rgba(255,255,255,0)),
-                                                       color-stop(100%, rgba($rgba, 0.2)));"; */
-                               } else {
-                                       $row_background = "";
                                }
 
                                if (!get_pref('COMBINED_DISPLAY_MODE')) {
@@ -451,7 +434,7 @@ class Feeds extends Handler_Protected {
                                        $mouseover_attrs = "onmouseover='postMouseIn(event, $id)'
                                                onmouseout='postMouseOut($id)'";
 
-                                       $reply['content'] .= "<div class='hl $class' id='RROW-$id' $mouseover_attrs style='$row_background'>";
+                                       $reply['content'] .= "<div class='hl $class' id='RROW-$id' $mouseover_attrs>";
 
                                        $reply['content'] .= "<div class='hlLeft'>";
 
@@ -487,14 +470,14 @@ class Feeds extends Handler_Protected {
 
                                        if (!get_pref('VFEED_GROUP_BY_FEED')) {
                                                if (@$line["feed_title"]) {
-                                                       $reply['content'] .= "<div class=\"hlFeed\">
-                                                               <a href=\"#\" onclick=\"viewfeed($feed_id)\">".
-                                                               truncate_string($line["feed_title"],30)."</a>
-                                                       </div>";
+                                                       $rgba = @$rgba_cache[$feed_id];
+
+                                                       $reply['content'] .= "<a class=\"hlFeed\" style=\"background : rgba($rgba, 0.3)\" href=\"#\" onclick=\"viewfeed($feed_id)\">".
+                                                               truncate_string($line["feed_title"],30)."</a>";
                                                }
                                        }
 
-                                       $reply['content'] .= "<span title='$date_entered_fmt'>$updated_fmt</span>
+                                       $reply['content'] .= "<div title='$date_entered_fmt'>$updated_fmt</div>
                                                </span>";
 
                                        $reply['content'] .= "<div class=\"hlRight\">";
@@ -514,8 +497,10 @@ class Feeds extends Handler_Protected {
 
                                } else {
 
-                                       $line["tags"] = get_article_tags($id, $_SESSION["uid"], $line["tag_cache"]);
-                                       unset($line["tag_cache"]);
+                                       if ($line["tag_cache"])
+                                               $tags = explode(",", $line["tag_cache"]);
+                                       else
+                                               $tags = false;
 
                                        $line["content"] = sanitize($line["content_preview"],
                                                        sql_bool_to_bool($line['hide_images']), false, $entry_site_url);
@@ -595,8 +580,11 @@ class Feeds extends Handler_Protected {
 
                                        if (!get_pref('VFEED_GROUP_BY_FEED')) {
                                                if (@$line["feed_title"]) {
+                                                       $rgba = @$rgba_cache[$feed_id];
+
                                                        $reply['content'] .= "<div class=\"hlFeed\">
-                                                               <a href=\"#\" onclick=\"viewfeed($feed_id)\">".
+                                                               <a href=\"#\" style=\"background-color: rgba($rgba,0.3)\"
+                                                               onclick=\"viewfeed($feed_id)\">".
                                                                truncate_string($line["feed_title"],30)."</a>
                                                        </div>";
                                                }
@@ -627,7 +615,6 @@ class Feeds extends Handler_Protected {
                                        }
                                        $reply['content'] .= "</div>";
 
-
                                        $reply['content'] .= "<div class=\"cdmContentInner\">";
 
                        if ($line["orig_feed_id"]) {
@@ -682,7 +669,7 @@ class Feeds extends Handler_Protected {
                                                $reply['content'] .= $p->hook_article_left_button($line);
                                        }
 
-                                       $tags_str = format_tags_string($line["tags"], $id);
+                                       $tags_str = format_tags_string($tags, $id);
 
                                        $reply['content'] .= "<img src='images/tag.png' alt='Tags' title='Tags'>
                                                <span id=\"ATSTR-$id\">$tags_str</span>
@@ -719,7 +706,7 @@ class Feeds extends Handler_Protected {
                                        $reply['content'] .= "</div>";
                                        $reply['content'] .= "</div>";
 
-                                       $reply['content'] .= "</div>";
+                                       $reply['content'] .= "</div><hr/>";
 
                                        $reply['content'] .= "</div>";
 
index d5933a18c01ee0b24ad010e48f1ea9a25e373a9d..7fa74410763a6b3d7438e5eb903cd5ff1683e926 100644 (file)
@@ -382,9 +382,9 @@ class Handler_Public extends Handler {
                header('Content-Type: text/html; charset=utf-8');
                print "<html><head><title>Tiny Tiny RSS</title>";
 
-               print stylesheet_tag("utility.css");
-               print javascript_tag("lib/prototype.js");
-               print javascript_tag("lib/scriptaculous/scriptaculous.js?load=effects,dragdrop,controls");
+               stylesheet_tag("utility.css");
+               javascript_tag("lib/prototype.js");
+               javascript_tag("lib/scriptaculous/scriptaculous.js?load=effects,dragdrop,controls");
                print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>
                        </head><body id='sharepopup'>";
 
@@ -643,6 +643,7 @@ class Handler_Public extends Handler {
                $feed_url = $this->dbh->escape_string(trim($_REQUEST["feed_url"]));
                $cat_id = $this->dbh->escape_string($_REQUEST["cat_id"]);
                $from = $this->dbh->escape_string($_REQUEST["from"]);
+               $feed_urls = array();
 
                /* only read authentication information from POST */
 
@@ -666,8 +667,10 @@ class Handler_Public extends Handler {
                        break;
                case 4:
                        print_notice(__("Multiple feed URLs found."));
-
-                       $feed_urls = get_feeds_from_html($feed_url);
+                       $contents = @fetch_file_contents($url, false, $auth_login, $auth_pass);
+                       if (is_html($contents)) {
+                               $feed_urls = get_feeds_from_html($url, $contents);
+                       }
                        break;
                case 5:
                        print_error(T_sprintf("Could not subscribe to <b>%s</b>.<br>Can't download the Feed URL.", $feed_url));
@@ -732,8 +735,8 @@ class Handler_Public extends Handler {
                header('Content-Type: text/html; charset=utf-8');
                print "<html><head><title>Tiny Tiny RSS</title>";
 
-               print stylesheet_tag("utility.css");
-               print javascript_tag("lib/prototype.js");
+               stylesheet_tag("utility.css");
+               javascript_tag("lib/prototype.js");
 
                print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>
                        </head><body id='forgotpass'>";
index 8e2aefcf167ae3584e08ff52e64e3dfa218551e8..bc5dc96beb5c0ca4cc47e40aa9bbe46d0b1317fe 100644 (file)
@@ -186,7 +186,7 @@ class PluginHost {
                }
        }
 
-       function del_handler($handler, $method) {
+       function del_handler($handler, $method, $sender) {
                $handler = str_replace("-", "_", strtolower($handler));
                $method = strtolower($method);
 
@@ -252,8 +252,6 @@ class PluginHost {
 
        function load_data($force = false) {
                if ($this->owner_uid)  {
-                       $plugin = $this->dbh->escape_string($plugin);
-
                        $result = $this->dbh->query("SELECT name, content FROM ttrss_plugin_storage
                                WHERE owner_uid = '".$this->owner_uid."'");
 
index e3172511151e85fd25f83d57d970da54f6d86a3f..ffe7410fe901295c1d35e4db639ebd09ee6f63e1 100644 (file)
@@ -36,8 +36,7 @@ class Pref_Feeds extends Handler_Protected {
 
                // first one is set by API
                $show_empty_cats = $_REQUEST['force_show_empty'] ||
-                       ($_REQUEST['mode'] != 2 && !$search &&
-                               get_pref('_PREFS_SHOW_EMPTY_CATS'));
+                       ($_REQUEST['mode'] != 2 && !$search);
 
                $items = array();
 
@@ -185,8 +184,7 @@ class Pref_Feeds extends Handler_Protected {
 
                if ($enable_cats) {
                        $show_empty_cats = $_REQUEST['force_show_empty'] ||
-                               ($_REQUEST['mode'] != 2 && !$search &&
-                               get_pref('_PREFS_SHOW_EMPTY_CATS'));
+                               ($_REQUEST['mode'] != 2 && !$search);
 
                        $result = $this->dbh->query("SELECT id, title FROM ttrss_feed_categories
                                WHERE owner_uid = " . $_SESSION["uid"] . " AND parent_cat IS NULL ORDER BY order_id, title");
@@ -305,11 +303,6 @@ class Pref_Feeds extends Handler_Protected {
                return;
        }
 
-       function togglehiddenfeedcats() {
-               set_pref('_PREFS_SHOW_EMPTY_CATS',
-                       (get_pref('_PREFS_SHOW_EMPTY_CATS') ? 'false' : 'true'));
-       }
-
        private function process_category_order(&$data_map, $item_id, $parent_id = false, $nest_level = 0) {
                $debug = isset($_REQUEST["debug"]);
 
@@ -794,7 +787,7 @@ class Pref_Feeds extends Handler_Protected {
 
                print "<input dojoType=\"dijit.form.ValidationTextBox\"
                        disabled=\"1\" style=\"font-size : 16px; width : 20em;\" required=\"1\"
-                       name=\"title\" value=\"$title\">";
+                       name=\"title\" value=\"\">";
 
                $this->batch_edit_cbox("title");
 
@@ -805,7 +798,7 @@ class Pref_Feeds extends Handler_Protected {
                print __('URL:') . " ";
                print "<input dojoType=\"dijit.form.ValidationTextBox\" disabled=\"1\"
                        required=\"1\" regExp='^(http|https)://.*' style=\"width : 20em\"
-                       name=\"feed_url\" value=\"$feed_url\">";
+                       name=\"feed_url\" value=\"\">";
 
                $this->batch_edit_cbox("feed_url");
 
@@ -817,7 +810,7 @@ class Pref_Feeds extends Handler_Protected {
 
                        print __('Place in category:') . " ";
 
-                       print_feed_cat_select("cat_id", $cat_id,
+                       print_feed_cat_select("cat_id", false,
                                'disabled="1" dojoType="dijit.form.Select"');
 
                        $this->batch_edit_cbox("cat_id");
@@ -831,7 +824,7 @@ class Pref_Feeds extends Handler_Protected {
 
                /* Update Interval */
 
-               print_select_hash("update_interval", $update_interval, $update_intervals,
+               print_select_hash("update_interval", "", $update_intervals,
                        'disabled="1" dojoType="dijit.form.Select"');
 
                $this->batch_edit_cbox("update_interval");
@@ -844,7 +837,7 @@ class Pref_Feeds extends Handler_Protected {
 
                        print __('Article purging:') . " ";
 
-                       print_select_hash("purge_interval", $purge_interval, $purge_intervals,
+                       print_select_hash("purge_interval", "", $purge_intervals,
                                'disabled="1" dojoType="dijit.form.Select"');
 
                        $this->batch_edit_cbox("purge_interval");
@@ -856,13 +849,13 @@ class Pref_Feeds extends Handler_Protected {
 
                print "<input dojoType=\"dijit.form.TextBox\"
                        placeHolder=\"".__("Login")."\" disabled=\"1\"
-                       name=\"auth_login\" value=\"$auth_login\">";
+                       name=\"auth_login\" value=\"\">";
 
                $this->batch_edit_cbox("auth_login");
 
                print "<br/><input dojoType=\"dijit.form.TextBox\" type=\"password\" name=\"auth_pass\"
                        placeHolder=\"".__("Password")."\" disabled=\"1\"
-                       value=\"$auth_pass\">";
+                       value=\"\">";
 
                $this->batch_edit_cbox("auth_pass");
 
@@ -1351,9 +1344,6 @@ class Pref_Feeds extends Handler_Protected {
                print $error_button;
                print $inactive_button;
 
-               print "<button onclick=\"toggleHiddenFeedCats()\"
-                       dojoType=\"dijit.form.Button\">".__('(Un)hide empty categories')."</button>";
-
                if (defined('_ENABLE_FEED_DEBUGGING')) {
 
                        print "<select id=\"feedActionChooser\" onchange=\"feedActionChange()\">
@@ -1418,9 +1408,7 @@ class Pref_Feeds extends Handler_Protected {
 
                print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"".__('OPML')."\">";
 
-               print "<p>" . __("Using OPML you can export and import your feeds, filters, labels and Tiny Tiny RSS settings.") . " ";
-
-               print __("Only main settings profile can be migrated using OPML.") . "</p>";
+               print_notice(__("Using OPML you can export and import your feeds, filters, labels and Tiny Tiny RSS settings.") . __("Only main settings profile can be migrated using OPML."));
 
                print "<iframe id=\"upload_iframe\"
                        name=\"upload_iframe\" onload=\"opmlImportComplete(this)\"
@@ -1463,7 +1451,7 @@ class Pref_Feeds extends Handler_Protected {
 
                        print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"".__('Firefox integration')."\">";
 
-                       print "<p>" . __('This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below.') . "</p>";
+                       print_notice(__('This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below.'));
 
                        print "<p>";
 
@@ -1480,26 +1468,30 @@ class Pref_Feeds extends Handler_Protected {
 
                print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"".__('Published & shared articles / Generated feeds')."\">";
 
-               print "<h3>" . __("Published articles and generated feeds") . "</h3>";
-
-               print "<p>".__('Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the URL specified below.')."</p>";
+               print_notice(__('Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the URL specified below.'));
 
                $rss_url = '-2::' . htmlspecialchars(get_self_url_prefix() .
                                "/public.php?op=rss&id=-2&view-mode=all_articles");;
 
+               print "<p>";
+
                print "<button dojoType=\"dijit.form.Button\" onclick=\"return displayDlg('".__("View as RSS")."','generatedFeed', '$rss_url')\">".
                        __('Display URL')."</button> ";
 
                print "<button dojoType=\"dijit.form.Button\" onclick=\"return clearFeedAccessKeys()\">".
                        __('Clear all generated URLs')."</button> ";
 
-               print "<h3>" . __("Articles shared by URL") . "</h3>";
+               print "</p>";
 
-               print "<p>" . __("You can disable all articles shared by unique URLs here.") . "</p>";
+               print_warning(__("You can disable all articles shared by unique URLs here."));
+
+               print "<p>";
 
                print "<button dojoType=\"dijit.form.Button\" onclick=\"return clearArticleAccessKeys()\">".
                        __('Unshare all articles')."</button> ";
 
+               print "</p>";
+
                PluginHost::getInstance()->run_hooks(PluginHost::HOOK_PREFS_TAB_SECTION,
                        "hook_prefs_tab_section", "prefFeedsPublishedGenerated");
 
@@ -1573,7 +1565,7 @@ class Pref_Feeds extends Handler_Protected {
                        GROUP BY ttrss_feeds.title, ttrss_feeds.id, ttrss_feeds.site_url, ttrss_feeds.feed_url
                        ORDER BY last_article");
 
-               print "<h2" .__("These feeds have not been updated with new content for 3 months (oldest first):") . "</h2>";
+               print "<p" .__("These feeds have not been updated with new content for 3 months (oldest first):") . "</p>";
 
                print "<div dojoType=\"dijit.Toolbar\">";
                print "<div dojoType=\"dijit.form.DropDownButton\">".
@@ -1594,7 +1586,6 @@ class Pref_Feeds extends Handler_Protected {
 
                while ($line = $this->dbh->fetch_assoc($result)) {
 
-                       $class = ($lnum % 2) ? "even" : "odd";
                        $feed_id = $line["id"];
                        $this_row_id = "id=\"FUPDD-$feed_id\"";
 
@@ -1639,9 +1630,6 @@ class Pref_Feeds extends Handler_Protected {
        }
 
        function feedsWithErrors() {
-               print "<h2>" . __("These feeds have not been updated because of errors:") .
-                       "</h2>";
-
                $result = $this->dbh->query("SELECT id,title,feed_url,last_error,site_url
                FROM ttrss_feeds WHERE last_error != '' AND owner_uid = ".$_SESSION["uid"]);
 
@@ -1664,7 +1652,6 @@ class Pref_Feeds extends Handler_Protected {
 
                while ($line = $this->dbh->fetch_assoc($result)) {
 
-                       $class = ($lnum % 2) ? "even" : "odd";
                        $feed_id = $line["id"];
                        $this_row_id = "id=\"FERDD-$feed_id\"";
 
index 4dbee5906fa9a2a049dead55071de5588cd560e6..bcc7b5aec424abbbf53a9447dc6fae386dbc3483 100644 (file)
@@ -83,8 +83,6 @@ class Pref_Filters extends Handler_Protected {
                        }
                }
 
-               $feed_title = getFeedTitle($feed);
-
                $qfh_ret = queryFeedHeadlines(-4, 30, "", false, false, false,
                        "date_entered DESC", 0, $_SESSION["uid"], $filter);
 
index 45715488ad12d0042c02ea539e3fca8f05730f6e..425d4b0ac09ab1d1284ef4d244f40106fb8eceeb 100644 (file)
@@ -366,7 +366,7 @@ class Pref_Prefs extends Handler_Protected {
 
                                } else if (function_exists("imagecreatefromstring")) {
 
-                                       print "<p>".__("You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP.") . "</p>";
+                                       print_warning(__("You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP."));
 
                                        print "<p>".__("Scan the following code by the Authenticator application:")."</p>";
 
@@ -705,8 +705,6 @@ class Pref_Prefs extends Handler_Protected {
 
                print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"".__('Plugins')."\">";
 
-               print "<h2>".__("Plugins")."</h2>";
-
                print "<p>" . __("You will need to reload Tiny Tiny RSS for plugin changes to take effect.") . "</p>";
 
                print_notice(__("Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">wiki</a>."));
@@ -747,7 +745,7 @@ class Pref_Prefs extends Handler_Protected {
                $system_enabled = array_map("trim", explode(",", PLUGINS));
                $user_enabled = array_map("trim", explode(",", get_pref("_ENABLED_PLUGINS")));
 
-               $tmppluginhost = new PluginHost(Db::get());
+               $tmppluginhost = new PluginHost();
                $tmppluginhost->load_all($tmppluginhost::KIND_ALL, $_SESSION["uid"]);
                $tmppluginhost->load_data(true);
 
@@ -1041,8 +1039,6 @@ class Pref_Prefs extends Handler_Protected {
 
                while ($line = $this->dbh->fetch_assoc($result)) {
 
-                       $class = ($lnum % 2) ? "even" : "odd";
-
                        $profile_id = $line["id"];
                        $this_row_id = "id=\"FCATR-$profile_id\"";
 
index 4b7d2d69a77afd61e990b52949883e806a1452cb..60059dc8df30353710eba3628244e42b42b202b1 100644 (file)
@@ -69,8 +69,6 @@ class Pref_Users extends Handler_Protected {
 
                        print "<ul class=\"userFeedList\">";
 
-                       $row_class = "odd";
-
                        while ($line = $this->dbh->fetch_assoc($result)) {
 
                                $icon_file = ICONS_URL."/".$line["id"].".ico";
@@ -81,9 +79,7 @@ class Pref_Users extends Handler_Protected {
                                        $feed_icon = "<img class=\"tinyFeedIcon\" src=\"images/blank_icon.gif\">";
                                }
 
-                               print "<li class=\"$row_class\">$feed_icon&nbsp;<a href=\"".$line["site_url"]."\">".$line["title"]."</a></li>";
-
-                               $row_class = $row_class == "even" ? "odd" : "even";
+                               print "<li>$feed_icon&nbsp;<a href=\"".$line["site_url"]."\">".$line["title"]."</a></li>";
 
                        }
 
@@ -252,9 +248,9 @@ class Pref_Users extends Handler_Protected {
                        }
                }
 
-               static function resetUserPassword($link, $uid, $show_password) {
+               static function resetUserPassword($uid, $show_password) {
 
-                       $result = db_query($link, "SELECT login,email
+                       $result = db_query("SELECT login,email
                                FROM ttrss_users WHERE id = '$uid'");
 
                        $login = db_fetch_result($result, 0, "login");
@@ -266,7 +262,7 @@ class Pref_Users extends Handler_Protected {
 
                        $pwd_hash = encrypt_password($tmp_user_pwd, $new_salt, true);
 
-                       db_query($link, "UPDATE ttrss_users SET pwd_hash = '$pwd_hash', salt = '$new_salt'
+                       db_query("UPDATE ttrss_users SET pwd_hash = '$pwd_hash', salt = '$new_salt'
                                WHERE id = '$uid'");
 
                        if ($show_password) {
@@ -408,8 +404,6 @@ class Pref_Users extends Handler_Protected {
 
                        while ($line = $this->dbh->fetch_assoc($result)) {
 
-                               $class = ($lnum % 2) ? "even" : "odd";
-
                                $uid = $line["id"];
 
                                print "<tr id=\"UMRR-$uid\">";
index 2b07bbf9117255942899f384515cfb85b3c1772e..46583feb58469d333e6b97489eeebe6920575d58 100644 (file)
@@ -291,7 +291,7 @@ class RPC extends Handler_Protected {
 
                $reply = array();
 
-               if ($seq) $reply['seq'] = $seq;
+               if (!empty($_REQUEST['seq'])) $reply['seq'] = (int) $_REQUEST['seq'];
 
                if ($last_article_id != getLastArticleId()) {
                        $reply['counters'] = getAllCounters();
@@ -464,7 +464,7 @@ class RPC extends Handler_Protected {
                        $id = 0;
                }
 
-               print_feed_cat_select("cat_id", $id);
+               print_feed_cat_select("cat_id", $id, '');
        }
 
        // Silent
diff --git a/classes/sanitizedummy.php b/classes/sanitizedummy.php
deleted file mode 100644 (file)
index 7182fb7..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?php
-class SanitizeDummy extends SimplePie_Sanitize {
-       function sanitize($data, $type, $base = '') {
-               return $data;
-       }
-}
-?>
index fd7f969aa701cc73caeccb65c42711aef7096da2..1e8d077231f2f2e192fc95d637e1c6619d9e1269 100644 (file)
@@ -28,7 +28,7 @@ class ttrssMailer extends PHPMailer {
                        $this->Host = $pair[0];\r
                        $this->Port = $pair[1];\r
 \r
-                       if (!$Port) $Port = 25;\r
+                       if (!$this->Port) $this->Port = 25;\r
                } else {\r
                        $this->Host = '';\r
                        $this->Port = '';\r
index 7cf1a6af0a71241e6e66cca2de2d82da09a5621d..41bf7b819f023ab9f1471165cada6c31def37cd0 100644 (file)
@@ -237,16 +237,16 @@ function rgb2hsl($arr) {
    } else {
       $s = $del_Max / $var_Max;
 
-      $del_R = ((($max - $var_R ) / 6 ) + ($del_Max / 2 ) ) / $del_Max;
-      $del_G = ((($max - $var_G ) / 6 ) + ($del_Max / 2 ) ) / $del_Max;
-      $del_B = ((($max - $var_B ) / 6 ) + ($del_Max / 2 ) ) / $del_Max;
+      $del_R = ((($var_Max - $var_R ) / 6 ) + ($del_Max / 2 ) ) / $del_Max;
+      $del_G = ((($var_Max - $var_G ) / 6 ) + ($del_Max / 2 ) ) / $del_Max;
+      $del_B = ((($var_Max - $var_B ) / 6 ) + ($del_Max / 2 ) ) / $del_Max;
 
       if      ($var_R == $var_Max) $h = $del_B - $del_G;
       else if ($var_G == $var_Max) $h = (1 / 3 ) + $del_R - $del_B;
       else if ($var_B == $var_Max) $h = (2 / 3 ) + $del_G - $del_R;
 
-      if ($H < 0) $h++;
-      if ($H > 1) $h--;
+      if ($h < 0) $h++;
+      if ($h > 1) $h--;
    }
 
    return array($h, $s, $v);
index 9acef23575c624acbc21f06ef62fcc607db42582..52431c2de41004ade39892b2289a9b28bd3e6861 100644 (file)
@@ -6,7 +6,8 @@ function ttrss_error_handler($errno, $errstr, $file, $line, $context) {
 
        $file = substr(str_replace(dirname(dirname(__FILE__)), "", $file), 1);
 
-       return Logger::get()->log_error($errno, $errstr, $file, $line, $context);
+       if (class_exists("Logger"))
+               return Logger::get()->log_error($errno, $errstr, $file, $line, $context);
 }
 
 function ttrss_fatal_handler() {
@@ -26,7 +27,8 @@ function ttrss_fatal_handler() {
 
                $file = substr(str_replace(dirname(dirname(__FILE__)), "", $file), 1);
 
-               return Logger::get()->log_error($errno, $errstr, $file, $line, $context);
+               if (class_exists("Logger"))
+                       return Logger::get()->log_error($errno, $errstr, $file, $line, $context);
        }
 
        return false;
index c39b4938c4d1d1cc42e7b3ca144001bf77e54f80..48bb39d287fc7be3aa4280c3993a9abfea70717b 100644 (file)
 
                $data = array_merge($data, getVirtCounters());
                $data = array_merge($data, getLabelCounters());
-               $data = array_merge($data, getFeedCounters($active_feed));
+               $data = array_merge($data, getFeedCounters());
                $data = array_merge($data, getCategoryCounters());
 
                return $data;
 
                        return $unread;
                } else if ($cat == -1) {
-                       return getFeedUnread(-1) + getFeedUnread($link, -2) + getFeedUnread($link, -3) + getFeedUnread($link, 0);
+                       return getFeedUnread(-1) + getFeedUnread(-2) + getFeedUnread(-3) + getFeedUnread(0);
                } else if ($cat == -2) {
 
                        $result = db_query("
                        }
 
                        if (!$root_id) {
-                               $is_selected = ($default_id == "CAT:0") ? "selected=\"1\"" : "";
+                               $default_is_cat = ($default_id == "CAT:0");
+                               $is_selected = $default_is_cat ? "selected=\"1\"" : "";
 
                                printf("<option $is_selected value='CAT:0'>%s</option>",
                                        __("Uncategorized"));
                        if ($version_data) {
                                $version_data = json_decode($version_data, true);
                                if ($version_data && $version_data['version']) {
-
-                                       if (version_compare(VERSION, $version_data['version']) == -1) {
+                                       if (version_compare(VERSION_STATIC, $version_data['version']) == -1) {
                                                return $version_data;
                                        }
                                }
                        ttrss_tags WHERE post_int_id = (SELECT int_id FROM ttrss_user_entries WHERE
                        ref_id = '$a_id' AND owner_uid = '$owner_uid' LIMIT 1) ORDER BY tag_name";
 
-               $obj_id = md5("TAGS:$owner_uid:$id");
                $tags = array();
 
                /* check cache first */
 
        function print_checkpoint($n, $s) {
                $ts = microtime(true);
-               echo sprintf("<!-- CP[$n] %.4f seconds -->", $ts - $s);
+               echo sprintf("<!-- CP[$n] %.4f seconds -->\n", $ts - $s);
                return $ts;
        }
 
        }
 
        function format_tags_string($tags, $id) {
+               if (!is_array($tags) || count($tags) == 0) {
+                       return __("no tags");
+               } else {
+                       $maxtags = min(5, count($tags));
 
-               $tags_str = "";
-               $tags_nolinks_str = "";
-
-               $num_tags = 0;
-
-               $tag_limit = 6;
-
-               $formatted_tags = array();
-
-               foreach ($tags as $tag) {
-                       $num_tags++;
-                       $tag_escaped = str_replace("'", "\\'", $tag);
-
-                       if (mb_strlen($tag) > 30) {
-                               $tag = truncate_string($tag, 30);
-                       }
-
-                       $tag_str = "<a href=\"javascript:viewfeed('$tag_escaped')\">$tag</a>";
-
-                       array_push($formatted_tags, $tag_str);
-
-                       $tmp_tags_str = implode(", ", $formatted_tags);
-
-                       if ($num_tags == $tag_limit || mb_strlen($tmp_tags_str) > 150) {
-                               break;
+                       for ($i = 0; $i < $maxtags; $i++) {
+                               $tags_str .= "<a class=\"tag\" href=\"#\" onclick=\"viewfeed('".$tags[$i]."'\")>" . $tags[$i] . "</a>, ";
                        }
-               }
 
-               $tags_str = implode(", ", $formatted_tags);
+                       $tags_str = mb_substr($tags_str, 0, mb_strlen($tags_str)-2);
 
-               if ($num_tags < count($tags)) {
-                       $tags_str .= ", &hellip;";
-               }
+                       if (count($tags) > $maxtags)
+                               $tags_str .= ", &hellip;";
 
-               if ($num_tags == 0) {
-                       $tags_str = __("no tags");
+                       return $tags_str;
                }
-
-               return $tags_str;
-
        }
 
        function format_article_labels($labels, $id) {
                                preg_match("/(Location:|URI:)[^(\n)]*/", $header, $matches);
                                $url = trim(str_replace($matches[1],"",$matches[0]));
                                $url_parsed = parse_url($url);
-                               return (isset($url_parsed))? geturl($url, $referer):'';
+                               return (isset($url_parsed))? geturl($url):'';
                        }
                        $oline='';
                        foreach($status as $key=>$eline){$oline.='['.$key.']'.$eline.' ';}
index a5d3898ce12dc605d56ee8bf8d9cd61d9bb038c6..612c914c034b2f6cc75498c3f334b7cb9fccb059 100644 (file)
 
                        // since we have the data cached, we can deal with other feeds with the same url
 
-                       $tmp_result = db_query("SELECT DISTINCT ttrss_feeds.id,last_updated
+                       $tmp_result = db_query("SELECT DISTINCT ttrss_feeds.id,last_updated,ttrss_feeds.owner_uid
                        FROM ttrss_feeds, ttrss_users, ttrss_user_prefs WHERE
                                ttrss_user_prefs.owner_uid = ttrss_feeds.owner_uid AND
                                ttrss_users.id = ttrss_user_prefs.owner_uid AND
 
                        if (db_num_rows($tmp_result) > 0) {
                                while ($tline = db_fetch_assoc($tmp_result)) {
-                                       if($debug) _debug(" => " . $tline["last_updated"] . ", " . $tline["id"]);
+                                       if($debug) _debug(" => " . $tline["last_updated"] . ", " . $tline["id"] . " " . $tline["owner_uid"]);
                                        update_rss_feed($tline["id"], true);
                                        ++$nf;
                                }
        function update_rss_feed($feed, $ignore_daemon = false, $no_cache = false,
                $override_url = false) {
 
-               require_once "lib/simplepie/simplepie.inc";
-
                $debug_enabled = defined('DAEMON_EXTENDED_DEBUG') || $_REQUEST['xdebug'];
 
                _debug("start", $debug_enabled);
 
                $last_updated = db_fetch_result($result, 0, "last_updated");
                $last_article_timestamp = @strtotime(db_fetch_result($result, 0, "last_article_timestamp"));
+
+               if (defined('_DISABLE_HTTP_304'))
+                       $last_article_timestamp = 0;
+
                $owner_uid = db_fetch_result($result, 0, "owner_uid");
                $mark_unread_on_update = sql_bool_to_bool(db_fetch_result($result,
                        0, "mark_unread_on_update"));
 
                $date_feed_processed = date('Y-m-d H:i');
 
-               $cache_filename = CACHE_DIR . "/simplepie/" . sha1($fetch_url) . ".feed";
-
-               // Ignore cache if new feed or manual update.
-               $cache_age = ($no_cache || is_null($last_updated) || strpos($last_updated, '1970-01-01') === 0) ? 30 : get_feed_update_interval($feed) * 60;
-
-               _debug("cache filename: $cache_filename exists: " . file_exists($cache_filename), $debug_enabled);
-               _debug("cache age: $cache_age; no cache: $no_cache", $debug_enabled);
-
-               $cached_feed_data_hash = false;
+               $cache_filename = CACHE_DIR . "/simplepie/" . sha1($fetch_url) . ".xml";
 
                $rss = false;
                $rss_hash = false;
                if (file_exists($cache_filename) &&
                        is_readable($cache_filename) &&
                        !$auth_login && !$auth_pass &&
-                       filemtime($cache_filename) > time() - $cache_age) {
+                       filemtime($cache_filename) > time() - 30) {
 
-                               _debug("using local cache.", $debug_enabled);
+                       _debug("using local cache.", $debug_enabled);
 
-                               if ($cache_timestamp > $last_article_timestamp) {
-                                       @$rss_data = file_get_contents($cache_filename);
+                       @$feed_data = file_get_contents($cache_filename);
+
+                       if ($feed_data) {
+                               $rss_hash = sha1($feed_data);
+                       }
 
-                                       if ($rss_data) {
-                                               $rss_hash = sha1($rss_data);
-                                               @$rss = unserialize($rss_data);
-                                       }
-                               } else if (!$force_refetch) {
-                                       _debug("local cache valid and older than last_updated, nothing to do.", $debug_enabled);
-                                       return;
-                               }
                } else {
                        _debug("local cache will not be used for this feed", $debug_enabled);
                }
                }
 
                $pluginhost = new PluginHost();
-               $pluginhost->set_debug($debug_enabled, $debug_enabled);
+               $pluginhost->set_debug($debug_enabled);
                $user_plugins = get_pref("_ENABLED_PLUGINS", $owner_uid);
 
                $pluginhost->load(PLUGINS, PluginHost::KIND_ALL);
                        $feed_data = $plugin->hook_feed_fetched($feed_data);
                }
 
+               // set last update to now so if anything *simplepie* crashes later we won't be
+               // continuously failing on the same feed
+               //db_query("UPDATE ttrss_feeds SET last_updated = NOW() WHERE id = '$feed'");
+
                if (!$rss) {
-                       $rss = new SimplePie();
-                       $rss->set_sanitize_class("SanitizeDummy");
-                       // simplepie ignores the above and creates default sanitizer anyway,
-                       // so let's override it...
-                       $rss->sanitize = new SanitizeDummy();
-                       $rss->set_output_encoding('UTF-8');
-                       $rss->set_raw_data($feed_data);
-                       $rss->enable_cache(false);
-
-                       @$rss->init();
+                       $rss = new FeedParser($feed_data);
+                       $rss->init();
                }
 
 //             print_r($rss);
 
                        // cache data for later
                        if (!$auth_pass && !$auth_login && is_writable(CACHE_DIR . "/simplepie")) {
-                               $rss_data = serialize($rss);
                                $new_rss_hash = sha1($rss_data);
 
-                               if ($new_rss_hash != $rss_hash) {
+                               if ($new_rss_hash != $rss_hash && count($rss->get_items()) > 0 ) {
                                        _debug("saving $cache_filename", $debug_enabled);
-                                       @file_put_contents($cache_filename, serialize($rss));
+                                       @file_put_contents($cache_filename, $feed_data);
                                }
                        }
 
 
                        $site_url = db_escape_string(mb_substr(rewrite_relative_url($fetch_url, $rss->get_link()), 0, 245));
 
+                       _debug("site_url: $site_url", $debug_enabled);
+                       _debug("feed_title: " . $rss->get_title(), $debug_enabled);
+
                        if ($favicon_needs_check || $force_refetch) {
 
                                /* terrible hack: if we crash on floicon shit here, we won't check
 
                                _debug("checking favicon...", $debug_enabled);
 
-                               check_feed_favicon($site_url, $feed, $link);
+                               check_feed_favicon($site_url, $feed);
                                $favicon_modified_new = @filemtime($favicon_file);
 
                                if ($favicon_modified_new > $favicon_modified)
 
                                $feed_title = db_escape_string($rss->get_title());
 
-                               _debug("registering title: $feed_title", $debug_enabled);
+                               if ($feed_title) {
+                                       _debug("registering title: $feed_title", $debug_enabled);
 
-                               db_query("UPDATE ttrss_feeds SET
-                                       title = '$feed_title' WHERE id = '$feed'");
+                                       db_query("UPDATE ttrss_feeds SET
+                                               title = '$feed_title' WHERE id = '$feed'");
+                               }
                        }
 
                        if ($site_url && $orig_site_url != $site_url) {
                                if (!$entry_guid) $entry_guid = $item->get_link();
                                if (!$entry_guid) $entry_guid = make_guid_from_title($item->get_title());
 
+                               _debug("f_guid $entry_guid", $debug_enabled);
+
                                if (!$entry_guid) continue;
 
                                $entry_guid = "$owner_uid,$entry_guid";
 
                                $entry_timestamp = "";
 
-                               $entry_timestamp = strtotime($item->get_date());
+                               $entry_timestamp = $item->get_date();
+
+                               _debug("orig date: " . $item->get_date(), $debug_enabled);
 
                                if ($entry_timestamp == -1 || !$entry_timestamp || $entry_timestamp > time()) {
                                        $entry_timestamp = time();
 
                                _debug("date $entry_timestamp [$entry_timestamp_fmt]", $debug_enabled);
 
-                               $entry_title = html_entity_decode($item->get_title(), ENT_COMPAT, 'UTF-8');
-                               $entry_title = decode_numeric_entities($entry_title);
+//                             $entry_title = html_entity_decode($item->get_title(), ENT_COMPAT, 'UTF-8');
+//                             $entry_title = decode_numeric_entities($entry_title);
+                               $entry_title = $item->get_title();
 
                                $entry_link = rewrite_relative_url($site_url, $item->get_link());
 
                                        print "\n";
                                }
 
-                               $entry_comments = $item->data["comments"];
-
-                               if ($item->get_author()) {
-                                       $entry_author_item = $item->get_author();
-                                       $entry_author = $entry_author_item->get_name();
-                                       if (!$entry_author) $entry_author = $entry_author_item->get_email();
-                               }
+                               $entry_comments = $item->get_comments_url();
+                               $entry_author = $item->get_author();
 
                                $entry_guid = db_escape_string(mb_substr($entry_guid, 0, 245));
 
                                $entry_comments = db_escape_string(mb_substr(trim($entry_comments), 0, 245));
                                $entry_author = db_escape_string(mb_substr(trim($entry_author), 0, 245));
 
-                               $num_comments = $item->get_item_tags('http://purl.org/rss/1.0/modules/slash/', 'comments');
-
-                               if (is_array($num_comments) && is_array($num_comments[0])) {
-                                       $num_comments = (int) $num_comments[0]["data"];
-                               } else {
-                                       $num_comments = 0;
-                               }
+                               $num_comments = (int) $item->get_comments_count();
 
                                _debug("author $entry_author", $debug_enabled);
                                _debug("num_comments: $num_comments", $debug_enabled);
-                               _debug("looking for tags [1]...", $debug_enabled);
+                               _debug("looking for tags...", $debug_enabled);
 
                                // parse <category> entries into tags
 
 
                                if (is_array($additional_tags_src)) {
                                        foreach ($additional_tags_src as $tobj) {
-                                               array_push($additional_tags, $tobj->get_term());
+                                               array_push($additional_tags, $tobj);
                                        }
                                }
 
-                               _debug("category tags:", $debug_enabled);
-                               _debug("looking for tags [2]...", $debug_enabled);
-
                                $entry_tags = array_unique($additional_tags);
 
                                for ($i = 0; $i < count($entry_tags); $i++)
                                        $entry_tags[$i] = mb_strtolower($entry_tags[$i], 'utf-8');
 
+                               _debug("tags found: " . join(",", $entry_tags), $debug_enabled);
+
                                _debug("done collecting data.", $debug_enabled);
 
                                // TODO: less memory-hungry implementation
 
                _debug("Cleaned $rc cached tags.");
        }
-
-       function utf8_entity_decode($entity){
-               $convmap = array(0x0, 0x10000, 0, 0xfffff);
-               return mb_decode_numericentity($entity, $convmap, 'UTF-8');
-       }
-
-       function decode_numeric_entities($body) {
-               $body = preg_replace('/&#\d{2,5};/ue', "utf8_entity_decode('$0')", $body );
-               $body = preg_replace('/&#x([a-fA-F0-7]{2,8});/ue', "utf8_entity_decode('&#'.hexdec('$1').';')", $body );
-               return $body;
-       }
 ?>
index 0e583f9ecbf3f025d20f8c5d7789e5d032945925..7396f81e07130c4174efc2a7dcdd6ffcf7467e4d 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-       define('VERSION_STATIC', '1.7.8');
+       define('VERSION_STATIC', '1.7.9');
 
        function get_version() {
                date_default_timezone_set('UTC');
index 6a34be5e8022e7bfd9c0bd7d88277824d053dcce..29b8b173d6c08d02af21ef0d9746a4508be5a40b 100644 (file)
--- a/index.php
+++ b/index.php
 <head>
        <title>Tiny Tiny RSS</title>
 
-       <?php echo stylesheet_tag("lib/dijit/themes/claro/claro.css"); ?>
-       <?php echo stylesheet_tag("tt-rss.css"); ?>
-       <?php echo stylesheet_tag("cdm.css"); ?>
+       <?php stylesheet_tag("lib/dijit/themes/claro/claro.css"); ?>
+       <?php stylesheet_tag("tt-rss.css"); ?>
+       <?php stylesheet_tag("cdm.css"); ?>
 
        <?php if ($_SESSION["uid"]) {
                $theme = get_pref( "USER_CSS_THEME", $_SESSION["uid"], false);
                if ($theme) {
-                       echo stylesheet_tag("themes/$theme");
+                       stylesheet_tag("themes/$theme");
                }
        }
        ?>
@@ -91,7 +91,7 @@
                                "lib/dojo/tt-rss-layer.js",
                                "errors.php?mode=js") as $jsfile) {
 
-               echo javascript_tag($jsfile);
+               javascript_tag($jsfile);
 
        } ?>
 
index cd017f99535d73f4790629defd3deca0a3902592..6cb2ace4f370c8b5e0788354c5fd9a66b5e04893 100644 (file)
@@ -89,7 +89,7 @@
                        <span><img src=\"../images/sign_info.svg\"></span><span>$msg</span></div>";
        }
 
-       function db_connect($host, $user, $pass, $db, $type, $port) {
+       function db_connect($host, $user, $pass, $db, $type, $port = false) {
                if ($type == "pgsql") {
 
                        $string = "dbname=$db user=$user";
index fbddb708f34cae5b606f6affa5093cd306f4ea49..d80f4606204148f9cbfb0b5ee1aecf8dcf68c478 100644 (file)
@@ -184,10 +184,51 @@ dojo.declare("fox.FeedTree", dijit.Tree, {
                        tnode._menu = menu;
                }
 
+               ctr = dojo.doc.createElement('span');
+               ctr.className = 'counterNode';
+               ctr.innerHTML = args.item.unread;
+
+               //args.item.unread > 0 ? ctr.addClassName("unread") : ctr.removeClassName("unread");
+
+               args.item.unread > 0 ? Element.show(ctr) : Element.hide(ctr);
+
+               dojo.place(ctr, tnode.rowNode, 'first');
+               tnode.counterNode = ctr;
 
                //tnode.labelNode.innerHTML = args.label;
                return tnode;
        },
+       postCreate: function() {
+               this.connect(this.model, "onChange", "updateCounter");
+
+               this.inherited(arguments);
+       },
+       updateCounter: function (item) {
+               var tree = this;
+
+               //console.log("updateCounter: " + item.id[0] + " " + item.unread + " " + tree);
+
+               var node = tree._itemNodesMap[item.id];
+
+               if (node) {
+                       node = node[0];
+
+                       if (node.counterNode) {
+                               ctr = node.counterNode;
+                               ctr.innerHTML = item.unread;
+                               item.unread > 0 ? Effect.Appear(ctr, {duration : 0.3,
+                                       queue: { position: 'end', scope: 'CAPPEAR-' + item.id, limit: 1 }}) :
+                                               Element.hide(ctr);
+                       }
+               }
+
+       },
+       getTooltip: function (item) {
+               if (item.updated)
+                       return item.updated;
+               else
+                       return "";
+       },
        getIconClass: function (item, opened) {
                return (!item || this.model.mayHaveChildren(item)) ? (opened ? "dijitFolderOpened" : "dijitFolderClosed") : "feedIcon";
        },
@@ -195,8 +236,12 @@ dojo.declare("fox.FeedTree", dijit.Tree, {
                return (item.unread == 0) ? "dijitTreeLabel" : "dijitTreeLabel Unread";
        },
        getRowClass: function (item, opened) {
-               return (!item.error || item.error == '') ? "dijitTreeRow" :
+               var rc = (!item.error || item.error == '') ? "dijitTreeRow" :
                        "dijitTreeRow Error";
+
+               if (item.unread > 0) rc += " Unread";
+
+               return rc;
        },
        getLabel: function(item) {
                var name = String(item.name);
@@ -208,15 +253,15 @@ dojo.declare("fox.FeedTree", dijit.Tree, {
                name = name.replace(/&lt;/g, "<");
                name = name.replace(/&gt;/g, ">");
 
-               var label;
+               /* var label;
 
                if (item.unread > 0) {
                        label = name + " (" + item.unread + ")";
                } else {
                        label = name;
-               }
+               } */
 
-               return label;
+               return name;
        },
        expandParentNodes: function(feed, is_cat, list) {
                try {
@@ -307,11 +352,9 @@ dojo.declare("fox.FeedTree", dijit.Tree, {
 
                if (treeNode) {
                        treeNode = treeNode[0];
-                       if (is_cat) {
-                               if (treeNode.loadingNode) {
-                                       treeNode.loadingNode.src = src;
-                                       return true;
-                               }
+                       if (treeNode.loadingNode) {
+                               treeNode.loadingNode.src = src;
+                               return true;
                        } else {
                                treeNode.expandoNode.src = src;
                                return true;
index 2c1acc310be97cbca71c0d0df5dc739c4e24f8db..932297be8db2c37876d6d577d4fc3b84334c54d1 100644 (file)
@@ -151,6 +151,8 @@ function feedlist_init() {
        try {
                console.log("in feedlist init");
 
+               loading_set_progress(50);
+
                document.onkeydown = hotkey_handler;
                setTimeout("hotkey_prefix_timeout()", 5*1000);
 
index 4346054ef68e3c3374cf36f16f8ac526acc368e8..e226459fc24fa0386b479ea53e20b464256b6560 100644 (file)
@@ -1610,21 +1610,6 @@ function resetCatOrder() {
        }
 }
 
-function toggleHiddenFeedCats() {
-       try {
-               notify_progress("Loading, please wait...");
-
-               new Ajax.Request("backend.php", {
-                       parameters: "?op=pref-feeds&method=togglehiddenfeedcats",
-                       onComplete: function(transport) {
-                               updateFeedList();
-                       } });
-
-       } catch (e) {
-               exception_error("toggleHiddenFeedCats");
-       }
-}
-
 function editCat(id, item, event) {
        try {
                var new_name = prompt(__('Rename category to:'), item.name);
index c6c0c13dd445177c7a6219992c3736e5f52e04a8..e3731c0cbf11c84883f4d5dab52314711e533d65 100644 (file)
@@ -116,6 +116,7 @@ function updateFeedList() {
 
                tree.startup();
 
+
        } catch (e) {
                exception_error("updateFeedList", e);
        }
@@ -249,7 +250,7 @@ function init() {
                if (!genericSanityCheck())
                        return false;
 
-               loading_set_progress(20);
+               loading_set_progress(30);
 
                var a = document.createElement('audio');
 
@@ -547,11 +548,37 @@ function init_second_stage() {
                        closeArticlePanel();
 
                        _widescreen_mode = getInitParam("widescreen");
+                       switchPanelMode(_widescreen_mode);
 
-                       if (_widescreen_mode) {
-                               switchPanelMode(_widescreen_mode);
+                       if (parseInt(getCookie("ttrss_fh_width")) > 0) {
+                               dijit.byId("feeds-holder").domNode.setStyle(
+                                       {width: getCookie("ttrss_fh_width") + "px" });
                        }
 
+                       if (parseInt(getCookie("ttrss_ci_width")) > 0) {
+                               if (_widescreen_mode) {
+                                       dijit.byId("content-insert").domNode.setStyle(
+                                               {width: getCookie("ttrss_ci_width") + "px" });
+
+                               } else {
+                                       dijit.byId("content-insert").domNode.setStyle(
+                                               {height: getCookie("ttrss_ci_height") + "px" });
+                               }
+                       }
+
+                       dijit.byId("main").resize();
+
+                       var tmph = dojo.connect(dijit.byId('feeds-holder'), 'resize',
+                               function (args) {
+                                       setCookie("ttrss_fh_width", args.w, getInitParam("cookie_lifetime"));
+                       });
+
+                       var tmph = dojo.connect(dijit.byId('content-insert'), 'resize',
+                               function (args) {
+                                       setCookie("ttrss_ci_width", args.w, getInitParam("cookie_lifetime"));
+                                       setCookie("ttrss_ci_height", args.h, getInitParam("cookie_lifetime"));
+                       });
+
                });
 
                delCookie("ttrss_test");
@@ -573,7 +600,7 @@ function init_second_stage() {
                        setActiveFeedId(hash_feed_id, hash_feed_is_cat);
                }
 
-               loading_set_progress(30);
+               loading_set_progress(50);
 
                // can't use cache_clear() here because viewfeed might not have initialized yet
                if ('sessionStorage' in window && window['sessionStorage'] !== null)
@@ -1033,6 +1060,7 @@ function switchPanelMode(wide) {
                                borderTopWidth: '0px' });
 
                        $("headlines-toolbar").setStyle({ borderBottomWidth: '0px' });
+                       $("headlines-frame").setStyle({ borderBottomWidth: '0px' });
 
                } else {
 
@@ -1044,6 +1072,8 @@ function switchPanelMode(wide) {
                                borderTopWidth: '1px'});
 
                        $("headlines-toolbar").setStyle({ borderBottomWidth: '1px' });
+
+                       $("headlines-frame").setStyle({ borderBottomWidth: '1px' });
                }
 
                closeArticlePanel();
index ada225cbff79db627d9d0d64a7c2b33de4f5680b..da3628349bb0ccc8945c6d2dcd83f6df7665bd1a 100644 (file)
@@ -20,8 +20,6 @@ function headlines_callback2(transport, offset, background, infscroll_req) {
        try {
                handle_rpc_json(transport);
 
-               loading_set_progress(25);
-
                console.log("headlines_callback2 [offset=" + offset + "] B:" + background + " I:" + infscroll_req);
 
                var is_cat = false;
@@ -136,8 +134,6 @@ function headlines_callback2(transport, offset, background, infscroll_req) {
 
                                        if (!hsp) hsp = new Element("DIV", {"id": "headlines-spacer"});
 
-                                       fixHeadlinesOrder(getLoadedArticleIds());
-
                                        if (getInitParam("cdm_auto_catchup") == 1) {
                                                c.domNode.appendChild(hsp);
                                        }
@@ -1418,6 +1414,8 @@ function cdmCollapseArticle(event, id, unmark) {
                                if (id == getActiveArticleId()) {
                                        setActiveArticleId(0);
                                }
+
+                               updateSelectedPrompt();
                        }
 
                        if (event) Event.stop(event);
@@ -1498,26 +1496,6 @@ function cdmExpandArticle(id, noexpand) {
        return false;
 }
 
-function fixHeadlinesOrder(ids) {
-       try {
-               for (var i = 0; i < ids.length; i++) {
-                       var e = $("RROW-" + ids[i]);
-
-                       if (e) {
-                               if (i % 2 == 0) {
-                                       e.removeClassName("even");
-                                       e.addClassName("odd");
-                               } else {
-                                       e.removeClassName("odd");
-                                       e.addClassName("even");
-                               }
-                       }
-               }
-       } catch (e) {
-               exception_error("fixHeadlinesOrder", e);
-       }
-}
-
 function getArticleUnderPointer() {
        return post_under_pointer;
 }
@@ -1598,7 +1576,6 @@ function dismissSelectedArticles() {
                if (sel.length > 0)
                        selectionToggleUnread(false);
 
-               fixHeadlinesOrder(tmp);
 
        } catch (e) {
                exception_error("dismissSelectedArticles", e);
@@ -1623,8 +1600,6 @@ function dismissReadArticles() {
                        }
                }
 
-               fixHeadlinesOrder(tmp);
-
        } catch (e) {
                exception_error("dismissSelectedArticles", e);
        }
index 69281cb5ee9e9841875e4104073c71ffd56b207b..a139473f95f955f6f8e215555fbc684b768db7ff 100644 (file)
@@ -336,7 +336,7 @@ function processBeginBlockCmd ($parms, $cmdTPosBegin, $cmdTPosEnd) {
    $this->openBlocksTab[$this->currentNestingLevel] = $blockNo;\r
    $this->currentNestingLevel += 1;\r
    if ($this->currentNestingLevel > $this->maxNestingLevel) {\r
-      $trhis->triggerError ("Block nesting overflow in template at offset $cmdTPosBegin.");\r
+      $this->triggerError ("Block nesting overflow in template at offset $cmdTPosBegin.");\r
       return false; }\r
    return true; }\r
 \r
@@ -844,7 +844,7 @@ function readFileIntoString ($fileName, &$s) {
    $fh = fopen($fileName,"rb");\r
    if ($fh === false) return false;\r
    $fileSize = filesize($fileName);\r
-   if ($fileSize === false) {close ($fh); return false; }\r
+   if ($fileSize === false) {fclose ($fh); return false; }\r
    $s = fread($fh,$fileSize);\r
    fclose ($fh);\r
    if (strlen($s) != $fileSize) return false;\r
index 7995460b521583966c0a4811cb1e5b62033d35c3..9001e3a2e19ebfbcd14e7048c1a07a2c5afb2b72 100644 (file)
@@ -1101,7 +1101,7 @@ if (!class_exists('QRcode', false)) {
                 protected function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly=false) {
                        $b = 0;
                        $bitMask = array();
-                       $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d);
+                       $bitMask = $this->generateMaskNo($maskNo, $width, $s);
                        if ($maskGenOnly) {
                                return;
                        }
@@ -1399,7 +1399,7 @@ if (!class_exists('QRcode', false)) {
                                $p += 2;
                        }
                        $this->items = $this->appendNewInputItem($this->items, QR_MODE_KJ, $p, str_split($this->dataStr));
-                       return $run;
+                       return $p;
                }
 
                /**
@@ -1470,7 +1470,7 @@ if (!class_exists('QRcode', false)) {
                                                break;
                                        }
                                        case QR_MODE_KJ: {
-                                               if ($hint == QR_MODE_KJ) {
+                                               if ($this->hint == QR_MODE_KJ) {
                                                        $length = $this->eatKanji();
                                                } else {
                                                        $length = $this->eat8();
@@ -1499,7 +1499,7 @@ if (!class_exists('QRcode', false)) {
                        $stringLen = strlen($this->dataStr);
                        $p = 0;
                        while ($p < $stringLen) {
-                               $mode = $this->identifyMode(substr($this->dataStr, $p), $this->hint);
+                               $mode = $this->identifyMode(substr($this->dataStr, $p));
                                if ($mode == QR_MODE_KJ) {
                                        $p += 2;
                                } else {
index 80adb9df239cb4cbd05cc51295f5eef5e5bbf8e7..02b8776392394de68a7820c64a6adad35a186a80 100644 (file)
                     case QR_MODE_NUM: $length = $this->eatNum(); break;\r
                     case QR_MODE_AN:  $length = $this->eatAn(); break;\r
                     case QR_MODE_KANJI:\r
-                        if ($hint == QR_MODE_KANJI)\r
+                        if ($this->modeHint == QR_MODE_KANJI)\r
                                 $length = $this->eatKanji();\r
                         else    $length = $this->eat8();\r
                         break;\r
             $p = 0;\r
             \r
             while ($p<$stringLen) {\r
-                $mode = self::identifyMode(substr($this->dataStr, $p), $this->modeHint);\r
+                $mode = self::identifyMode(substr($this->dataStr, $p));\r
                 if($mode == QR_MODE_KANJI) {\r
                     $p += 2;\r
                 } else {\r
                 if (file_exists($fileName)) {\r
                     $bitMask = self::unserial(file_get_contents($fileName));\r
                 } else {\r
-                    $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d);\r
+                    $bitMask = $this->generateMaskNo($maskNo, $width, $s);\r
                     if (!file_exists(QR_CACHE_DIR.'mask_'.$maskNo))\r
                         mkdir(QR_CACHE_DIR.'mask_'.$maskNo);\r
                     file_put_contents($fileName, self::serial($bitMask));\r
                 }\r
             } else {\r
-                $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d);\r
+                $bitMask = $this->generateMaskNo($maskNo, $width, $s);\r
             }\r
 \r
             if ($maskGenOnly)\r
         //----------------------------------------------------------------------\r
         public function getCode()\r
         {\r
-            $ret;\r
+            $ret = 0;\r
 \r
             if($this->count < $this->dataLength) {\r
                 $row = $this->count % $this->blocks;\r
             $input = new QRinput($version, $level);\r
             if($input == NULL) return NULL;\r
 \r
-            $ret = $input->append($input, QR_MODE_8, strlen($string), str_split($string));\r
+            $ret = $input->append(QR_MODE_8, strlen($string), str_split($string));\r
             if($ret < 0) {\r
                 unset($input);\r
                 return NULL;\r
index 4b77a5bdd4c298b3516df40150e5aa2b32aff9f9..5bdeaec20a4cc49da4974ef8d596c2ff365cc3e8 100644 (file)
         //----------------------------------------------------------------------\r
         public function getCode()\r
         {\r
-            $ret;\r
+            $ret = 0;\r
 \r
             if($this->count < $this->dataLength) {\r
                 $row = $this->count % $this->blocks;\r
index b14d7ae161f58c0d59f3295884228ca46392e451..43d653ce3f3510c3a3aa916bd468edfe5610a3d9 100644 (file)
                 if (file_exists($fileName)) {\r
                     $bitMask = self::unserial(file_get_contents($fileName));\r
                 } else {\r
-                    $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d);\r
+                    $bitMask = $this->generateMaskNo($maskNo, $width, $s);\r
                     if (!file_exists(QR_CACHE_DIR.'mask_'.$maskNo))\r
                         mkdir(QR_CACHE_DIR.'mask_'.$maskNo);\r
                     file_put_contents($fileName, self::serial($bitMask));\r
                 }\r
             } else {\r
-                $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d);\r
+                $bitMask = $this->generateMaskNo($maskNo, $width, $s);\r
             }\r
 \r
             if ($maskGenOnly)\r
index d75b827371cc9fad4f4b940d5d152846ca943ced..1f9f65c3bd9d7fae2e0577414a58c9cfc533138d 100644 (file)
             if($ret < 0)\r
                 return -1;\r
 \r
-            return $run;\r
+            return $ret;\r
         }\r
 \r
         //----------------------------------------------------------------------\r
                     case QR_MODE_NUM: $length = $this->eatNum(); break;\r
                     case QR_MODE_AN:  $length = $this->eatAn(); break;\r
                     case QR_MODE_KANJI:\r
-                        if ($hint == QR_MODE_KANJI)\r
+                        if ($this->modeHint == QR_MODE_KANJI)\r
                                 $length = $this->eatKanji();\r
                         else    $length = $this->eat8();\r
                         break;\r
             $p = 0;\r
             \r
             while ($p<$stringLen) {\r
-                $mode = self::identifyMode(substr($this->dataStr, $p), $this->modeHint);\r
+                $mode = self::identifyMode(substr($this->dataStr, $p));\r
                 if($mode == QR_MODE_KANJI) {\r
                     $p += 2;\r
                 } else {\r
                 \r
             return $split->splitString();\r
         }\r
-    }
\ No newline at end of file
+    }
diff --git a/lib/simplepie/simplepie.inc b/lib/simplepie/simplepie.inc
deleted file mode 100644 (file)
index 332c2e7..0000000
+++ /dev/null
@@ -1,17772 +0,0 @@
-<?php
-/**
- * SimplePie
- *
- * A PHP-Based RSS and Atom Feed Framework.
- * Takes the hard work out of managing a complete RSS/Atom solution.
- *
- * Please note: This file is automatically generated by a build script. The
- * full original source is always available from http://simplepie.org/
- *
- * Copyright (c) 2004-2012, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors
- * All rights reserved.
- *
- * 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 SimplePie Team 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 HOLDERS
- * AND 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.
- *
- * @package SimplePie
- * @version 1.3.1
- * @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue
- * @author Ryan Parman
- * @author Geoffrey Sneddon
- * @author Ryan McCue
- * @link http://simplepie.org/ SimplePie
- * @license http://www.opensource.org/licenses/bsd-license.php BSD License
- */
-
-/**
- * SimplePie Name
- */
-define('SIMPLEPIE_NAME', 'SimplePie');
-
-/**
- * SimplePie Version
- */
-define('SIMPLEPIE_VERSION', '1.3.1');
-
-/**
- * SimplePie Build
- * @todo Hardcode for release (there's no need to have to call SimplePie_Misc::get_build() only every load of simplepie.inc)
- */
-define('SIMPLEPIE_BUILD', '20121030175911');
-
-/**
- * SimplePie Website URL
- */
-define('SIMPLEPIE_URL', 'http://simplepie.org');
-
-/**
- * SimplePie Useragent
- * @see SimplePie::set_useragent()
- */
-define('SIMPLEPIE_USERAGENT', SIMPLEPIE_NAME . '/' . SIMPLEPIE_VERSION . ' (Feed Parser; ' . SIMPLEPIE_URL . '; Allow like Gecko) Build/' . SIMPLEPIE_BUILD);
-
-/**
- * SimplePie Linkback
- */
-define('SIMPLEPIE_LINKBACK', '<a href="' . SIMPLEPIE_URL . '" title="' . SIMPLEPIE_NAME . ' ' . SIMPLEPIE_VERSION . '">' . SIMPLEPIE_NAME . '</a>');
-
-/**
- * No Autodiscovery
- * @see SimplePie::set_autodiscovery_level()
- */
-define('SIMPLEPIE_LOCATOR_NONE', 0);
-
-/**
- * Feed Link Element Autodiscovery
- * @see SimplePie::set_autodiscovery_level()
- */
-define('SIMPLEPIE_LOCATOR_AUTODISCOVERY', 1);
-
-/**
- * Local Feed Extension Autodiscovery
- * @see SimplePie::set_autodiscovery_level()
- */
-define('SIMPLEPIE_LOCATOR_LOCAL_EXTENSION', 2);
-
-/**
- * Local Feed Body Autodiscovery
- * @see SimplePie::set_autodiscovery_level()
- */
-define('SIMPLEPIE_LOCATOR_LOCAL_BODY', 4);
-
-/**
- * Remote Feed Extension Autodiscovery
- * @see SimplePie::set_autodiscovery_level()
- */
-define('SIMPLEPIE_LOCATOR_REMOTE_EXTENSION', 8);
-
-/**
- * Remote Feed Body Autodiscovery
- * @see SimplePie::set_autodiscovery_level()
- */
-define('SIMPLEPIE_LOCATOR_REMOTE_BODY', 16);
-
-/**
- * All Feed Autodiscovery
- * @see SimplePie::set_autodiscovery_level()
- */
-define('SIMPLEPIE_LOCATOR_ALL', 31);
-
-/**
- * No known feed type
- */
-define('SIMPLEPIE_TYPE_NONE', 0);
-
-/**
- * RSS 0.90
- */
-define('SIMPLEPIE_TYPE_RSS_090', 1);
-
-/**
- * RSS 0.91 (Netscape)
- */
-define('SIMPLEPIE_TYPE_RSS_091_NETSCAPE', 2);
-
-/**
- * RSS 0.91 (Userland)
- */
-define('SIMPLEPIE_TYPE_RSS_091_USERLAND', 4);
-
-/**
- * RSS 0.91 (both Netscape and Userland)
- */
-define('SIMPLEPIE_TYPE_RSS_091', 6);
-
-/**
- * RSS 0.92
- */
-define('SIMPLEPIE_TYPE_RSS_092', 8);
-
-/**
- * RSS 0.93
- */
-define('SIMPLEPIE_TYPE_RSS_093', 16);
-
-/**
- * RSS 0.94
- */
-define('SIMPLEPIE_TYPE_RSS_094', 32);
-
-/**
- * RSS 1.0
- */
-define('SIMPLEPIE_TYPE_RSS_10', 64);
-
-/**
- * RSS 2.0
- */
-define('SIMPLEPIE_TYPE_RSS_20', 128);
-
-/**
- * RDF-based RSS
- */
-define('SIMPLEPIE_TYPE_RSS_RDF', 65);
-
-/**
- * Non-RDF-based RSS (truly intended as syndication format)
- */
-define('SIMPLEPIE_TYPE_RSS_SYNDICATION', 190);
-
-/**
- * All RSS
- */
-define('SIMPLEPIE_TYPE_RSS_ALL', 255);
-
-/**
- * Atom 0.3
- */
-define('SIMPLEPIE_TYPE_ATOM_03', 256);
-
-/**
- * Atom 1.0
- */
-define('SIMPLEPIE_TYPE_ATOM_10', 512);
-
-/**
- * All Atom
- */
-define('SIMPLEPIE_TYPE_ATOM_ALL', 768);
-
-/**
- * All feed types
- */
-define('SIMPLEPIE_TYPE_ALL', 1023);
-
-/**
- * No construct
- */
-define('SIMPLEPIE_CONSTRUCT_NONE', 0);
-
-/**
- * Text construct
- */
-define('SIMPLEPIE_CONSTRUCT_TEXT', 1);
-
-/**
- * HTML construct
- */
-define('SIMPLEPIE_CONSTRUCT_HTML', 2);
-
-/**
- * XHTML construct
- */
-define('SIMPLEPIE_CONSTRUCT_XHTML', 4);
-
-/**
- * base64-encoded construct
- */
-define('SIMPLEPIE_CONSTRUCT_BASE64', 8);
-
-/**
- * IRI construct
- */
-define('SIMPLEPIE_CONSTRUCT_IRI', 16);
-
-/**
- * A construct that might be HTML
- */
-define('SIMPLEPIE_CONSTRUCT_MAYBE_HTML', 32);
-
-/**
- * All constructs
- */
-define('SIMPLEPIE_CONSTRUCT_ALL', 63);
-
-/**
- * Don't change case
- */
-define('SIMPLEPIE_SAME_CASE', 1);
-
-/**
- * Change to lowercase
- */
-define('SIMPLEPIE_LOWERCASE', 2);
-
-/**
- * Change to uppercase
- */
-define('SIMPLEPIE_UPPERCASE', 4);
-
-/**
- * PCRE for HTML attributes
- */
-define('SIMPLEPIE_PCRE_HTML_ATTRIBUTE', '((?:[\x09\x0A\x0B\x0C\x0D\x20]+[^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3D\x3E]*(?:[\x09\x0A\x0B\x0C\x0D\x20]*=[\x09\x0A\x0B\x0C\x0D\x20]*(?:"(?:[^"]*)"|\'(?:[^\']*)\'|(?:[^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?)*)[\x09\x0A\x0B\x0C\x0D\x20]*');
-
-/**
- * PCRE for XML attributes
- */
-define('SIMPLEPIE_PCRE_XML_ATTRIBUTE', '((?:\s+(?:(?:[^\s:]+:)?[^\s:]+)\s*=\s*(?:"(?:[^"]*)"|\'(?:[^\']*)\'))*)\s*');
-
-/**
- * XML Namespace
- */
-define('SIMPLEPIE_NAMESPACE_XML', 'http://www.w3.org/XML/1998/namespace');
-
-/**
- * Atom 1.0 Namespace
- */
-define('SIMPLEPIE_NAMESPACE_ATOM_10', 'http://www.w3.org/2005/Atom');
-
-/**
- * Atom 0.3 Namespace
- */
-define('SIMPLEPIE_NAMESPACE_ATOM_03', 'http://purl.org/atom/ns#');
-
-/**
- * RDF Namespace
- */
-define('SIMPLEPIE_NAMESPACE_RDF', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#');
-
-/**
- * RSS 0.90 Namespace
- */
-define('SIMPLEPIE_NAMESPACE_RSS_090', 'http://my.netscape.com/rdf/simple/0.9/');
-
-/**
- * RSS 1.0 Namespace
- */
-define('SIMPLEPIE_NAMESPACE_RSS_10', 'http://purl.org/rss/1.0/');
-
-/**
- * RSS 1.0 Content Module Namespace
- */
-define('SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT', 'http://purl.org/rss/1.0/modules/content/');
-
-/**
- * RSS 2.0 Namespace
- * (Stupid, I know, but I'm certain it will confuse people less with support.)
- */
-define('SIMPLEPIE_NAMESPACE_RSS_20', '');
-
-/**
- * DC 1.0 Namespace
- */
-define('SIMPLEPIE_NAMESPACE_DC_10', 'http://purl.org/dc/elements/1.0/');
-
-/**
- * DC 1.1 Namespace
- */
-define('SIMPLEPIE_NAMESPACE_DC_11', 'http://purl.org/dc/elements/1.1/');
-
-/**
- * W3C Basic Geo (WGS84 lat/long) Vocabulary Namespace
- */
-define('SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO', 'http://www.w3.org/2003/01/geo/wgs84_pos#');
-
-/**
- * GeoRSS Namespace
- */
-define('SIMPLEPIE_NAMESPACE_GEORSS', 'http://www.georss.org/georss');
-
-/**
- * Media RSS Namespace
- */
-define('SIMPLEPIE_NAMESPACE_MEDIARSS', 'http://search.yahoo.com/mrss/');
-
-/**
- * Wrong Media RSS Namespace. Caused by a long-standing typo in the spec.
- */
-define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG', 'http://search.yahoo.com/mrss');
-
-/**
- * Wrong Media RSS Namespace #2. New namespace introduced in Media RSS 1.5.
- */
-define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG2', 'http://video.search.yahoo.com/mrss');
-
-/**
- * Wrong Media RSS Namespace #3. A possible typo of the Media RSS 1.5 namespace.
- */
-define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG3', 'http://video.search.yahoo.com/mrss/');
-
-/**
- * Wrong Media RSS Namespace #4. New spec location after the RSS Advisory Board takes it over, but not a valid namespace.
- */
-define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG4', 'http://www.rssboard.org/media-rss');
-
-/**
- * Wrong Media RSS Namespace #5. A possible typo of the RSS Advisory Board URL.
- */
-define('SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG5', 'http://www.rssboard.org/media-rss/');
-
-/**
- * iTunes RSS Namespace
- */
-define('SIMPLEPIE_NAMESPACE_ITUNES', 'http://www.itunes.com/dtds/podcast-1.0.dtd');
-
-/**
- * XHTML Namespace
- */
-define('SIMPLEPIE_NAMESPACE_XHTML', 'http://www.w3.org/1999/xhtml');
-
-/**
- * IANA Link Relations Registry
- */
-define('SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY', 'http://www.iana.org/assignments/relation/');
-
-/**
- * No file source
- */
-define('SIMPLEPIE_FILE_SOURCE_NONE', 0);
-
-/**
- * Remote file source
- */
-define('SIMPLEPIE_FILE_SOURCE_REMOTE', 1);
-
-/**
- * Local file source
- */
-define('SIMPLEPIE_FILE_SOURCE_LOCAL', 2);
-
-/**
- * fsockopen() file source
- */
-define('SIMPLEPIE_FILE_SOURCE_FSOCKOPEN', 4);
-
-/**
- * cURL file source
- */
-define('SIMPLEPIE_FILE_SOURCE_CURL', 8);
-
-/**
- * file_get_contents() file source
- */
-define('SIMPLEPIE_FILE_SOURCE_FILE_GET_CONTENTS', 16);
-
-/**
- * SimplePie
- *
- * @package SimplePie
- * @subpackage API
- */
-class SimplePie
-{
-       /**
-        * @var array Raw data
-        * @access private
-        */
-       public $data = array();
-
-       /**
-        * @var mixed Error string
-        * @access private
-        */
-       public $error;
-
-       /**
-        * @var object Instance of SimplePie_Sanitize (or other class)
-        * @see SimplePie::set_sanitize_class()
-        * @access private
-        */
-       public $sanitize;
-
-       /**
-        * @var string SimplePie Useragent
-        * @see SimplePie::set_useragent()
-        * @access private
-        */
-       public $useragent = SIMPLEPIE_USERAGENT;
-
-       /**
-        * @var string Feed URL
-        * @see SimplePie::set_feed_url()
-        * @access private
-        */
-       public $feed_url;
-
-       /**
-        * @var object Instance of SimplePie_File to use as a feed
-        * @see SimplePie::set_file()
-        * @access private
-        */
-       public $file;
-
-       /**
-        * @var string Raw feed data
-        * @see SimplePie::set_raw_data()
-        * @access private
-        */
-       public $raw_data;
-
-       /**
-        * @var int Timeout for fetching remote files
-        * @see SimplePie::set_timeout()
-        * @access private
-        */
-       public $timeout = 10;
-
-       /**
-        * @var bool Forces fsockopen() to be used for remote files instead
-        * of cURL, even if a new enough version is installed
-        * @see SimplePie::force_fsockopen()
-        * @access private
-        */
-       public $force_fsockopen = false;
-
-       /**
-        * @var bool Force the given data/URL to be treated as a feed no matter what
-        * it appears like
-        * @see SimplePie::force_feed()
-        * @access private
-        */
-       public $force_feed = false;
-
-       /**
-        * @var bool Enable/Disable Caching
-        * @see SimplePie::enable_cache()
-        * @access private
-        */
-       public $cache = true;
-
-       /**
-        * @var int Cache duration (in seconds)
-        * @see SimplePie::set_cache_duration()
-        * @access private
-        */
-       public $cache_duration = 3600;
-
-       /**
-        * @var int Auto-discovery cache duration (in seconds)
-        * @see SimplePie::set_autodiscovery_cache_duration()
-        * @access private
-        */
-       public $autodiscovery_cache_duration = 604800; // 7 Days.
-
-       /**
-        * @var string Cache location (relative to executing script)
-        * @see SimplePie::set_cache_location()
-        * @access private
-        */
-       public $cache_location = './cache';
-
-       /**
-        * @var string Function that creates the cache filename
-        * @see SimplePie::set_cache_name_function()
-        * @access private
-        */
-       public $cache_name_function = 'md5';
-
-       /**
-        * @var bool Reorder feed by date descending
-        * @see SimplePie::enable_order_by_date()
-        * @access private
-        */
-       public $order_by_date = true;
-
-       /**
-        * @var mixed Force input encoding to be set to the follow value
-        * (false, or anything type-cast to false, disables this feature)
-        * @see SimplePie::set_input_encoding()
-        * @access private
-        */
-       public $input_encoding = false;
-
-       /**
-        * @var int Feed Autodiscovery Level
-        * @see SimplePie::set_autodiscovery_level()
-        * @access private
-        */
-       public $autodiscovery = SIMPLEPIE_LOCATOR_ALL;
-
-       /**
-        * Class registry object
-        *
-        * @var SimplePie_Registry
-        */
-       public $registry;
-
-       /**
-        * @var int Maximum number of feeds to check with autodiscovery
-        * @see SimplePie::set_max_checked_feeds()
-        * @access private
-        */
-       public $max_checked_feeds = 10;
-
-       /**
-        * @var array All the feeds found during the autodiscovery process
-        * @see SimplePie::get_all_discovered_feeds()
-        * @access private
-        */
-       public $all_discovered_feeds = array();
-
-       /**
-        * @var string Web-accessible path to the handler_image.php file.
-        * @see SimplePie::set_image_handler()
-        * @access private
-        */
-       public $image_handler = '';
-
-       /**
-        * @var array Stores the URLs when multiple feeds are being initialized.
-        * @see SimplePie::set_feed_url()
-        * @access private
-        */
-       public $multifeed_url = array();
-
-       /**
-        * @var array Stores SimplePie objects when multiple feeds initialized.
-        * @access private
-        */
-       public $multifeed_objects = array();
-
-       /**
-        * @var array Stores the get_object_vars() array for use with multifeeds.
-        * @see SimplePie::set_feed_url()
-        * @access private
-        */
-       public $config_settings = null;
-
-       /**
-        * @var integer Stores the number of items to return per-feed with multifeeds.
-        * @see SimplePie::set_item_limit()
-        * @access private
-        */
-       public $item_limit = 0;
-
-       /**
-        * @var array Stores the default attributes to be stripped by strip_attributes().
-        * @see SimplePie::strip_attributes()
-        * @access private
-        */
-       public $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc');
-
-       /**
-        * @var array Stores the default tags to be stripped by strip_htmltags().
-        * @see SimplePie::strip_htmltags()
-        * @access private
-        */
-       public $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style');
-
-       /**
-        * The SimplePie class contains feed level data and options
-        *
-        * To use SimplePie, create the SimplePie object with no parameters. You can
-        * then set configuration options using the provided methods. After setting
-        * them, you must initialise the feed using $feed->init(). At that point the
-        * object's methods and properties will be available to you.
-        *
-        * Previously, it was possible to pass in the feed URL along with cache
-        * options directly into the constructor. This has been removed as of 1.3 as
-        * it caused a lot of confusion.
-        *
-        * @since 1.0 Preview Release
-        */
-       public function __construct()
-       {
-               if (version_compare(PHP_VERSION, '5.2', '<'))
-               {
-                       trigger_error('PHP 4.x, 5.0 and 5.1 are no longer supported. Please upgrade to PHP 5.2 or newer.');
-                       die();
-               }
-
-               // Other objects, instances created here so we can set options on them
-               $this->sanitize = new SimplePie_Sanitize();
-               $this->registry = new SimplePie_Registry();
-
-               if (func_num_args() > 0)
-               {
-                       $level = defined('E_USER_DEPRECATED') ? E_USER_DEPRECATED : E_USER_WARNING;
-                       trigger_error('Passing parameters to the constructor is no longer supported. Please use set_feed_url(), set_cache_location(), and set_cache_location() directly.', $level);
-
-                       $args = func_get_args();
-                       switch (count($args)) {
-                               case 3:
-                                       $this->set_cache_duration($args[2]);
-                               case 2:
-                                       $this->set_cache_location($args[1]);
-                               case 1:
-                                       $this->set_feed_url($args[0]);
-                                       $this->init();
-                       }
-               }
-       }
-
-       /**
-        * Used for converting object to a string
-        */
-       public function __toString()
-       {
-               return md5(serialize($this->data));
-       }
-
-       /**
-        * Remove items that link back to this before destroying this object
-        */
-       public function __destruct()
-       {
-               if ((version_compare(PHP_VERSION, '5.3', '<') || !gc_enabled()) && !ini_get('zend.ze1_compatibility_mode'))
-               {
-                       if (!empty($this->data['items']))
-                       {
-                               foreach ($this->data['items'] as $item)
-                               {
-                                       $item->__destruct();
-                               }
-                               unset($item, $this->data['items']);
-                       }
-                       if (!empty($this->data['ordered_items']))
-                       {
-                               foreach ($this->data['ordered_items'] as $item)
-                               {
-                                       $item->__destruct();
-                               }
-                               unset($item, $this->data['ordered_items']);
-                       }
-               }
-       }
-
-       /**
-        * Force the given data/URL to be treated as a feed
-        *
-        * This tells SimplePie to ignore the content-type provided by the server.
-        * Be careful when using this option, as it will also disable autodiscovery.
-        *
-        * @since 1.1
-        * @param bool $enable Force the given data/URL to be treated as a feed
-        */
-       public function force_feed($enable = false)
-       {
-               $this->force_feed = (bool) $enable;
-       }
-
-       /**
-        * Set the URL of the feed you want to parse
-        *
-        * This allows you to enter the URL of the feed you want to parse, or the
-        * website you want to try to use auto-discovery on. This takes priority
-        * over any set raw data.
-        *
-        * You can set multiple feeds to mash together by passing an array instead
-        * of a string for the $url. Remember that with each additional feed comes
-        * additional processing and resources.
-        *
-        * @since 1.0 Preview Release
-        * @see set_raw_data()
-        * @param string|array $url This is the URL (or array of URLs) that you want to parse.
-        */
-       public function set_feed_url($url)
-       {
-               $this->multifeed_url = array();
-               if (is_array($url))
-               {
-                       foreach ($url as $value)
-                       {
-                               $this->multifeed_url[] = $this->registry->call('Misc', 'fix_protocol', array($value, 1));
-                       }
-               }
-               else
-               {
-                       $this->feed_url = $this->registry->call('Misc', 'fix_protocol', array($url, 1));
-               }
-       }
-
-       /**
-        * Set an instance of {@see SimplePie_File} to use as a feed
-        *
-        * @param SimplePie_File &$file
-        * @return bool True on success, false on failure
-        */
-       public function set_file(&$file)
-       {
-               if ($file instanceof SimplePie_File)
-               {
-                       $this->feed_url = $file->url;
-                       $this->file =& $file;
-                       return true;
-               }
-               return false;
-       }
-
-       /**
-        * Set the raw XML data to parse
-        *
-        * Allows you to use a string of RSS/Atom data instead of a remote feed.
-        *
-        * If you have a feed available as a string in PHP, you can tell SimplePie
-        * to parse that data string instead of a remote feed. Any set feed URL
-        * takes precedence.
-        *
-        * @since 1.0 Beta 3
-        * @param string $data RSS or Atom data as a string.
-        * @see set_feed_url()
-        */
-       public function set_raw_data($data)
-       {
-               $this->raw_data = $data;
-       }
-
-       /**
-        * Set the the default timeout for fetching remote feeds
-        *
-        * This allows you to change the maximum time the feed's server to respond
-        * and send the feed back.
-        *
-        * @since 1.0 Beta 3
-        * @param int $timeout The maximum number of seconds to spend waiting to retrieve a feed.
-        */
-       public function set_timeout($timeout = 10)
-       {
-               $this->timeout = (int) $timeout;
-       }
-
-       /**
-        * Force SimplePie to use fsockopen() instead of cURL
-        *
-        * @since 1.0 Beta 3
-        * @param bool $enable Force fsockopen() to be used
-        */
-       public function force_fsockopen($enable = false)
-       {
-               $this->force_fsockopen = (bool) $enable;
-       }
-
-       /**
-        * Enable/disable caching in SimplePie.
-        *
-        * This option allows you to disable caching all-together in SimplePie.
-        * However, disabling the cache can lead to longer load times.
-        *
-        * @since 1.0 Preview Release
-        * @param bool $enable Enable caching
-        */
-       public function enable_cache($enable = true)
-       {
-               $this->cache = (bool) $enable;
-       }
-
-       /**
-        * Set the length of time (in seconds) that the contents of a feed will be
-        * cached
-        *
-        * @param int $seconds The feed content cache duration
-        */
-       public function set_cache_duration($seconds = 3600)
-       {
-               $this->cache_duration = (int) $seconds;
-       }
-
-       /**
-        * Set the length of time (in seconds) that the autodiscovered feed URL will
-        * be cached
-        *
-        * @param int $seconds The autodiscovered feed URL cache duration.
-        */
-       public function set_autodiscovery_cache_duration($seconds = 604800)
-       {
-               $this->autodiscovery_cache_duration = (int) $seconds;
-       }
-
-       /**
-        * Set the file system location where the cached files should be stored
-        *
-        * @param string $location The file system location.
-        */
-       public function set_cache_location($location = './cache')
-       {
-               $this->cache_location = (string) $location;
-       }
-
-       /**
-        * Set whether feed items should be sorted into reverse chronological order
-        *
-        * @param bool $enable Sort as reverse chronological order.
-        */
-       public function enable_order_by_date($enable = true)
-       {
-               $this->order_by_date = (bool) $enable;
-       }
-
-       /**
-        * Set the character encoding used to parse the feed
-        *
-        * This overrides the encoding reported by the feed, however it will fall
-        * back to the normal encoding detection if the override fails
-        *
-        * @param string $encoding Character encoding
-        */
-       public function set_input_encoding($encoding = false)
-       {
-               if ($encoding)
-               {
-                       $this->input_encoding = (string) $encoding;
-               }
-               else
-               {
-                       $this->input_encoding = false;
-               }
-       }
-
-       /**
-        * Set how much feed autodiscovery to do
-        *
-        * @see SIMPLEPIE_LOCATOR_NONE
-        * @see SIMPLEPIE_LOCATOR_AUTODISCOVERY
-        * @see SIMPLEPIE_LOCATOR_LOCAL_EXTENSION
-        * @see SIMPLEPIE_LOCATOR_LOCAL_BODY
-        * @see SIMPLEPIE_LOCATOR_REMOTE_EXTENSION
-        * @see SIMPLEPIE_LOCATOR_REMOTE_BODY
-        * @see SIMPLEPIE_LOCATOR_ALL
-        * @param int $level Feed Autodiscovery Level (level can be a combination of the above constants, see bitwise OR operator)
-        */
-       public function set_autodiscovery_level($level = SIMPLEPIE_LOCATOR_ALL)
-       {
-               $this->autodiscovery = (int) $level;
-       }
-
-       /**
-        * Get the class registry
-        *
-        * Use this to override SimplePie's default classes
-        * @see SimplePie_Registry
-        * @return SimplePie_Registry
-        */
-       public function &get_registry()
-       {
-               return $this->registry;
-       }
-
-       /**#@+
-        * Useful when you are overloading or extending SimplePie's default classes.
-        *
-        * @deprecated Use {@see get_registry()} instead
-        * @link http://php.net/manual/en/language.oop5.basic.php#language.oop5.basic.extends PHP5 extends documentation
-        * @param string $class Name of custom class
-        * @return boolean True on success, false otherwise
-        */
-       /**
-        * Set which class SimplePie uses for caching
-        */
-       public function set_cache_class($class = 'SimplePie_Cache')
-       {
-               return $this->registry->register('Cache', $class, true);
-       }
-
-       /**
-        * Set which class SimplePie uses for auto-discovery
-        */
-       public function set_locator_class($class = 'SimplePie_Locator')
-       {
-               return $this->registry->register('Locator', $class, true);
-       }
-
-       /**
-        * Set which class SimplePie uses for XML parsing
-        */
-       public function set_parser_class($class = 'SimplePie_Parser')
-       {
-               return $this->registry->register('Parser', $class, true);
-       }
-
-       /**
-        * Set which class SimplePie uses for remote file fetching
-        */
-       public function set_file_class($class = 'SimplePie_File')
-       {
-               return $this->registry->register('File', $class, true);
-       }
-
-       /**
-        * Set which class SimplePie uses for data sanitization
-        */
-       public function set_sanitize_class($class = 'SimplePie_Sanitize')
-       {
-               return $this->registry->register('Sanitize', $class, true);
-       }
-
-       /**
-        * Set which class SimplePie uses for handling feed items
-        */
-       public function set_item_class($class = 'SimplePie_Item')
-       {
-               return $this->registry->register('Item', $class, true);
-       }
-
-       /**
-        * Set which class SimplePie uses for handling author data
-        */
-       public function set_author_class($class = 'SimplePie_Author')
-       {
-               return $this->registry->register('Author', $class, true);
-       }
-
-       /**
-        * Set which class SimplePie uses for handling category data
-        */
-       public function set_category_class($class = 'SimplePie_Category')
-       {
-               return $this->registry->register('Category', $class, true);
-       }
-
-       /**
-        * Set which class SimplePie uses for feed enclosures
-        */
-       public function set_enclosure_class($class = 'SimplePie_Enclosure')
-       {
-               return $this->registry->register('Enclosure', $class, true);
-       }
-
-       /**
-        * Set which class SimplePie uses for `<media:text>` captions
-        */
-       public function set_caption_class($class = 'SimplePie_Caption')
-       {
-               return $this->registry->register('Caption', $class, true);
-       }
-
-       /**
-        * Set which class SimplePie uses for `<media:copyright>`
-        */
-       public function set_copyright_class($class = 'SimplePie_Copyright')
-       {
-               return $this->registry->register('Copyright', $class, true);
-       }
-
-       /**
-        * Set which class SimplePie uses for `<media:credit>`
-        */
-       public function set_credit_class($class = 'SimplePie_Credit')
-       {
-               return $this->registry->register('Credit', $class, true);
-       }
-
-       /**
-        * Set which class SimplePie uses for `<media:rating>`
-        */
-       public function set_rating_class($class = 'SimplePie_Rating')
-       {
-               return $this->registry->register('Rating', $class, true);
-       }
-
-       /**
-        * Set which class SimplePie uses for `<media:restriction>`
-        */
-       public function set_restriction_class($class = 'SimplePie_Restriction')
-       {
-               return $this->registry->register('Restriction', $class, true);
-       }
-
-       /**
-        * Set which class SimplePie uses for content-type sniffing
-        */
-       public function set_content_type_sniffer_class($class = 'SimplePie_Content_Type_Sniffer')
-       {
-               return $this->registry->register('Content_Type_Sniffer', $class, true);
-       }
-
-       /**
-        * Set which class SimplePie uses item sources
-        */
-       public function set_source_class($class = 'SimplePie_Source')
-       {
-               return $this->registry->register('Source', $class, true);
-       }
-       /**#@-*/
-
-       /**
-        * Set the user agent string
-        *
-        * @param string $ua New user agent string.
-        */
-       public function set_useragent($ua = SIMPLEPIE_USERAGENT)
-       {
-               $this->useragent = (string) $ua;
-       }
-
-       /**
-        * Set callback function to create cache filename with
-        *
-        * @param mixed $function Callback function
-        */
-       public function set_cache_name_function($function = 'md5')
-       {
-               if (is_callable($function))
-               {
-                       $this->cache_name_function = $function;
-               }
-       }
-
-       /**
-        * Set options to make SP as fast as possible
-        *
-        * Forgoes a substantial amount of data sanitization in favor of speed. This
-        * turns SimplePie into a dumb parser of feeds.
-        *
-        * @param bool $set Whether to set them or not
-        */
-       public function set_stupidly_fast($set = false)
-       {
-               if ($set)
-               {
-                       $this->enable_order_by_date(false);
-                       $this->remove_div(false);
-                       $this->strip_comments(false);
-                       $this->strip_htmltags(false);
-                       $this->strip_attributes(false);
-                       $this->set_image_handler(false);
-               }
-       }
-
-       /**
-        * Set maximum number of feeds to check with autodiscovery
-        *
-        * @param int $max Maximum number of feeds to check
-        */
-       public function set_max_checked_feeds($max = 10)
-       {
-               $this->max_checked_feeds = (int) $max;
-       }
-
-       public function remove_div($enable = true)
-       {
-               $this->sanitize->remove_div($enable);
-       }
-
-       public function strip_htmltags($tags = '', $encode = null)
-       {
-               if ($tags === '')
-               {
-                       $tags = $this->strip_htmltags;
-               }
-               $this->sanitize->strip_htmltags($tags);
-               if ($encode !== null)
-               {
-                       $this->sanitize->encode_instead_of_strip($tags);
-               }
-       }
-
-       public function encode_instead_of_strip($enable = true)
-       {
-               $this->sanitize->encode_instead_of_strip($enable);
-       }
-
-       public function strip_attributes($attribs = '')
-       {
-               if ($attribs === '')
-               {
-                       $attribs = $this->strip_attributes;
-               }
-               $this->sanitize->strip_attributes($attribs);
-       }
-
-       /**
-        * Set the output encoding
-        *
-        * Allows you to override SimplePie's output to match that of your webpage.
-        * This is useful for times when your webpages are not being served as
-        * UTF-8.  This setting will be obeyed by {@see handle_content_type()}, and
-        * is similar to {@see set_input_encoding()}.
-        *
-        * It should be noted, however, that not all character encodings can support
-        * all characters.  If your page is being served as ISO-8859-1 and you try
-        * to display a Japanese feed, you'll likely see garbled characters.
-        * Because of this, it is highly recommended to ensure that your webpages
-        * are served as UTF-8.
-        *
-        * The number of supported character encodings depends on whether your web
-        * host supports {@link http://php.net/mbstring mbstring},
-        * {@link http://php.net/iconv iconv}, or both. See
-        * {@link http://simplepie.org/wiki/faq/Supported_Character_Encodings} for
-        * more information.
-        *
-        * @param string $encoding
-        */
-       public function set_output_encoding($encoding = 'UTF-8')
-       {
-               $this->sanitize->set_output_encoding($encoding);
-       }
-
-       public function strip_comments($strip = false)
-       {
-               $this->sanitize->strip_comments($strip);
-       }
-
-       /**
-        * Set element/attribute key/value pairs of HTML attributes
-        * containing URLs that need to be resolved relative to the feed
-        *
-        * Defaults to |a|@href, |area|@href, |blockquote|@cite, |del|@cite,
-        * |form|@action, |img|@longdesc, |img|@src, |input|@src, |ins|@cite,
-        * |q|@cite
-        *
-        * @since 1.0
-        * @param array|null $element_attribute Element/attribute key/value pairs, null for default
-        */
-       public function set_url_replacements($element_attribute = null)
-       {
-               $this->sanitize->set_url_replacements($element_attribute);
-       }
-
-       /**
-        * Set the handler to enable the display of cached images.
-        *
-        * @param str $page Web-accessible path to the handler_image.php file.
-        * @param str $qs The query string that the value should be passed to.
-        */
-       public function set_image_handler($page = false, $qs = 'i')
-       {
-               if ($page !== false)
-               {
-                       $this->sanitize->set_image_handler($page . '?' . $qs . '=');
-               }
-               else
-               {
-                       $this->image_handler = '';
-               }
-       }
-
-       /**
-        * Set the limit for items returned per-feed with multifeeds
-        *
-        * @param integer $limit The maximum number of items to return.
-        */
-       public function set_item_limit($limit = 0)
-       {
-               $this->item_limit = (int) $limit;
-       }
-
-       /**
-        * Initialize the feed object
-        *
-        * This is what makes everything happen.  Period.  This is where all of the
-        * configuration options get processed, feeds are fetched, cached, and
-        * parsed, and all of that other good stuff.
-        *
-        * @return boolean True if successful, false otherwise
-        */
-       public function init()
-       {
-               // Check absolute bare minimum requirements.
-               if (!extension_loaded('xml') || !extension_loaded('pcre'))
-               {
-                       return false;
-               }
-               // Then check the xml extension is sane (i.e., libxml 2.7.x issue on PHP < 5.2.9 and libxml 2.7.0 to 2.7.2 on any version) if we don't have xmlreader.
-               elseif (!extension_loaded('xmlreader'))
-               {
-                       static $xml_is_sane = null;
-                       if ($xml_is_sane === null)
-                       {
-                               $parser_check = xml_parser_create();
-                               xml_parse_into_struct($parser_check, '<foo>&amp;</foo>', $values);
-                               xml_parser_free($parser_check);
-                               $xml_is_sane = isset($values[0]['value']);
-                       }
-                       if (!$xml_is_sane)
-                       {
-                               return false;
-                       }
-               }
-
-               if (method_exists($this->sanitize, 'set_registry'))
-               {
-                       $this->sanitize->set_registry($this->registry);
-               }
-
-               // Pass whatever was set with config options over to the sanitizer.
-               // Pass the classes in for legacy support; new classes should use the registry instead
-               $this->sanitize->pass_cache_data($this->cache, $this->cache_location, $this->cache_name_function, $this->registry->get_class('Cache'));
-               $this->sanitize->pass_file_data($this->registry->get_class('File'), $this->timeout, $this->useragent, $this->force_fsockopen);
-
-               if (!empty($this->multifeed_url))
-               {
-                       $i = 0;
-                       $success = 0;
-                       $this->multifeed_objects = array();
-                       $this->error = array();
-                       foreach ($this->multifeed_url as $url)
-                       {
-                               $this->multifeed_objects[$i] = clone $this;
-                               $this->multifeed_objects[$i]->set_feed_url($url);
-                               $single_success = $this->multifeed_objects[$i]->init();
-                               $success |= $single_success;
-                               if (!$single_success)
-                               {
-                                       $this->error[$i] = $this->multifeed_objects[$i]->error();
-                               }
-                               $i++;
-                       }
-                       return (bool) $success;
-               }
-               elseif ($this->feed_url === null && $this->raw_data === null)
-               {
-                       return false;
-               }
-
-               $this->error = null;
-               $this->data = array();
-               $this->multifeed_objects = array();
-               $cache = false;
-
-               if ($this->feed_url !== null)
-               {
-                       $parsed_feed_url = $this->registry->call('Misc', 'parse_url', array($this->feed_url));
-
-                       // Decide whether to enable caching
-                       if ($this->cache && $parsed_feed_url['scheme'] !== '')
-                       {
-                               $cache = $this->registry->call('Cache', 'get_handler', array($this->cache_location, call_user_func($this->cache_name_function, $this->feed_url), 'spc'));
-                       }
-
-                       // Fetch the data via SimplePie_File into $this->raw_data
-                       if (($fetched = $this->fetch_data($cache)) === true)
-                       {
-                               return true;
-                       }
-                       elseif ($fetched === false) {
-                               return false;
-                       }
-
-                       list($headers, $sniffed) = $fetched;
-               }
-
-               // Set up array of possible encodings
-               $encodings = array();
-
-               // First check to see if input has been overridden.
-               if ($this->input_encoding !== false)
-               {
-                       $encodings[] = $this->input_encoding;
-               }
-
-               $application_types = array('application/xml', 'application/xml-dtd', 'application/xml-external-parsed-entity');
-               $text_types = array('text/xml', 'text/xml-external-parsed-entity');
-
-               // RFC 3023 (only applies to sniffed content)
-               if (isset($sniffed))
-               {
-                       if (in_array($sniffed, $application_types) || substr($sniffed, 0, 12) === 'application/' && substr($sniffed, -4) === '+xml')
-                       {
-                               if (isset($headers['content-type']) && preg_match('/;\x20?charset=([^;]*)/i', $headers['content-type'], $charset))
-                               {
-                                       $encodings[] = strtoupper($charset[1]);
-                               }
-                               $encodings = array_merge($encodings, $this->registry->call('Misc', 'xml_encoding', array($this->raw_data, &$this->registry)));
-                               $encodings[] = 'UTF-8';
-                       }
-                       elseif (in_array($sniffed, $text_types) || substr($sniffed, 0, 5) === 'text/' && substr($sniffed, -4) === '+xml')
-                       {
-                               if (isset($headers['content-type']) && preg_match('/;\x20?charset=([^;]*)/i', $headers['content-type'], $charset))
-                               {
-                                       $encodings[] = $charset[1];
-                               }
-                               $encodings[] = 'US-ASCII';
-                       }
-                       // Text MIME-type default
-                       elseif (substr($sniffed, 0, 5) === 'text/')
-                       {
-                               $encodings[] = 'US-ASCII';
-                       }
-               }
-
-               // Fallback to XML 1.0 Appendix F.1/UTF-8/ISO-8859-1
-               $encodings = array_merge($encodings, $this->registry->call('Misc', 'xml_encoding', array($this->raw_data, &$this->registry)));
-               $encodings[] = 'UTF-8';
-               $encodings[] = 'ISO-8859-1';
-
-               // There's no point in trying an encoding twice
-               $encodings = array_unique($encodings);
-
-               // Loop through each possible encoding, till we return something, or run out of possibilities
-               foreach ($encodings as $encoding)
-               {
-                       // Change the encoding to UTF-8 (as we always use UTF-8 internally)
-                       if ($utf8_data = $this->registry->call('Misc', 'change_encoding', array($this->raw_data, $encoding, 'UTF-8')))
-                       {
-                               // Create new parser
-                               $parser = $this->registry->create('Parser');
-
-                               // If it's parsed fine
-                               if ($parser->parse($utf8_data, 'UTF-8'))
-                               {
-                                       $this->data = $parser->get_data();
-                                       if (!($this->get_type() & ~SIMPLEPIE_TYPE_NONE))
-                                       {
-                                               $this->error = "A feed could not be found at $this->feed_url. This does not appear to be a valid RSS or Atom feed.";
-                                               $this->registry->call('Misc', 'error', array($this->error, E_USER_NOTICE, __FILE__, __LINE__));
-                                               return false;
-                                       }
-
-                                       if (isset($headers))
-                                       {
-                                               $this->data['headers'] = $headers;
-                                       }
-                                       $this->data['build'] = SIMPLEPIE_BUILD;
-
-                                       // Cache the file if caching is enabled
-                                       if ($cache && !$cache->save($this))
-                                       {
-                                               trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
-                                       }
-                                       return true;
-                               }
-                       }
-               }
-
-               if (isset($parser))
-               {
-                       // We have an error, just set SimplePie_Misc::error to it and quit
-                       $this->error = sprintf('This XML document is invalid, likely due to invalid characters. XML error: %s at line %d, column %d', $parser->get_error_string(), $parser->get_current_line(), $parser->get_current_column());
-               }
-               else
-               {
-                       $this->error = 'The data could not be converted to UTF-8. You MUST have either the iconv or mbstring extension installed. Upgrading to PHP 5.x (which includes iconv) is highly recommended.';
-               }
-
-               $this->registry->call('Misc', 'error', array($this->error, E_USER_NOTICE, __FILE__, __LINE__));
-
-               return false;
-       }
-
-       /**
-        * Fetch the data via SimplePie_File
-        *
-        * If the data is already cached, attempt to fetch it from there instead
-        * @param SimplePie_Cache|false $cache Cache handler, or false to not load from the cache
-        * @return array|true Returns true if the data was loaded from the cache, or an array of HTTP headers and sniffed type
-        */
-       protected function fetch_data(&$cache)
-       {
-               // If it's enabled, use the cache
-               if ($cache)
-               {
-                       // Load the Cache
-                       $this->data = $cache->load();
-                       if (!empty($this->data))
-                       {
-                               // If the cache is for an outdated build of SimplePie
-                               if (!isset($this->data['build']) || $this->data['build'] !== SIMPLEPIE_BUILD)
-                               {
-                                       $cache->unlink();
-                                       $this->data = array();
-                               }
-                               // If we've hit a collision just rerun it with caching disabled
-                               elseif (isset($this->data['url']) && $this->data['url'] !== $this->feed_url)
-                               {
-                                       $cache = false;
-                                       $this->data = array();
-                               }
-                               // If we've got a non feed_url stored (if the page isn't actually a feed, or is a redirect) use that URL.
-                               elseif (isset($this->data['feed_url']))
-                               {
-                                       // If the autodiscovery cache is still valid use it.
-                                       if ($cache->mtime() + $this->autodiscovery_cache_duration > time())
-                                       {
-                                               // Do not need to do feed autodiscovery yet.
-                                               if ($this->data['feed_url'] !== $this->data['url'])
-                                               {
-                                                       $this->set_feed_url($this->data['feed_url']);
-                                                       return $this->init();
-                                               }
-
-                                               $cache->unlink();
-                                               $this->data = array();
-                                       }
-                               }
-                               // Check if the cache has been updated
-                               elseif ($cache->mtime() + $this->cache_duration < time())
-                               {
-                                       // If we have last-modified and/or etag set
-                                       if (isset($this->data['headers']['last-modified']) || isset($this->data['headers']['etag']))
-                                       {
-                                               $headers = array(
-                                                       'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
-                                               );
-                                               if (isset($this->data['headers']['last-modified']))
-                                               {
-                                                       $headers['if-modified-since'] = $this->data['headers']['last-modified'];
-                                               }
-                                               if (isset($this->data['headers']['etag']))
-                                               {
-                                                       $headers['if-none-match'] = $this->data['headers']['etag'];
-                                               }
-
-                                               $file = $this->registry->create('File', array($this->feed_url, $this->timeout/10, 5, $headers, $this->useragent, $this->force_fsockopen));
-
-                                               if ($file->success)
-                                               {
-                                                       if ($file->status_code === 304)
-                                                       {
-                                                               $cache->touch();
-                                                               return true;
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       unset($file);
-                                               }
-                                       }
-                               }
-                               // If the cache is still valid, just return true
-                               else
-                               {
-                                       $this->raw_data = false;
-                                       return true;
-                               }
-                       }
-                       // If the cache is empty, delete it
-                       else
-                       {
-                               $cache->unlink();
-                               $this->data = array();
-                       }
-               }
-               // If we don't already have the file (it'll only exist if we've opened it to check if the cache has been modified), open it.
-               if (!isset($file))
-               {
-                       if ($this->file instanceof SimplePie_File && $this->file->url === $this->feed_url)
-                       {
-                               $file =& $this->file;
-                       }
-                       else
-                       {
-                               $headers = array(
-                                       'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
-                               );
-                               $file = $this->registry->create('File', array($this->feed_url, $this->timeout, 5, $headers, $this->useragent, $this->force_fsockopen));
-                       }
-               }
-               // If the file connection has an error, set SimplePie::error to that and quit
-               if (!$file->success && !($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300)))
-               {
-                       $this->error = $file->error;
-                       return !empty($this->data);
-               }
-
-               if (!$this->force_feed)
-               {
-                       // Check if the supplied URL is a feed, if it isn't, look for it.
-                       $locate = $this->registry->create('Locator', array(&$file, $this->timeout, $this->useragent, $this->max_checked_feeds));
-
-                       if (!$locate->is_feed($file))
-                       {
-                               // We need to unset this so that if SimplePie::set_file() has been called that object is untouched
-                               unset($file);
-                               try
-                               {
-                                       if (!($file = $locate->find($this->autodiscovery, $this->all_discovered_feeds)))
-                                       {
-                                               $this->error = "A feed could not be found at $this->feed_url. A feed with an invalid mime type may fall victim to this error, or " . SIMPLEPIE_NAME . " was unable to auto-discover it.. Use force_feed() if you are certain this URL is a real feed.";
-                                               $this->registry->call('Misc', 'error', array($this->error, E_USER_NOTICE, __FILE__, __LINE__));
-                                               return false;
-                                       }
-                               }
-                               catch (SimplePie_Exception $e)
-                               {
-                                       // This is usually because DOMDocument doesn't exist
-                                       $this->error = $e->getMessage();
-                                       $this->registry->call('Misc', 'error', array($this->error, E_USER_NOTICE, $e->getFile(), $e->getLine()));
-                                       return false;
-                               }
-                               if ($cache)
-                               {
-                                       $this->data = array('url' => $this->feed_url, 'feed_url' => $file->url, 'build' => SIMPLEPIE_BUILD);
-                                       if (!$cache->save($this))
-                                       {
-                                               trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
-                                       }
-                                       $cache = $this->registry->call('Cache', 'get_handler', array($this->cache_location, call_user_func($this->cache_name_function, $file->url), 'spc'));
-                               }
-                               $this->feed_url = $file->url;
-                       }
-                       $locate = null;
-               }
-
-               $this->raw_data = $file->body;
-
-               $headers = $file->headers;
-               $sniffer = $this->registry->create('Content_Type_Sniffer', array(&$file));
-               $sniffed = $sniffer->get_type();
-
-               return array($headers, $sniffed);
-       }
-
-       /**
-        * Get the error message for the occured error
-        *
-        * @return string|array Error message, or array of messages for multifeeds
-        */
-       public function error()
-       {
-               return $this->error;
-       }
-
-       /**
-        * Get the raw XML
-        *
-        * This is the same as the old `$feed->enable_xml_dump(true)`, but returns
-        * the data instead of printing it.
-        *
-        * @return string|boolean Raw XML data, false if the cache is used
-        */
-       public function get_raw_data()
-       {
-               return $this->raw_data;
-       }
-
-       /**
-        * Get the character encoding used for output
-        *
-        * @since Preview Release
-        * @return string
-        */
-       public function get_encoding()
-       {
-               return $this->sanitize->output_encoding;
-       }
-
-       /**
-        * Send the content-type header with correct encoding
-        *
-        * This method ensures that the SimplePie-enabled page is being served with
-        * the correct {@link http://www.iana.org/assignments/media-types/ mime-type}
-        * and character encoding HTTP headers (character encoding determined by the
-        * {@see set_output_encoding} config option).
-        *
-        * This won't work properly if any content or whitespace has already been
-        * sent to the browser, because it relies on PHP's
-        * {@link http://php.net/header header()} function, and these are the
-        * circumstances under which the function works.
-        *
-        * Because it's setting these settings for the entire page (as is the nature
-        * of HTTP headers), this should only be used once per page (again, at the
-        * top).
-        *
-        * @param string $mime MIME type to serve the page as
-        */
-       public function handle_content_type($mime = 'text/html')
-       {
-               if (!headers_sent())
-               {
-                       $header = "Content-type: $mime;";
-                       if ($this->get_encoding())
-                       {
-                               $header .= ' charset=' . $this->get_encoding();
-                       }
-                       else
-                       {
-                               $header .= ' charset=UTF-8';
-                       }
-                       header($header);
-               }
-       }
-
-       /**
-        * Get the type of the feed
-        *
-        * This returns a SIMPLEPIE_TYPE_* constant, which can be tested against
-        * using {@link http://php.net/language.operators.bitwise bitwise operators}
-        *
-        * @since 0.8 (usage changed to using constants in 1.0)
-        * @see SIMPLEPIE_TYPE_NONE Unknown.
-        * @see SIMPLEPIE_TYPE_RSS_090 RSS 0.90.
-        * @see SIMPLEPIE_TYPE_RSS_091_NETSCAPE RSS 0.91 (Netscape).
-        * @see SIMPLEPIE_TYPE_RSS_091_USERLAND RSS 0.91 (Userland).
-        * @see SIMPLEPIE_TYPE_RSS_091 RSS 0.91.
-        * @see SIMPLEPIE_TYPE_RSS_092 RSS 0.92.
-        * @see SIMPLEPIE_TYPE_RSS_093 RSS 0.93.
-        * @see SIMPLEPIE_TYPE_RSS_094 RSS 0.94.
-        * @see SIMPLEPIE_TYPE_RSS_10 RSS 1.0.
-        * @see SIMPLEPIE_TYPE_RSS_20 RSS 2.0.x.
-        * @see SIMPLEPIE_TYPE_RSS_RDF RDF-based RSS.
-        * @see SIMPLEPIE_TYPE_RSS_SYNDICATION Non-RDF-based RSS (truly intended as syndication format).
-        * @see SIMPLEPIE_TYPE_RSS_ALL Any version of RSS.
-        * @see SIMPLEPIE_TYPE_ATOM_03 Atom 0.3.
-        * @see SIMPLEPIE_TYPE_ATOM_10 Atom 1.0.
-        * @see SIMPLEPIE_TYPE_ATOM_ALL Any version of Atom.
-        * @see SIMPLEPIE_TYPE_ALL Any known/supported feed type.
-        * @return int SIMPLEPIE_TYPE_* constant
-        */
-       public function get_type()
-       {
-               if (!isset($this->data['type']))
-               {
-                       $this->data['type'] = SIMPLEPIE_TYPE_ALL;
-                       if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed']))
-                       {
-                               $this->data['type'] &= SIMPLEPIE_TYPE_ATOM_10;
-                       }
-                       elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed']))
-                       {
-                               $this->data['type'] &= SIMPLEPIE_TYPE_ATOM_03;
-                       }
-                       elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF']))
-                       {
-                               if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['channel'])
-                               || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['image'])
-                               || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item'])
-                               || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_10]['textinput']))
-                               {
-                                       $this->data['type'] &= SIMPLEPIE_TYPE_RSS_10;
-                               }
-                               if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['channel'])
-                               || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['image'])
-                               || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item'])
-                               || isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_090]['textinput']))
-                               {
-                                       $this->data['type'] &= SIMPLEPIE_TYPE_RSS_090;
-                               }
-                       }
-                       elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss']))
-                       {
-                               $this->data['type'] &= SIMPLEPIE_TYPE_RSS_ALL;
-                               if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['attribs']['']['version']))
-                               {
-                                       switch (trim($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['attribs']['']['version']))
-                                       {
-                                               case '0.91':
-                                                       $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091;
-                                                       if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['skiphours']['hour'][0]['data']))
-                                                       {
-                                                               switch (trim($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['skiphours']['hour'][0]['data']))
-                                                               {
-                                                                       case '0':
-                                                                               $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091_NETSCAPE;
-                                                                               break;
-
-                                                                       case '24':
-                                                                               $this->data['type'] &= SIMPLEPIE_TYPE_RSS_091_USERLAND;
-                                                                               break;
-                                                               }
-                                                       }
-                                                       break;
-
-                                               case '0.92':
-                                                       $this->data['type'] &= SIMPLEPIE_TYPE_RSS_092;
-                                                       break;
-
-                                               case '0.93':
-                                                       $this->data['type'] &= SIMPLEPIE_TYPE_RSS_093;
-                                                       break;
-
-                                               case '0.94':
-                                                       $this->data['type'] &= SIMPLEPIE_TYPE_RSS_094;
-                                                       break;
-
-                                               case '2.0':
-                                                       $this->data['type'] &= SIMPLEPIE_TYPE_RSS_20;
-                                                       break;
-                                       }
-                               }
-                       }
-                       else
-                       {
-                               $this->data['type'] = SIMPLEPIE_TYPE_NONE;
-                       }
-               }
-               return $this->data['type'];
-       }
-
-       /**
-        * Get the URL for the feed
-        *
-        * May or may not be different from the URL passed to {@see set_feed_url()},
-        * depending on whether auto-discovery was used.
-        *
-        * @since Preview Release (previously called `get_feed_url()` since SimplePie 0.8.)
-        * @todo If we have a perm redirect we should return the new URL
-        * @todo When we make the above change, let's support <itunes:new-feed-url> as well
-        * @todo Also, |atom:link|@rel=self
-        * @return string|null
-        */
-       public function subscribe_url()
-       {
-               if ($this->feed_url !== null)
-               {
-                       return $this->sanitize($this->feed_url, SIMPLEPIE_CONSTRUCT_IRI);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get data for an feed-level element
-        *
-        * This method allows you to get access to ANY element/attribute that is a
-        * sub-element of the opening feed tag.
-        *
-        * The return value is an indexed array of elements matching the given
-        * namespace and tag name. Each element has `attribs`, `data` and `child`
-        * subkeys. For `attribs` and `child`, these contain namespace subkeys.
-        * `attribs` then has one level of associative name => value data (where
-        * `value` is a string) after the namespace. `child` has tag-indexed keys
-        * after the namespace, each member of which is an indexed array matching
-        * this same format.
-        *
-        * For example:
-        * <pre>
-        * // This is probably a bad example because we already support
-        * // <media:content> natively, but it shows you how to parse through
-        * // the nodes.
-        * $group = $item->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'group');
-        * $content = $group[0]['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'];
-        * $file = $content[0]['attribs']['']['url'];
-        * echo $file;
-        * </pre>
-        *
-        * @since 1.0
-        * @see http://simplepie.org/wiki/faq/supported_xml_namespaces
-        * @param string $namespace The URL of the XML namespace of the elements you're trying to access
-        * @param string $tag Tag name
-        * @return array
-        */
-       public function get_feed_tags($namespace, $tag)
-       {
-               $type = $this->get_type();
-               if ($type & SIMPLEPIE_TYPE_ATOM_10)
-               {
-                       if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['child'][$namespace][$tag]))
-                       {
-                               return $this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['child'][$namespace][$tag];
-                       }
-               }
-               if ($type & SIMPLEPIE_TYPE_ATOM_03)
-               {
-                       if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['child'][$namespace][$tag]))
-                       {
-                               return $this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['child'][$namespace][$tag];
-                       }
-               }
-               if ($type & SIMPLEPIE_TYPE_RSS_RDF)
-               {
-                       if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][$namespace][$tag]))
-                       {
-                               return $this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['child'][$namespace][$tag];
-                       }
-               }
-               if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION)
-               {
-                       if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][$namespace][$tag]))
-                       {
-                               return $this->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][$namespace][$tag];
-                       }
-               }
-               return null;
-       }
-
-       /**
-        * Get data for an channel-level element
-        *
-        * This method allows you to get access to ANY element/attribute in the
-        * channel/header section of the feed.
-        *
-        * See {@see SimplePie::get_feed_tags()} for a description of the return value
-        *
-        * @since 1.0
-        * @see http://simplepie.org/wiki/faq/supported_xml_namespaces
-        * @param string $namespace The URL of the XML namespace of the elements you're trying to access
-        * @param string $tag Tag name
-        * @return array
-        */
-       public function get_channel_tags($namespace, $tag)
-       {
-               $type = $this->get_type();
-               if ($type & SIMPLEPIE_TYPE_ATOM_ALL)
-               {
-                       if ($return = $this->get_feed_tags($namespace, $tag))
-                       {
-                               return $return;
-                       }
-               }
-               if ($type & SIMPLEPIE_TYPE_RSS_10)
-               {
-                       if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'channel'))
-                       {
-                               if (isset($channel[0]['child'][$namespace][$tag]))
-                               {
-                                       return $channel[0]['child'][$namespace][$tag];
-                               }
-                       }
-               }
-               if ($type & SIMPLEPIE_TYPE_RSS_090)
-               {
-                       if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'channel'))
-                       {
-                               if (isset($channel[0]['child'][$namespace][$tag]))
-                               {
-                                       return $channel[0]['child'][$namespace][$tag];
-                               }
-                       }
-               }
-               if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION)
-               {
-                       if ($channel = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'channel'))
-                       {
-                               if (isset($channel[0]['child'][$namespace][$tag]))
-                               {
-                                       return $channel[0]['child'][$namespace][$tag];
-                               }
-                       }
-               }
-               return null;
-       }
-
-       /**
-        * Get data for an channel-level element
-        *
-        * This method allows you to get access to ANY element/attribute in the
-        * image/logo section of the feed.
-        *
-        * See {@see SimplePie::get_feed_tags()} for a description of the return value
-        *
-        * @since 1.0
-        * @see http://simplepie.org/wiki/faq/supported_xml_namespaces
-        * @param string $namespace The URL of the XML namespace of the elements you're trying to access
-        * @param string $tag Tag name
-        * @return array
-        */
-       public function get_image_tags($namespace, $tag)
-       {
-               $type = $this->get_type();
-               if ($type & SIMPLEPIE_TYPE_RSS_10)
-               {
-                       if ($image = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'image'))
-                       {
-                               if (isset($image[0]['child'][$namespace][$tag]))
-                               {
-                                       return $image[0]['child'][$namespace][$tag];
-                               }
-                       }
-               }
-               if ($type & SIMPLEPIE_TYPE_RSS_090)
-               {
-                       if ($image = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'image'))
-                       {
-                               if (isset($image[0]['child'][$namespace][$tag]))
-                               {
-                                       return $image[0]['child'][$namespace][$tag];
-                               }
-                       }
-               }
-               if ($type & SIMPLEPIE_TYPE_RSS_SYNDICATION)
-               {
-                       if ($image = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'image'))
-                       {
-                               if (isset($image[0]['child'][$namespace][$tag]))
-                               {
-                                       return $image[0]['child'][$namespace][$tag];
-                               }
-                       }
-               }
-               return null;
-       }
-
-       /**
-        * Get the base URL value from the feed
-        *
-        * Uses `<xml:base>` if available, otherwise uses the first link in the
-        * feed, or failing that, the URL of the feed itself.
-        *
-        * @see get_link
-        * @see subscribe_url
-        *
-        * @param array $element
-        * @return string
-        */
-       public function get_base($element = array())
-       {
-               if (!($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION) && !empty($element['xml_base_explicit']) && isset($element['xml_base']))
-               {
-                       return $element['xml_base'];
-               }
-               elseif ($this->get_link() !== null)
-               {
-                       return $this->get_link();
-               }
-               else
-               {
-                       return $this->subscribe_url();
-               }
-       }
-
-       /**
-        * Sanitize feed data
-        *
-        * @access private
-        * @see SimplePie_Sanitize::sanitize()
-        * @param string $data Data to sanitize
-        * @param int $type One of the SIMPLEPIE_CONSTRUCT_* constants
-        * @param string $base Base URL to resolve URLs against
-        * @return string Sanitized data
-        */
-       public function sanitize($data, $type, $base = '')
-       {
-               return $this->sanitize->sanitize($data, $type, $base);
-       }
-
-       /**
-        * Get the title of the feed
-        *
-        * Uses `<atom:title>`, `<title>` or `<dc:title>`
-        *
-        * @since 1.0 (previously called `get_feed_title` since 0.8)
-        * @return string|null
-        */
-       public function get_title()
-       {
-               if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title'))
-               {
-                       return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title'))
-               {
-                       return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get a category for the feed
-        *
-        * @since Unknown
-        * @param int $key The category that you want to return.  Remember that arrays begin with 0, not 1
-        * @return SimplePie_Category|null
-        */
-       public function get_category($key = 0)
-       {
-               $categories = $this->get_categories();
-               if (isset($categories[$key]))
-               {
-                       return $categories[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get all categories for the feed
-        *
-        * Uses `<atom:category>`, `<category>` or `<dc:subject>`
-        *
-        * @since Unknown
-        * @return array|null List of {@see SimplePie_Category} objects
-        */
-       public function get_categories()
-       {
-               $categories = array();
-
-               foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category)
-               {
-                       $term = null;
-                       $scheme = null;
-                       $label = null;
-                       if (isset($category['attribs']['']['term']))
-                       {
-                               $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($category['attribs']['']['scheme']))
-                       {
-                               $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($category['attribs']['']['label']))
-                       {
-                               $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       $categories[] = $this->registry->create('Category', array($term, $scheme, $label));
-               }
-               foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category)
-               {
-                       // This is really the label, but keep this as the term also for BC.
-                       // Label will also work on retrieving because that falls back to term.
-                       $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       if (isset($category['attribs']['']['domain']))
-                       {
-                               $scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       else
-                       {
-                               $scheme = null;
-                       }
-                       $categories[] = $this->registry->create('Category', array($term, $scheme, null));
-               }
-               foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category)
-               {
-                       $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
-               }
-               foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category)
-               {
-                       $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
-               }
-
-               if (!empty($categories))
-               {
-                       return array_unique($categories);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get an author for the feed
-        *
-        * @since 1.1
-        * @param int $key The author that you want to return.  Remember that arrays begin with 0, not 1
-        * @return SimplePie_Author|null
-        */
-       public function get_author($key = 0)
-       {
-               $authors = $this->get_authors();
-               if (isset($authors[$key]))
-               {
-                       return $authors[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get all authors for the feed
-        *
-        * Uses `<atom:author>`, `<author>`, `<dc:creator>` or `<itunes:author>`
-        *
-        * @since 1.1
-        * @return array|null List of {@see SimplePie_Author} objects
-        */
-       public function get_authors()
-       {
-               $authors = array();
-               foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author)
-               {
-                       $name = null;
-                       $uri = null;
-                       $email = null;
-                       if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
-                       {
-                               $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
-                       {
-                               $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]));
-                       }
-                       if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data']))
-                       {
-                               $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if ($name !== null || $email !== null || $uri !== null)
-                       {
-                               $authors[] = $this->registry->create('Author', array($name, $uri, $email));
-                       }
-               }
-               if ($author = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author'))
-               {
-                       $name = null;
-                       $url = null;
-                       $email = null;
-                       if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data']))
-                       {
-                               $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data']))
-                       {
-                               $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]));
-                       }
-                       if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data']))
-                       {
-                               $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if ($name !== null || $email !== null || $url !== null)
-                       {
-                               $authors[] = $this->registry->create('Author', array($name, $url, $email));
-                       }
-               }
-               foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author)
-               {
-                       $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
-               }
-               foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author)
-               {
-                       $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
-               }
-               foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author)
-               {
-                       $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
-               }
-
-               if (!empty($authors))
-               {
-                       return array_unique($authors);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get a contributor for the feed
-        *
-        * @since 1.1
-        * @param int $key The contrbutor that you want to return.  Remember that arrays begin with 0, not 1
-        * @return SimplePie_Author|null
-        */
-       public function get_contributor($key = 0)
-       {
-               $contributors = $this->get_contributors();
-               if (isset($contributors[$key]))
-               {
-                       return $contributors[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get all contributors for the feed
-        *
-        * Uses `<atom:contributor>`
-        *
-        * @since 1.1
-        * @return array|null List of {@see SimplePie_Author} objects
-        */
-       public function get_contributors()
-       {
-               $contributors = array();
-               foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor)
-               {
-                       $name = null;
-                       $uri = null;
-                       $email = null;
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
-                       {
-                               $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
-                       {
-                               $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]));
-                       }
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data']))
-                       {
-                               $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if ($name !== null || $email !== null || $uri !== null)
-                       {
-                               $contributors[] = $this->registry->create('Author', array($name, $uri, $email));
-                       }
-               }
-               foreach ((array) $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor)
-               {
-                       $name = null;
-                       $url = null;
-                       $email = null;
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data']))
-                       {
-                               $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data']))
-                       {
-                               $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]));
-                       }
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data']))
-                       {
-                               $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if ($name !== null || $email !== null || $url !== null)
-                       {
-                               $contributors[] = $this->registry->create('Author', array($name, $url, $email));
-                       }
-               }
-
-               if (!empty($contributors))
-               {
-                       return array_unique($contributors);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get a single link for the feed
-        *
-        * @since 1.0 (previously called `get_feed_link` since Preview Release, `get_feed_permalink()` since 0.8)
-        * @param int $key The link that you want to return.  Remember that arrays begin with 0, not 1
-        * @param string $rel The relationship of the link to return
-        * @return string|null Link URL
-        */
-       public function get_link($key = 0, $rel = 'alternate')
-       {
-               $links = $this->get_links($rel);
-               if (isset($links[$key]))
-               {
-                       return $links[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the permalink for the item
-        *
-        * Returns the first link available with a relationship of "alternate".
-        * Identical to {@see get_link()} with key 0
-        *
-        * @see get_link
-        * @since 1.0 (previously called `get_feed_link` since Preview Release, `get_feed_permalink()` since 0.8)
-        * @internal Added for parity between the parent-level and the item/entry-level.
-        * @return string|null Link URL
-        */
-       public function get_permalink()
-       {
-               return $this->get_link(0);
-       }
-
-       /**
-        * Get all links for the feed
-        *
-        * Uses `<atom:link>` or `<link>`
-        *
-        * @since Beta 2
-        * @param string $rel The relationship of links to return
-        * @return array|null Links found for the feed (strings)
-        */
-       public function get_links($rel = 'alternate')
-       {
-               if (!isset($this->data['links']))
-               {
-                       $this->data['links'] = array();
-                       if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link'))
-                       {
-                               foreach ($links as $link)
-                               {
-                                       if (isset($link['attribs']['']['href']))
-                                       {
-                                               $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
-                                               $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
-                                       }
-                               }
-                       }
-                       if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link'))
-                       {
-                               foreach ($links as $link)
-                               {
-                                       if (isset($link['attribs']['']['href']))
-                                       {
-                                               $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
-                                               $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
-
-                                       }
-                               }
-                       }
-                       if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link'))
-                       {
-                               $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
-                       }
-                       if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link'))
-                       {
-                               $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
-                       }
-                       if ($links = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link'))
-                       {
-                               $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
-                       }
-
-                       $keys = array_keys($this->data['links']);
-                       foreach ($keys as $key)
-                       {
-                               if ($this->registry->call('Misc', 'is_isegment_nz_nc', array($key)))
-                               {
-                                       if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]))
-                                       {
-                                               $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]);
-                                               $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key];
-                                       }
-                                       else
-                                       {
-                                               $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key];
-                                       }
-                               }
-                               elseif (substr($key, 0, 41) === SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY)
-                               {
-                                       $this->data['links'][substr($key, 41)] =& $this->data['links'][$key];
-                               }
-                               $this->data['links'][$key] = array_unique($this->data['links'][$key]);
-                       }
-               }
-
-               if (isset($this->data['links'][$rel]))
-               {
-                       return $this->data['links'][$rel];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       public function get_all_discovered_feeds()
-       {
-               return $this->all_discovered_feeds;
-       }
-
-       /**
-        * Get the content for the item
-        *
-        * Uses `<atom:subtitle>`, `<atom:tagline>`, `<description>`,
-        * `<dc:description>`, `<itunes:summary>` or `<itunes:subtitle>`
-        *
-        * @since 1.0 (previously called `get_feed_description()` since 0.8)
-        * @return string|null
-        */
-       public function get_description()
-       {
-               if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'subtitle'))
-               {
-                       return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'tagline'))
-               {
-                       return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the copyright info for the feed
-        *
-        * Uses `<atom:rights>`, `<atom:copyright>` or `<dc:rights>`
-        *
-        * @since 1.0 (previously called `get_feed_copyright()` since 0.8)
-        * @return string|null
-        */
-       public function get_copyright()
-       {
-               if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights'))
-               {
-                       return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'copyright'))
-               {
-                       return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'copyright'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the language for the feed
-        *
-        * Uses `<language>`, `<dc:language>`, or @xml_lang
-        *
-        * @since 1.0 (previously called `get_feed_language()` since 0.8)
-        * @return string|null
-        */
-       public function get_language()
-       {
-               if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'language'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_11, 'language'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_DC_10, 'language'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['xml_lang']))
-               {
-                       return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['xml_lang']))
-               {
-                       return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif (isset($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['xml_lang']))
-               {
-                       return $this->sanitize($this->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif (isset($this->data['headers']['content-language']))
-               {
-                       return $this->sanitize($this->data['headers']['content-language'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the latitude coordinates for the item
-        *
-        * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications
-        *
-        * Uses `<geo:lat>` or `<georss:point>`
-        *
-        * @since 1.0
-        * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo
-        * @link http://www.georss.org/ GeoRSS
-        * @return string|null
-        */
-       public function get_latitude()
-       {
-
-               if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat'))
-               {
-                       return (float) $return[0]['data'];
-               }
-               elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
-               {
-                       return (float) $match[1];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the longitude coordinates for the feed
-        *
-        * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications
-        *
-        * Uses `<geo:long>`, `<geo:lon>` or `<georss:point>`
-        *
-        * @since 1.0
-        * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo
-        * @link http://www.georss.org/ GeoRSS
-        * @return string|null
-        */
-       public function get_longitude()
-       {
-               if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long'))
-               {
-                       return (float) $return[0]['data'];
-               }
-               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon'))
-               {
-                       return (float) $return[0]['data'];
-               }
-               elseif (($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
-               {
-                       return (float) $match[2];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the feed logo's title
-        *
-        * RSS 0.9.0, 1.0 and 2.0 feeds are allowed to have a "feed logo" title.
-        *
-        * Uses `<image><title>` or `<image><dc:title>`
-        *
-        * @return string|null
-        */
-       public function get_image_title()
-       {
-               if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the feed logo's URL
-        *
-        * RSS 0.9.0, 2.0, Atom 1.0, and feeds with iTunes RSS tags are allowed to
-        * have a "feed logo" URL. This points directly to the image itself.
-        *
-        * Uses `<itunes:image>`, `<atom:logo>`, `<atom:icon>`,
-        * `<image><title>` or `<image><dc:title>`
-        *
-        * @return string|null
-        */
-       public function get_image_url()
-       {
-               if ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'image'))
-               {
-                       return $this->sanitize($return[0]['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI);
-               }
-               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'logo'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'url'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'url'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'url'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the feed logo's link
-        *
-        * RSS 0.9.0, 1.0 and 2.0 feeds are allowed to have a "feed logo" link. This
-        * points to a human-readable page that the image should link to.
-        *
-        * Uses `<itunes:image>`, `<atom:logo>`, `<atom:icon>`,
-        * `<image><title>` or `<image><dc:title>`
-        *
-        * @return string|null
-        */
-       public function get_image_link()
-       {
-               if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the feed logo's link
-        *
-        * RSS 2.0 feeds are allowed to have a "feed logo" width.
-        *
-        * Uses `<image><width>` or defaults to 88.0 if no width is specified and
-        * the feed is an RSS 2.0 feed.
-        *
-        * @return int|float|null
-        */
-       public function get_image_width()
-       {
-               if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'width'))
-               {
-                       return round($return[0]['data']);
-               }
-               elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'url'))
-               {
-                       return 88.0;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the feed logo's height
-        *
-        * RSS 2.0 feeds are allowed to have a "feed logo" height.
-        *
-        * Uses `<image><height>` or defaults to 31.0 if no height is specified and
-        * the feed is an RSS 2.0 feed.
-        *
-        * @return int|float|null
-        */
-       public function get_image_height()
-       {
-               if ($return = $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'height'))
-               {
-                       return round($return[0]['data']);
-               }
-               elseif ($this->get_type() & SIMPLEPIE_TYPE_RSS_SYNDICATION && $this->get_image_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'url'))
-               {
-                       return 31.0;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the number of items in the feed
-        *
-        * This is well-suited for {@link http://php.net/for for()} loops with
-        * {@see get_item()}
-        *
-        * @param int $max Maximum value to return. 0 for no limit
-        * @return int Number of items in the feed
-        */
-       public function get_item_quantity($max = 0)
-       {
-               $max = (int) $max;
-               $qty = count($this->get_items());
-               if ($max === 0)
-               {
-                       return $qty;
-               }
-               else
-               {
-                       return ($qty > $max) ? $max : $qty;
-               }
-       }
-
-       /**
-        * Get a single item from the feed
-        *
-        * This is better suited for {@link http://php.net/for for()} loops, whereas
-        * {@see get_items()} is better suited for
-        * {@link http://php.net/foreach foreach()} loops.
-        *
-        * @see get_item_quantity()
-        * @since Beta 2
-        * @param int $key The item that you want to return.  Remember that arrays begin with 0, not 1
-        * @return SimplePie_Item|null
-        */
-       public function get_item($key = 0)
-       {
-               $items = $this->get_items();
-               if (isset($items[$key]))
-               {
-                       return $items[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get all items from the feed
-        *
-        * This is better suited for {@link http://php.net/for for()} loops, whereas
-        * {@see get_items()} is better suited for
-        * {@link http://php.net/foreach foreach()} loops.
-        *
-        * @see get_item_quantity
-        * @since Beta 2
-        * @param int $start Index to start at
-        * @param int $end Number of items to return. 0 for all items after `$start`
-        * @return array|null List of {@see SimplePie_Item} objects
-        */
-       public function get_items($start = 0, $end = 0)
-       {
-               if (!isset($this->data['items']))
-               {
-                       if (!empty($this->multifeed_objects))
-                       {
-                               $this->data['items'] = SimplePie::merge_items($this->multifeed_objects, $start, $end, $this->item_limit);
-                       }
-                       else
-                       {
-                               $this->data['items'] = array();
-                               if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'entry'))
-                               {
-                                       $keys = array_keys($items);
-                                       foreach ($keys as $key)
-                                       {
-                                               $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key]));
-                                       }
-                               }
-                               if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'entry'))
-                               {
-                                       $keys = array_keys($items);
-                                       foreach ($keys as $key)
-                                       {
-                                               $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key]));
-                                       }
-                               }
-                               if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'item'))
-                               {
-                                       $keys = array_keys($items);
-                                       foreach ($keys as $key)
-                                       {
-                                               $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key]));
-                                       }
-                               }
-                               if ($items = $this->get_feed_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'item'))
-                               {
-                                       $keys = array_keys($items);
-                                       foreach ($keys as $key)
-                                       {
-                                               $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key]));
-                                       }
-                               }
-                               if ($items = $this->get_channel_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'item'))
-                               {
-                                       $keys = array_keys($items);
-                                       foreach ($keys as $key)
-                                       {
-                                               $this->data['items'][] = $this->registry->create('Item', array($this, $items[$key]));
-                                       }
-                               }
-                       }
-               }
-
-               if (!empty($this->data['items']))
-               {
-                       // If we want to order it by date, check if all items have a date, and then sort it
-                       if ($this->order_by_date && empty($this->multifeed_objects))
-                       {
-                               if (!isset($this->data['ordered_items']))
-                               {
-                                       $do_sort = true;
-                                       foreach ($this->data['items'] as $item)
-                                       {
-                                               if (!$item->get_date('U'))
-                                               {
-                                                       $do_sort = false;
-                                                       break;
-                                               }
-                                       }
-                                       $item = null;
-                                       $this->data['ordered_items'] = $this->data['items'];
-                                       if ($do_sort)
-                                       {
-                                               usort($this->data['ordered_items'], array(get_class($this), 'sort_items'));
-                                       }
-                               }
-                               $items = $this->data['ordered_items'];
-                       }
-                       else
-                       {
-                               $items = $this->data['items'];
-                       }
-
-                       // Slice the data as desired
-                       if ($end === 0)
-                       {
-                               return array_slice($items, $start);
-                       }
-                       else
-                       {
-                               return array_slice($items, $start, $end);
-                       }
-               }
-               else
-               {
-                       return array();
-               }
-       }
-
-       /**
-        * Set the favicon handler
-        *
-        * @deprecated Use your own favicon handling instead
-        */
-       public function set_favicon_handler($page = false, $qs = 'i')
-       {
-               $level = defined('E_USER_DEPRECATED') ? E_USER_DEPRECATED : E_USER_WARNING;
-               trigger_error('Favicon handling has been removed, please use your own handling', $level);
-               return false;
-       }
-
-       /**
-        * Get the favicon for the current feed
-        *
-        * @deprecated Use your own favicon handling instead
-        */
-       public function get_favicon()
-       {
-               $level = defined('E_USER_DEPRECATED') ? E_USER_DEPRECATED : E_USER_WARNING;
-               trigger_error('Favicon handling has been removed, please use your own handling', $level);
-
-               if (($url = $this->get_link()) !== null)
-               {
-                       return 'http://g.etfv.co/' . urlencode($url);
-               }
-
-               return false;
-       }
-
-       /**
-        * Magic method handler
-        *
-        * @param string $method Method name
-        * @param array $args Arguments to the method
-        * @return mixed
-        */
-       public function __call($method, $args)
-       {
-               if (strpos($method, 'subscribe_') === 0)
-               {
-                       $level = defined('E_USER_DEPRECATED') ? E_USER_DEPRECATED : E_USER_WARNING;
-                       trigger_error('subscribe_*() has been deprecated, implement the callback yourself', $level);
-                       return '';
-               }
-               if ($method === 'enable_xml_dump')
-               {
-                       $level = defined('E_USER_DEPRECATED') ? E_USER_DEPRECATED : E_USER_WARNING;
-                       trigger_error('enable_xml_dump() has been deprecated, use get_raw_data() instead', $level);
-                       return false;
-               }
-
-               $class = get_class($this);
-               $trace = debug_backtrace();
-               $file = $trace[0]['file'];
-               $line = $trace[0]['line'];
-               trigger_error("Call to undefined method $class::$method() in $file on line $line", E_USER_ERROR);
-       }
-
-       /**
-        * Sorting callback for items
-        *
-        * @access private
-        * @param SimplePie $a
-        * @param SimplePie $b
-        * @return boolean
-        */
-       public static function sort_items($a, $b)
-       {
-               return $a->get_date('U') <= $b->get_date('U');
-       }
-
-       /**
-        * Merge items from several feeds into one
-        *
-        * If you're merging multiple feeds together, they need to all have dates
-        * for the items or else SimplePie will refuse to sort them.
-        *
-        * @link http://simplepie.org/wiki/tutorial/sort_multiple_feeds_by_time_and_date#if_feeds_require_separate_per-feed_settings
-        * @param array $urls List of SimplePie feed objects to merge
-        * @param int $start Starting item
-        * @param int $end Number of items to return
-        * @param int $limit Maximum number of items per feed
-        * @return array
-        */
-       public static function merge_items($urls, $start = 0, $end = 0, $limit = 0)
-       {
-               if (is_array($urls) && sizeof($urls) > 0)
-               {
-                       $items = array();
-                       foreach ($urls as $arg)
-                       {
-                               if ($arg instanceof SimplePie)
-                               {
-                                       $items = array_merge($items, $arg->get_items(0, $limit));
-                               }
-                               else
-                               {
-                                       trigger_error('Arguments must be SimplePie objects', E_USER_WARNING);
-                               }
-                       }
-
-                       $do_sort = true;
-                       foreach ($items as $item)
-                       {
-                               if (!$item->get_date('U'))
-                               {
-                                       $do_sort = false;
-                                       break;
-                               }
-                       }
-                       $item = null;
-                       if ($do_sort)
-                       {
-                               usort($items, array(get_class($urls[0]), 'sort_items'));
-                       }
-
-                       if ($end === 0)
-                       {
-                               return array_slice($items, $start);
-                       }
-                       else
-                       {
-                               return array_slice($items, $start, $end);
-                       }
-               }
-               else
-               {
-                       trigger_error('Cannot merge zero SimplePie objects', E_USER_WARNING);
-                       return array();
-               }
-       }
-}
-
-/**
- * Manages all author-related data
- *
- * Used by {@see SimplePie_Item::get_author()} and {@see SimplePie::get_authors()}
- *
- * This class can be overloaded with {@see SimplePie::set_author_class()}
- *
- * @package SimplePie
- * @subpackage API
- */
-class SimplePie_Author
-{
-       /**
-        * Author's name
-        *
-        * @var string
-        * @see get_name()
-        */
-       var $name;
-
-       /**
-        * Author's link
-        *
-        * @var string
-        * @see get_link()
-        */
-       var $link;
-
-       /**
-        * Author's email address
-        *
-        * @var string
-        * @see get_email()
-        */
-       var $email;
-
-       /**
-        * Constructor, used to input the data
-        *
-        * @param string $name
-        * @param string $link
-        * @param string $email
-        */
-       public function __construct($name = null, $link = null, $email = null)
-       {
-               $this->name = $name;
-               $this->link = $link;
-               $this->email = $email;
-       }
-
-       /**
-        * String-ified version
-        *
-        * @return string
-        */
-       public function __toString()
-       {
-               // There is no $this->data here
-               return md5(serialize($this));
-       }
-
-       /**
-        * Author's name
-        *
-        * @return string|null
-        */
-       public function get_name()
-       {
-               if ($this->name !== null)
-               {
-                       return $this->name;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Author's link
-        *
-        * @return string|null
-        */
-       public function get_link()
-       {
-               if ($this->link !== null)
-               {
-                       return $this->link;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Author's email address
-        *
-        * @return string|null
-        */
-       public function get_email()
-       {
-               if ($this->email !== null)
-               {
-                       return $this->email;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-}
-
-/**
- * Base for cache objects
- *
- * Classes to be used with {@see SimplePie_Cache::register()} are expected
- * to implement this interface.
- *
- * @package SimplePie
- * @subpackage Caching
- */
-interface SimplePie_Cache_Base
-{
-       /**
-        * Feed cache type
-        *
-        * @var string
-        */
-       const TYPE_FEED = 'spc';
-
-       /**
-        * Image cache type
-        *
-        * @var string
-        */
-       const TYPE_IMAGE = 'spi';
-
-       /**
-        * Create a new cache object
-        *
-        * @param string $location Location string (from SimplePie::$cache_location)
-        * @param string $name Unique ID for the cache
-        * @param string $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
-        */
-       public function __construct($location, $name, $type);
-
-       /**
-        * Save data to the cache
-        *
-        * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
-        * @return bool Successfulness
-        */
-       public function save($data);
-
-       /**
-        * Retrieve the data saved to the cache
-        *
-        * @return array Data for SimplePie::$data
-        */
-       public function load();
-
-       /**
-        * Retrieve the last modified time for the cache
-        *
-        * @return int Timestamp
-        */
-       public function mtime();
-
-       /**
-        * Set the last modified time to the current time
-        *
-        * @return bool Success status
-        */
-       public function touch();
-
-       /**
-        * Remove the cache
-        *
-        * @return bool Success status
-        */
-       public function unlink();
-}
-
-/**
- * Base class for database-based caches
- *
- * @package SimplePie
- * @subpackage Caching
- */
-abstract class SimplePie_Cache_DB implements SimplePie_Cache_Base
-{
-       /**
-        * Helper for database conversion
-        *
-        * Converts a given {@see SimplePie} object into data to be stored
-        *
-        * @param SimplePie $data
-        * @return array First item is the serialized data for storage, second item is the unique ID for this item
-        */
-       protected static function prepare_simplepie_object_for_cache($data)
-       {
-               $items = $data->get_items();
-               $items_by_id = array();
-
-               if (!empty($items))
-               {
-                       foreach ($items as $item)
-                       {
-                               $items_by_id[$item->get_id()] = $item;
-                       }
-
-                       if (count($items_by_id) !== count($items))
-                       {
-                               $items_by_id = array();
-                               foreach ($items as $item)
-                               {
-                                       $items_by_id[$item->get_id(true)] = $item;
-                               }
-                       }
-
-                       if (isset($data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]))
-                       {
-                               $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0];
-                       }
-                       elseif (isset($data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]))
-                       {
-                               $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0];
-                       }
-                       elseif (isset($data->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]))
-                       {
-                               $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0];
-                       }
-                       elseif (isset($data->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['channel'][0]))
-                       {
-                               $channel =& $data->data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]['child'][SIMPLEPIE_NAMESPACE_RSS_20]['channel'][0];
-                       }
-                       else
-                       {
-                               $channel = null;
-                       }
-
-                       if ($channel !== null)
-                       {
-                               if (isset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['entry']))
-                               {
-                                       unset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['entry']);
-                               }
-                               if (isset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['entry']))
-                               {
-                                       unset($channel['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['entry']);
-                               }
-                               if (isset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item']))
-                               {
-                                       unset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_10]['item']);
-                               }
-                               if (isset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item']))
-                               {
-                                       unset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_090]['item']);
-                               }
-                               if (isset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_20]['item']))
-                               {
-                                       unset($channel['child'][SIMPLEPIE_NAMESPACE_RSS_20]['item']);
-                               }
-                       }
-                       if (isset($data->data['items']))
-                       {
-                               unset($data->data['items']);
-                       }
-                       if (isset($data->data['ordered_items']))
-                       {
-                               unset($data->data['ordered_items']);
-                       }
-               }
-               return array(serialize($data->data), $items_by_id);
-       }
-}
-
-/**
- * Caches data to the filesystem
- *
- * @package SimplePie
- * @subpackage Caching
- */
-class SimplePie_Cache_File implements SimplePie_Cache_Base
-{
-       /**
-        * Location string
-        *
-        * @see SimplePie::$cache_location
-        * @var string
-        */
-       protected $location;
-
-       /**
-        * Filename
-        *
-        * @var string
-        */
-       protected $filename;
-
-       /**
-        * File extension
-        *
-        * @var string
-        */
-       protected $extension;
-
-       /**
-        * File path
-        *
-        * @var string
-        */
-       protected $name;
-
-       /**
-        * Create a new cache object
-        *
-        * @param string $location Location string (from SimplePie::$cache_location)
-        * @param string $name Unique ID for the cache
-        * @param string $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
-        */
-       public function __construct($location, $name, $type)
-       {
-               $this->location = $location;
-               $this->filename = $name;
-               $this->extension = $type;
-               $this->name = "$this->location/$this->filename.$this->extension";
-       }
-
-       /**
-        * Save data to the cache
-        *
-        * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
-        * @return bool Successfulness
-        */
-       public function save($data)
-       {
-               if (file_exists($this->name) && is_writeable($this->name) || file_exists($this->location) && is_writeable($this->location))
-               {
-                       if ($data instanceof SimplePie)
-                       {
-                               $data = $data->data;
-                       }
-
-                       $data = serialize($data);
-                       return (bool) file_put_contents($this->name, $data);
-               }
-               return false;
-       }
-
-       /**
-        * Retrieve the data saved to the cache
-        *
-        * @return array Data for SimplePie::$data
-        */
-       public function load()
-       {
-               if (file_exists($this->name) && is_readable($this->name))
-               {
-                       return unserialize(file_get_contents($this->name));
-               }
-               return false;
-       }
-
-       /**
-        * Retrieve the last modified time for the cache
-        *
-        * @return int Timestamp
-        */
-       public function mtime()
-       {
-               if (file_exists($this->name))
-               {
-                       return filemtime($this->name);
-               }
-               return false;
-       }
-
-       /**
-        * Set the last modified time to the current time
-        *
-        * @return bool Success status
-        */
-       public function touch()
-       {
-               if (file_exists($this->name))
-               {
-                       return touch($this->name);
-               }
-               return false;
-       }
-
-       /**
-        * Remove the cache
-        *
-        * @return bool Success status
-        */
-       public function unlink()
-       {
-               if (file_exists($this->name))
-               {
-                       return unlink($this->name);
-               }
-               return false;
-       }
-}
-
-/**
- * Caches data to memcache
- *
- * Registered for URLs with the "memcache" protocol
- *
- * For example, `memcache://localhost:11211/?timeout=3600&prefix=sp_` will
- * connect to memcache on `localhost` on port 11211. All tables will be
- * prefixed with `sp_` and data will expire after 3600 seconds
- *
- * @package SimplePie
- * @subpackage Caching
- * @uses Memcache
- */
-class SimplePie_Cache_Memcache implements SimplePie_Cache_Base
-{
-       /**
-        * Memcache instance
-        *
-        * @var Memcache
-        */
-       protected $cache;
-
-       /**
-        * Options
-        *
-        * @var array
-        */
-       protected $options;
-
-       /**
-        * Cache name
-        *
-        * @var string
-        */
-       protected $name;
-
-       /**
-        * Create a new cache object
-        *
-        * @param string $location Location string (from SimplePie::$cache_location)
-        * @param string $name Unique ID for the cache
-        * @param string $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
-        */
-       public function __construct($location, $name, $type)
-       {
-               $this->options = array(
-                       'host' => '127.0.0.1',
-                       'port' => 11211,
-                       'extras' => array(
-                               'timeout' => 3600, // one hour
-                               'prefix' => 'simplepie_',
-                       ),
-               );
-               $parsed = SimplePie_Cache::parse_URL($location);
-               $this->options['host'] = empty($parsed['host']) ? $this->options['host'] : $parsed['host'];
-               $this->options['port'] = empty($parsed['port']) ? $this->options['port'] : $parsed['port'];
-               $this->options['extras'] = array_merge($this->options['extras'], $parsed['extras']);
-               $this->name = $this->options['extras']['prefix'] . md5("$name:$type");
-
-               $this->cache = new Memcache();
-               $this->cache->addServer($this->options['host'], (int) $this->options['port']);
-       }
-
-       /**
-        * Save data to the cache
-        *
-        * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
-        * @return bool Successfulness
-        */
-       public function save($data)
-       {
-               if ($data instanceof SimplePie)
-               {
-                       $data = $data->data;
-               }
-               return $this->cache->set($this->name, serialize($data), MEMCACHE_COMPRESSED, (int) $this->options['extras']['timeout']);
-       }
-
-       /**
-        * Retrieve the data saved to the cache
-        *
-        * @return array Data for SimplePie::$data
-        */
-       public function load()
-       {
-               $data = $this->cache->get($this->name);
-
-               if ($data !== false)
-               {
-                       return unserialize($data);
-               }
-               return false;
-       }
-
-       /**
-        * Retrieve the last modified time for the cache
-        *
-        * @return int Timestamp
-        */
-       public function mtime()
-       {
-               $data = $this->cache->get($this->name);
-
-               if ($data !== false)
-               {
-                       // essentially ignore the mtime because Memcache expires on it's own
-                       return time();
-               }
-
-               return false;
-       }
-
-       /**
-        * Set the last modified time to the current time
-        *
-        * @return bool Success status
-        */
-       public function touch()
-       {
-               $data = $this->cache->get($this->name);
-
-               if ($data !== false)
-               {
-                       return $this->cache->set($this->name, $data, MEMCACHE_COMPRESSED, (int) $this->duration);
-               }
-
-               return false;
-       }
-
-       /**
-        * Remove the cache
-        *
-        * @return bool Success status
-        */
-       public function unlink()
-       {
-               return $this->cache->delete($this->name, 0);
-       }
-}
-
-/**
- * Caches data to a MySQL database
- *
- * Registered for URLs with the "mysql" protocol
- *
- * For example, `mysql://root:password@localhost:3306/mydb?prefix=sp_` will
- * connect to the `mydb` database on `localhost` on port 3306, with the user
- * `root` and the password `password`. All tables will be prefixed with `sp_`
- *
- * @package SimplePie
- * @subpackage Caching
- */
-class SimplePie_Cache_MySQL extends SimplePie_Cache_DB
-{
-       /**
-        * PDO instance
-        *
-        * @var PDO
-        */
-       protected $mysql;
-
-       /**
-        * Options
-        *
-        * @var array
-        */
-       protected $options;
-
-       /**
-        * Cache ID
-        *
-        * @var string
-        */
-       protected $id;
-
-       /**
-        * Create a new cache object
-        *
-        * @param string $location Location string (from SimplePie::$cache_location)
-        * @param string $name Unique ID for the cache
-        * @param string $type Either TYPE_FEED for SimplePie data, or TYPE_IMAGE for image data
-        */
-       public function __construct($location, $name, $type)
-       {
-               $this->options = array(
-                       'user' => null,
-                       'pass' => null,
-                       'host' => '127.0.0.1',
-                       'port' => '3306',
-                       'path' => '',
-                       'extras' => array(
-                               'prefix' => '',
-                       ),
-               );
-               $this->options = array_merge_recursive($this->options, SimplePie_Cache::parse_URL($location));
-
-               // Path is prefixed with a "/"
-               $this->options['dbname'] = substr($this->options['path'], 1);
-
-               try
-               {
-                       $this->mysql = new PDO("mysql:dbname={$this->options['dbname']};host={$this->options['host']};port={$this->options['port']}", $this->options['user'], $this->options['pass'], array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
-               }
-               catch (PDOException $e)
-               {
-                       $this->mysql = null;
-                       return;
-               }
-
-               $this->id = $name . $type;
-
-               if (!$query = $this->mysql->query('SHOW TABLES'))
-               {
-                       $this->mysql = null;
-                       return;
-               }
-
-               $db = array();
-               while ($row = $query->fetchColumn())
-               {
-                       $db[] = $row;
-               }
-
-               if (!in_array($this->options['extras']['prefix'] . 'cache_data', $db))
-               {
-                       $query = $this->mysql->exec('CREATE TABLE `' . $this->options['extras']['prefix'] . 'cache_data` (`id` TEXT CHARACTER SET utf8 NOT NULL, `items` SMALLINT NOT NULL DEFAULT 0, `data` BLOB NOT NULL, `mtime` INT UNSIGNED NOT NULL, UNIQUE (`id`(125)))');
-                       if ($query === false)
-                       {
-                               $this->mysql = null;
-                       }
-               }
-
-               if (!in_array($this->options['extras']['prefix'] . 'items', $db))
-               {
-                       $query = $this->mysql->exec('CREATE TABLE `' . $this->options['extras']['prefix'] . 'items` (`feed_id` TEXT CHARACTER SET utf8 NOT NULL, `id` TEXT CHARACTER SET utf8 NOT NULL, `data` TEXT CHARACTER SET utf8 NOT NULL, `posted` INT UNSIGNED NOT NULL, INDEX `feed_id` (`feed_id`(125)))');
-                       if ($query === false)
-                       {
-                               $this->mysql = null;
-                       }
-               }
-       }
-
-       /**
-        * Save data to the cache
-        *
-        * @param array|SimplePie $data Data to store in the cache. If passed a SimplePie object, only cache the $data property
-        * @return bool Successfulness
-        */
-       public function save($data)
-       {
-               if ($this->mysql === null)
-               {
-                       return false;
-               }
-
-               if ($data instanceof SimplePie)
-               {
-                       $data = clone $data;
-
-                       $prepared = self::prepare_simplepie_object_for_cache($data);
-
-                       $query = $this->mysql->prepare('SELECT COUNT(*) FROM `' . $this->options['extras']['prefix'] . 'cache_data` WHERE `id` = :feed');
-                       $query->bindValue(':feed', $this->id);
-                       if ($query->execute())
-                       {
-                               if ($query->fetchColumn() > 0)
-                               {
-                                       $items = count($prepared[1]);
-                                       if ($items)
-                                       {
-                                               $sql = 'UPDATE `' . $this->options['extras']['prefix'] . 'cache_data` SET `items` = :items, `data` = :data, `mtime` = :time WHERE `id` = :feed';
-                                               $query = $this->mysql->prepare($sql);
-                                               $query->bindValue(':items', $items);
-                                       }
-                                       else
-                                       {
-                                               $sql = 'UPDATE `' . $this->options['extras']['prefix'] . 'cache_data` SET `data` = :data, `mtime` = :time WHERE `id` = :feed';
-                                               $query = $this->mysql->prepare($sql);
-                                       }
-
-                                       $query->bindValue(':data', $prepared[0]);
-                                       $query->bindValue(':time', time());
-                                       $query->bindValue(':feed', $this->id);
-                                       if (!$query->execute())
-                                       {
-                                               return false;
-                                       }
-                               }
-                               else
-                               {
-                                       $query = $this->mysql->prepare('INSERT INTO `' . $this->options['extras']['prefix'] . 'cache_data` (`id`, `items`, `data`, `mtime`) VALUES(:feed, :count, :data, :time)');
-                                       $query->bindValue(':feed', $this->id);
-                                       $query->bindValue(':count', count($prepared[1]));
-                                       $query->bindValue(':data', $prepared[0]);
-                                       $query->bindValue(':time', time());
-                                       if (!$query->execute())
-                                       {
-                                               return false;
-                                       }
-                               }
-
-                               $ids = array_keys($prepared[1]);
-                               if (!empty($ids))
-                               {
-                                       foreach ($ids as $id)
-                                       {
-                                               $database_ids[] = $this->mysql->quote($id);
-                                       }
-
-                                       $query = $this->mysql->prepare('SELECT `id` FROM `' . $this->options['extras']['prefix'] . 'items` WHERE `id` = ' . implode(' OR `id` = ', $database_ids) . ' AND `feed_id` = :feed');
-                                       $query->bindValue(':feed', $this->id);
-
-                                       if ($query->execute())
-                                       {
-                                               $existing_ids = array();
-                                               while ($row = $query->fetchColumn())
-                                               {
-                                                       $existing_ids[] = $row;
-                                               }
-
-                                               $new_ids = array_diff($ids, $existing_ids);
-
-                                               foreach ($new_ids as $new_id)
-                                               {
-                                                       if (!($date = $prepared[1][$new_id]->get_date('U')))
-                                                       {
-                                                               $date = time();
-                                                       }
-
-                                                       $query = $this->mysql->prepare('INSERT INTO `' . $this->options['extras']['prefix'] . 'items` (`feed_id`, `id`, `data`, `posted`) VALUES(:feed, :id, :data, :date)');
-                                                       $query->bindValue(':feed', $this->id);
-                                                       $query->bindValue(':id', $new_id);
-                                                       $query->bindValue(':data', serialize($prepared[1][$new_id]->data));
-                                                       $query->bindValue(':date', $date);
-                                                       if (!$query->execute())
-                                                       {
-                                                               return false;
-                                                       }
-                                               }
-                                               return true;
-                                       }
-                               }
-                               else
-                               {
-                                       return true;
-                               }
-                       }
-               }
-               else
-               {
-                       $query = $this->mysql->prepare('SELECT `id` FROM `' . $this->options['extras']['prefix'] . 'cache_data` WHERE `id` = :feed');
-                       $query->bindValue(':feed', $this->id);
-                       if ($query->execute())
-                       {
-                               if ($query->rowCount() > 0)
-                               {
-                                       $query = $this->mysql->prepare('UPDATE `' . $this->options['extras']['prefix'] . 'cache_data` SET `items` = 0, `data` = :data, `mtime` = :time WHERE `id` = :feed');
-                                       $query->bindValue(':data', serialize($data));
-                                       $query->bindValue(':time', time());
-                                       $query->bindValue(':feed', $this->id);
-                                       if ($this->execute())
-                                       {
-                                               return true;
-                                       }
-                               }
-                               else
-                               {
-                                       $query = $this->mysql->prepare('INSERT INTO `' . $this->options['extras']['prefix'] . 'cache_data` (`id`, `items`, `data`, `mtime`) VALUES(:id, 0, :data, :time)');
-                                       $query->bindValue(':id', $this->id);
-                                       $query->bindValue(':data', serialize($data));
-                                       $query->bindValue(':time', time());
-                                       if ($query->execute())
-                                       {
-                                               return true;
-                                       }
-                               }
-                       }
-               }
-               return false;
-       }
-
-       /**
-        * Retrieve the data saved to the cache
-        *
-        * @return array Data for SimplePie::$data
-        */
-       public function load()
-       {
-               if ($this->mysql === null)
-               {
-                       return false;
-               }
-
-               $query = $this->mysql->prepare('SELECT `items`, `data` FROM `' . $this->options['extras']['prefix'] . 'cache_data` WHERE `id` = :id');
-               $query->bindValue(':id', $this->id);
-               if ($query->execute() && ($row = $query->fetch()))
-               {
-                       $data = unserialize($row[1]);
-
-                       if (isset($this->options['items'][0]))
-                       {
-                               $items = (int) $this->options['items'][0];
-                       }
-                       else
-                       {
-                               $items = (int) $row[0];
-                       }
-
-                       if ($items !== 0)
-                       {
-                               if (isset($data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0]))
-                               {
-                                       $feed =& $data['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['feed'][0];
-                               }
-                               elseif (isset($data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0]))
-                               {
-                                       $feed =& $data['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['feed'][0];
-                               }
-                               elseif (isset($data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0]))
-                               {
-                                       $feed =& $data['child'][SIMPLEPIE_NAMESPACE_RDF]['RDF'][0];
-                               }
-                               elseif (isset($data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0]))
-                               {
-                                       $feed =& $data['child'][SIMPLEPIE_NAMESPACE_RSS_20]['rss'][0];
-                               }
-                               else
-                               {
-                                       $feed = null;
-                               }
-
-                               if ($feed !== null)
-                               {
-                                       $sql = 'SELECT `data` FROM `' . $this->options['extras']['prefix'] . 'items` WHERE `feed_id` = :feed ORDER BY `posted` DESC';
-                                       if ($items > 0)
-                                       {
-                                               $sql .= ' LIMIT ' . $items;
-                                       }
-
-                                       $query = $this->mysql->prepare($sql);
-                                       $query->bindValue(':feed', $this->id);
-                                       if ($query->execute())
-                                       {
-                                               while ($row = $query->fetchColumn())
-                                               {
-                                                       $feed['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['entry'][] = unserialize($row);
-                                               }
-                                       }
-                                       else
-                                       {
-                                               return false;
-                                       }
-                               }
-                       }
-                       return $data;
-               }
-               return false;
-       }
-
-       /**
-        * Retrieve the last modified time for the cache
-        *
-        * @return int Timestamp
-        */
-       public function mtime()
-       {
-               if ($this->mysql === null)
-               {
-                       return false;
-               }
-
-               $query = $this->mysql->prepare('SELECT `mtime` FROM `' . $this->options['extras']['prefix'] . 'cache_data` WHERE `id` = :id');
-               $query->bindValue(':id', $this->id);
-               if ($query->execute() && ($time = $query->fetchColumn()))
-               {
-                       return $time;
-               }
-               else
-               {
-                       return false;
-               }
-       }
-
-       /**
-        * Set the last modified time to the current time
-        *
-        * @return bool Success status
-        */
-       public function touch()
-       {
-               if ($this->mysql === null)
-               {
-                       return false;
-               }
-
-               $query = $this->mysql->prepare('UPDATE `' . $this->options['extras']['prefix'] . 'cache_data` SET `mtime` = :time WHERE `id` = :id');
-               $query->bindValue(':time', time());
-               $query->bindValue(':id', $this->id);
-               if ($query->execute() && $query->rowCount() > 0)
-               {
-                       return true;
-               }
-               else
-               {
-                       return false;
-               }
-       }
-
-       /**
-        * Remove the cache
-        *
-        * @return bool Success status
-        */
-       public function unlink()
-       {
-               if ($this->mysql === null)
-               {
-                       return false;
-               }
-
-               $query = $this->mysql->prepare('DELETE FROM `' . $this->options['extras']['prefix'] . 'cache_data` WHERE `id` = :id');
-               $query->bindValue(':id', $this->id);
-               $query2 = $this->mysql->prepare('DELETE FROM `' . $this->options['extras']['prefix'] . 'items` WHERE `feed_id` = :id');
-               $query2->bindValue(':id', $this->id);
-               if ($query->execute() && $query2->execute())
-               {
-                       return true;
-               }
-               else
-               {
-                       return false;
-               }
-       }
-}
-
-/**
- * Used to create cache objects
- *
- * This class can be overloaded with {@see SimplePie::set_cache_class()},
- * although the preferred way is to create your own handler
- * via {@see register()}
- *
- * @package SimplePie
- * @subpackage Caching
- */
-class SimplePie_Cache
-{
-       /**
-        * Cache handler classes
-        *
-        * These receive 3 parameters to their constructor, as documented in
-        * {@see register()}
-        * @var array
-        */
-       protected static $handlers = array(
-               'mysql' => 'SimplePie_Cache_MySQL',
-               'memcache' => 'SimplePie_Cache_Memcache',
-       );
-
-       /**
-        * Don't call the constructor. Please.
-        */
-       private function __construct() { }
-
-       /**
-        * Create a new SimplePie_Cache object
-        *
-        * @param string $location URL location (scheme is used to determine handler)
-        * @param string $filename Unique identifier for cache object
-        * @param string $extension 'spi' or 'spc'
-        * @return SimplePie_Cache_Base Type of object depends on scheme of `$location`
-        */
-       public static function get_handler($location, $filename, $extension)
-       {
-               $type = explode(':', $location, 2);
-               $type = $type[0];
-               if (!empty(self::$handlers[$type]))
-               {
-                       $class = self::$handlers[$type];
-                       return new $class($location, $filename, $extension);
-               }
-
-               return new SimplePie_Cache_File($location, $filename, $extension);
-       }
-
-       /**
-        * Create a new SimplePie_Cache object
-        *
-        * @deprecated Use {@see get_handler} instead
-        */
-       public function create($location, $filename, $extension)
-       {
-               trigger_error('Cache::create() has been replaced with Cache::get_handler(). Switch to the registry system to use this.', E_USER_DEPRECATED);
-               return self::get_handler($location, $filename, $extension);
-       }
-
-       /**
-        * Register a handler
-        *
-        * @param string $type DSN type to register for
-        * @param string $class Name of handler class. Must implement SimplePie_Cache_Base
-        */
-       public static function register($type, $class)
-       {
-               self::$handlers[$type] = $class;
-       }
-
-       /**
-        * Parse a URL into an array
-        *
-        * @param string $url
-        * @return array
-        */
-       public static function parse_URL($url)
-       {
-               $params = parse_url($url);
-               $params['extras'] = array();
-               if (isset($params['query']))
-               {
-                       parse_str($params['query'], $params['extras']);
-               }
-               return $params;
-       }
-}
-
-/**
- * Handles `<media:text>` captions as defined in Media RSS.
- *
- * Used by {@see SimplePie_Enclosure::get_caption()} and {@see SimplePie_Enclosure::get_captions()}
- *
- * This class can be overloaded with {@see SimplePie::set_caption_class()}
- *
- * @package SimplePie
- * @subpackage API
- */
-class SimplePie_Caption
-{
-       /**
-        * Content type
-        *
-        * @var string
-        * @see get_type()
-        */
-       var $type;
-
-       /**
-        * Language
-        *
-        * @var string
-        * @see get_language()
-        */
-       var $lang;
-
-       /**
-        * Start time
-        *
-        * @var string
-        * @see get_starttime()
-        */
-       var $startTime;
-
-       /**
-        * End time
-        *
-        * @var string
-        * @see get_endtime()
-        */
-       var $endTime;
-
-       /**
-        * Caption text
-        *
-        * @var string
-        * @see get_text()
-        */
-       var $text;
-
-       /**
-        * Constructor, used to input the data
-        *
-        * For documentation on all the parameters, see the corresponding
-        * properties and their accessors
-        */
-       public function __construct($type = null, $lang = null, $startTime = null, $endTime = null, $text = null)
-       {
-               $this->type = $type;
-               $this->lang = $lang;
-               $this->startTime = $startTime;
-               $this->endTime = $endTime;
-               $this->text = $text;
-       }
-
-       /**
-        * String-ified version
-        *
-        * @return string
-        */
-       public function __toString()
-       {
-               // There is no $this->data here
-               return md5(serialize($this));
-       }
-
-       /**
-        * Get the end time
-        *
-        * @return string|null Time in the format 'hh:mm:ss.SSS'
-        */
-       public function get_endtime()
-       {
-               if ($this->endTime !== null)
-               {
-                       return $this->endTime;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the language
-        *
-        * @link http://tools.ietf.org/html/rfc3066
-        * @return string|null Language code as per RFC 3066
-        */
-       public function get_language()
-       {
-               if ($this->lang !== null)
-               {
-                       return $this->lang;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the start time
-        *
-        * @return string|null Time in the format 'hh:mm:ss.SSS'
-        */
-       public function get_starttime()
-       {
-               if ($this->startTime !== null)
-               {
-                       return $this->startTime;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the text of the caption
-        *
-        * @return string|null
-        */
-       public function get_text()
-       {
-               if ($this->text !== null)
-               {
-                       return $this->text;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the content type (not MIME type)
-        *
-        * @return string|null Either 'text' or 'html'
-        */
-       public function get_type()
-       {
-               if ($this->type !== null)
-               {
-                       return $this->type;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-}
-
-/**
- * Manages all category-related data
- *
- * Used by {@see SimplePie_Item::get_category()} and {@see SimplePie_Item::get_categories()}
- *
- * This class can be overloaded with {@see SimplePie::set_category_class()}
- *
- * @package SimplePie
- * @subpackage API
- */
-class SimplePie_Category
-{
-       /**
-        * Category identifier
-        *
-        * @var string
-        * @see get_term
-        */
-       var $term;
-
-       /**
-        * Categorization scheme identifier
-        *
-        * @var string
-        * @see get_scheme()
-        */
-       var $scheme;
-
-       /**
-        * Human readable label
-        *
-        * @var string
-        * @see get_label()
-        */
-       var $label;
-
-       /**
-        * Constructor, used to input the data
-        *
-        * @param string $term
-        * @param string $scheme
-        * @param string $label
-        */
-       public function __construct($term = null, $scheme = null, $label = null)
-       {
-               $this->term = $term;
-               $this->scheme = $scheme;
-               $this->label = $label;
-       }
-
-       /**
-        * String-ified version
-        *
-        * @return string
-        */
-       public function __toString()
-       {
-               // There is no $this->data here
-               return md5(serialize($this));
-       }
-
-       /**
-        * Get the category identifier
-        *
-        * @return string|null
-        */
-       public function get_term()
-       {
-               if ($this->term !== null)
-               {
-                       return $this->term;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the categorization scheme identifier
-        *
-        * @return string|null
-        */
-       public function get_scheme()
-       {
-               if ($this->scheme !== null)
-               {
-                       return $this->scheme;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the human readable label
-        *
-        * @return string|null
-        */
-       public function get_label()
-       {
-               if ($this->label !== null)
-               {
-                       return $this->label;
-               }
-               else
-               {
-                       return $this->get_term();
-               }
-       }
-}
-
-/**
- * Content-type sniffing
- *
- * Based on the rules in http://tools.ietf.org/html/draft-abarth-mime-sniff-06
- *
- * This is used since we can't always trust Content-Type headers, and is based
- * upon the HTML5 parsing rules.
- *
- *
- * This class can be overloaded with {@see SimplePie::set_content_type_sniffer_class()}
- *
- * @package SimplePie
- * @subpackage HTTP
- */
-class SimplePie_Content_Type_Sniffer
-{
-       /**
-        * File object
-        *
-        * @var SimplePie_File
-        */
-       var $file;
-
-       /**
-        * Create an instance of the class with the input file
-        *
-        * @param SimplePie_Content_Type_Sniffer $file Input file
-        */
-       public function __construct($file)
-       {
-               $this->file = $file;
-       }
-
-       /**
-        * Get the Content-Type of the specified file
-        *
-        * @return string Actual Content-Type
-        */
-       public function get_type()
-       {
-               if (isset($this->file->headers['content-type']))
-               {
-                       if (!isset($this->file->headers['content-encoding'])
-                               && ($this->file->headers['content-type'] === 'text/plain'
-                                       || $this->file->headers['content-type'] === 'text/plain; charset=ISO-8859-1'
-                                       || $this->file->headers['content-type'] === 'text/plain; charset=iso-8859-1'
-                                       || $this->file->headers['content-type'] === 'text/plain; charset=UTF-8'))
-                       {
-                               return $this->text_or_binary();
-                       }
-
-                       if (($pos = strpos($this->file->headers['content-type'], ';')) !== false)
-                       {
-                               $official = substr($this->file->headers['content-type'], 0, $pos);
-                       }
-                       else
-                       {
-                               $official = $this->file->headers['content-type'];
-                       }
-                       $official = trim(strtolower($official));
-
-                       if ($official === 'unknown/unknown'
-                               || $official === 'application/unknown')
-                       {
-                               return $this->unknown();
-                       }
-                       elseif (substr($official, -4) === '+xml'
-                               || $official === 'text/xml'
-                               || $official === 'application/xml')
-                       {
-                               return $official;
-                       }
-                       elseif (substr($official, 0, 6) === 'image/')
-                       {
-                               if ($return = $this->image())
-                               {
-                                       return $return;
-                               }
-                               else
-                               {
-                                       return $official;
-                               }
-                       }
-                       elseif ($official === 'text/html')
-                       {
-                               return $this->feed_or_html();
-                       }
-                       else
-                       {
-                               return $official;
-                       }
-               }
-               else
-               {
-                       return $this->unknown();
-               }
-       }
-
-       /**
-        * Sniff text or binary
-        *
-        * @return string Actual Content-Type
-        */
-       public function text_or_binary()
-       {
-               if (substr($this->file->body, 0, 2) === "\xFE\xFF"
-                       || substr($this->file->body, 0, 2) === "\xFF\xFE"
-                       || substr($this->file->body, 0, 4) === "\x00\x00\xFE\xFF"
-                       || substr($this->file->body, 0, 3) === "\xEF\xBB\xBF")
-               {
-                       return 'text/plain';
-               }
-               elseif (preg_match('/[\x00-\x08\x0E-\x1A\x1C-\x1F]/', $this->file->body))
-               {
-                       return 'application/octect-stream';
-               }
-               else
-               {
-                       return 'text/plain';
-               }
-       }
-
-       /**
-        * Sniff unknown
-        *
-        * @return string Actual Content-Type
-        */
-       public function unknown()
-       {
-               $ws = strspn($this->file->body, "\x09\x0A\x0B\x0C\x0D\x20");
-               if (strtolower(substr($this->file->body, $ws, 14)) === '<!doctype html'
-                       || strtolower(substr($this->file->body, $ws, 5)) === '<html'
-                       || strtolower(substr($this->file->body, $ws, 7)) === '<script')
-               {
-                       return 'text/html';
-               }
-               elseif (substr($this->file->body, 0, 5) === '%PDF-')
-               {
-                       return 'application/pdf';
-               }
-               elseif (substr($this->file->body, 0, 11) === '%!PS-Adobe-')
-               {
-                       return 'application/postscript';
-               }
-               elseif (substr($this->file->body, 0, 6) === 'GIF87a'
-                       || substr($this->file->body, 0, 6) === 'GIF89a')
-               {
-                       return 'image/gif';
-               }
-               elseif (substr($this->file->body, 0, 8) === "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A")
-               {
-                       return 'image/png';
-               }
-               elseif (substr($this->file->body, 0, 3) === "\xFF\xD8\xFF")
-               {
-                       return 'image/jpeg';
-               }
-               elseif (substr($this->file->body, 0, 2) === "\x42\x4D")
-               {
-                       return 'image/bmp';
-               }
-               elseif (substr($this->file->body, 0, 4) === "\x00\x00\x01\x00")
-               {
-                       return 'image/vnd.microsoft.icon';
-               }
-               else
-               {
-                       return $this->text_or_binary();
-               }
-       }
-
-       /**
-        * Sniff images
-        *
-        * @return string Actual Content-Type
-        */
-       public function image()
-       {
-               if (substr($this->file->body, 0, 6) === 'GIF87a'
-                       || substr($this->file->body, 0, 6) === 'GIF89a')
-               {
-                       return 'image/gif';
-               }
-               elseif (substr($this->file->body, 0, 8) === "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A")
-               {
-                       return 'image/png';
-               }
-               elseif (substr($this->file->body, 0, 3) === "\xFF\xD8\xFF")
-               {
-                       return 'image/jpeg';
-               }
-               elseif (substr($this->file->body, 0, 2) === "\x42\x4D")
-               {
-                       return 'image/bmp';
-               }
-               elseif (substr($this->file->body, 0, 4) === "\x00\x00\x01\x00")
-               {
-                       return 'image/vnd.microsoft.icon';
-               }
-               else
-               {
-                       return false;
-               }
-       }
-
-       /**
-        * Sniff HTML
-        *
-        * @return string Actual Content-Type
-        */
-       public function feed_or_html()
-       {
-               $len = strlen($this->file->body);
-               $pos = strspn($this->file->body, "\x09\x0A\x0D\x20");
-
-               while ($pos < $len)
-               {
-                       switch ($this->file->body[$pos])
-                       {
-                               case "\x09":
-                               case "\x0A":
-                               case "\x0D":
-                               case "\x20":
-                                       $pos += strspn($this->file->body, "\x09\x0A\x0D\x20", $pos);
-                                       continue 2;
-
-                               case '<':
-                                       $pos++;
-                                       break;
-
-                               default:
-                                       return 'text/html';
-                       }
-
-                       if (substr($this->file->body, $pos, 3) === '!--')
-                       {
-                               $pos += 3;
-                               if ($pos < $len && ($pos = strpos($this->file->body, '-->', $pos)) !== false)
-                               {
-                                       $pos += 3;
-                               }
-                               else
-                               {
-                                       return 'text/html';
-                               }
-                       }
-                       elseif (substr($this->file->body, $pos, 1) === '!')
-                       {
-                               if ($pos < $len && ($pos = strpos($this->file->body, '>', $pos)) !== false)
-                               {
-                                       $pos++;
-                               }
-                               else
-                               {
-                                       return 'text/html';
-                               }
-                       }
-                       elseif (substr($this->file->body, $pos, 1) === '?')
-                       {
-                               if ($pos < $len && ($pos = strpos($this->file->body, '?>', $pos)) !== false)
-                               {
-                                       $pos += 2;
-                               }
-                               else
-                               {
-                                       return 'text/html';
-                               }
-                       }
-                       elseif (substr($this->file->body, $pos, 3) === 'rss'
-                               || substr($this->file->body, $pos, 7) === 'rdf:RDF')
-                       {
-                               return 'application/rss+xml';
-                       }
-                       elseif (substr($this->file->body, $pos, 4) === 'feed')
-                       {
-                               return 'application/atom+xml';
-                       }
-                       else
-                       {
-                               return 'text/html';
-                       }
-               }
-
-               return 'text/html';
-       }
-}
-
-/**
- * Manages `<media:copyright>` copyright tags as defined in Media RSS
- *
- * Used by {@see SimplePie_Enclosure::get_copyright()}
- *
- * This class can be overloaded with {@see SimplePie::set_copyright_class()}
- *
- * @package SimplePie
- * @subpackage API
- */
-class SimplePie_Copyright
-{
-       /**
-        * Copyright URL
-        *
-        * @var string
-        * @see get_url()
-        */
-       var $url;
-
-       /**
-        * Attribution
-        *
-        * @var string
-        * @see get_attribution()
-        */
-       var $label;
-
-       /**
-        * Constructor, used to input the data
-        *
-        * For documentation on all the parameters, see the corresponding
-        * properties and their accessors
-        */
-       public function __construct($url = null, $label = null)
-       {
-               $this->url = $url;
-               $this->label = $label;
-       }
-
-       /**
-        * String-ified version
-        *
-        * @return string
-        */
-       public function __toString()
-       {
-               // There is no $this->data here
-               return md5(serialize($this));
-       }
-
-       /**
-        * Get the copyright URL
-        *
-        * @return string|null URL to copyright information
-        */
-       public function get_url()
-       {
-               if ($this->url !== null)
-               {
-                       return $this->url;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the attribution text
-        *
-        * @return string|null
-        */
-       public function get_attribution()
-       {
-               if ($this->label !== null)
-               {
-                       return $this->label;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-}
-
-/**
- * SimplePie class.
- *
- * Class for backward compatibility.
- *
- * @deprecated Use {@see SimplePie} directly
- * @package SimplePie
- * @subpackage API
- */
-class SimplePie_Core extends SimplePie
-{
-
-}
-
-/**
- * Handles `<media:credit>` as defined in Media RSS
- *
- * Used by {@see SimplePie_Enclosure::get_credit()} and {@see SimplePie_Enclosure::get_credits()}
- *
- * This class can be overloaded with {@see SimplePie::set_credit_class()}
- *
- * @package SimplePie
- * @subpackage API
- */
-class SimplePie_Credit
-{
-       /**
-        * Credited role
-        *
-        * @var string
-        * @see get_role()
-        */
-       var $role;
-
-       /**
-        * Organizational scheme
-        *
-        * @var string
-        * @see get_scheme()
-        */
-       var $scheme;
-
-       /**
-        * Credited name
-        *
-        * @var string
-        * @see get_name()
-        */
-       var $name;
-
-       /**
-        * Constructor, used to input the data
-        *
-        * For documentation on all the parameters, see the corresponding
-        * properties and their accessors
-        */
-       public function __construct($role = null, $scheme = null, $name = null)
-       {
-               $this->role = $role;
-               $this->scheme = $scheme;
-               $this->name = $name;
-       }
-
-       /**
-        * String-ified version
-        *
-        * @return string
-        */
-       public function __toString()
-       {
-               // There is no $this->data here
-               return md5(serialize($this));
-       }
-
-       /**
-        * Get the role of the person receiving credit
-        *
-        * @return string|null
-        */
-       public function get_role()
-       {
-               if ($this->role !== null)
-               {
-                       return $this->role;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the organizational scheme
-        *
-        * @return string|null
-        */
-       public function get_scheme()
-       {
-               if ($this->scheme !== null)
-               {
-                       return $this->scheme;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the credited person/entity's name
-        *
-        * @return string|null
-        */
-       public function get_name()
-       {
-               if ($this->name !== null)
-               {
-                       return $this->name;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-}
-
-/**
- * Decode HTML Entities
- *
- * This implements HTML5 as of revision 967 (2007-06-28)
- *
- * @deprecated Use DOMDocument instead!
- * @package SimplePie
- */
-class SimplePie_Decode_HTML_Entities
-{
-       /**
-        * Data to be parsed
-        *
-        * @access private
-        * @var string
-        */
-       var $data = '';
-
-       /**
-        * Currently consumed bytes
-        *
-        * @access private
-        * @var string
-        */
-       var $consumed = '';
-
-       /**
-        * Position of the current byte being parsed
-        *
-        * @access private
-        * @var int
-        */
-       var $position = 0;
-
-       /**
-        * Create an instance of the class with the input data
-        *
-        * @access public
-        * @param string $data Input data
-        */
-       public function __construct($data)
-       {
-               $this->data = $data;
-       }
-
-       /**
-        * Parse the input data
-        *
-        * @access public
-        * @return string Output data
-        */
-       public function parse()
-       {
-               while (($this->position = strpos($this->data, '&', $this->position)) !== false)
-               {
-                       $this->consume();
-                       $this->entity();
-                       $this->consumed = '';
-               }
-               return $this->data;
-       }
-
-       /**
-        * Consume the next byte
-        *
-        * @access private
-        * @return mixed The next byte, or false, if there is no more data
-        */
-       public function consume()
-       {
-               if (isset($this->data[$this->position]))
-               {
-                       $this->consumed .= $this->data[$this->position];
-                       return $this->data[$this->position++];
-               }
-               else
-               {
-                       return false;
-               }
-       }
-
-       /**
-        * Consume a range of characters
-        *
-        * @access private
-        * @param string $chars Characters to consume
-        * @return mixed A series of characters that match the range, or false
-        */
-       public function consume_range($chars)
-       {
-               if ($len = strspn($this->data, $chars, $this->position))
-               {
-                       $data = substr($this->data, $this->position, $len);
-                       $this->consumed .= $data;
-                       $this->position += $len;
-                       return $data;
-               }
-               else
-               {
-                       return false;
-               }
-       }
-
-       /**
-        * Unconsume one byte
-        *
-        * @access private
-        */
-       public function unconsume()
-       {
-               $this->consumed = substr($this->consumed, 0, -1);
-               $this->position--;
-       }
-
-       /**
-        * Decode an entity
-        *
-        * @access private
-        */
-       public function entity()
-       {
-               switch ($this->consume())
-               {
-                       case "\x09":
-                       case "\x0A":
-                       case "\x0B":
-                       case "\x0B":
-                       case "\x0C":
-                       case "\x20":
-                       case "\x3C":
-                       case "\x26":
-                       case false:
-                               break;
-
-                       case "\x23":
-                               switch ($this->consume())
-                               {
-                                       case "\x78":
-                                       case "\x58":
-                                               $range = '0123456789ABCDEFabcdef';
-                                               $hex = true;
-                                               break;
-
-                                       default:
-                                               $range = '0123456789';
-                                               $hex = false;
-                                               $this->unconsume();
-                                               break;
-                               }
-
-                               if ($codepoint = $this->consume_range($range))
-                               {
-                                       static $windows_1252_specials = array(0x0D => "\x0A", 0x80 => "\xE2\x82\xAC", 0x81 => "\xEF\xBF\xBD", 0x82 => "\xE2\x80\x9A", 0x83 => "\xC6\x92", 0x84 => "\xE2\x80\x9E", 0x85 => "\xE2\x80\xA6", 0x86 => "\xE2\x80\xA0", 0x87 => "\xE2\x80\xA1", 0x88 => "\xCB\x86", 0x89 => "\xE2\x80\xB0", 0x8A => "\xC5\xA0", 0x8B => "\xE2\x80\xB9", 0x8C => "\xC5\x92", 0x8D => "\xEF\xBF\xBD", 0x8E => "\xC5\xBD", 0x8F => "\xEF\xBF\xBD", 0x90 => "\xEF\xBF\xBD", 0x91 => "\xE2\x80\x98", 0x92 => "\xE2\x80\x99", 0x93 => "\xE2\x80\x9C", 0x94 => "\xE2\x80\x9D", 0x95 => "\xE2\x80\xA2", 0x96 => "\xE2\x80\x93", 0x97 => "\xE2\x80\x94", 0x98 => "\xCB\x9C", 0x99 => "\xE2\x84\xA2", 0x9A => "\xC5\xA1", 0x9B => "\xE2\x80\xBA", 0x9C => "\xC5\x93", 0x9D => "\xEF\xBF\xBD", 0x9E => "\xC5\xBE", 0x9F => "\xC5\xB8");
-
-                                       if ($hex)
-                                       {
-                                               $codepoint = hexdec($codepoint);
-                                       }
-                                       else
-                                       {
-                                               $codepoint = intval($codepoint);
-                                       }
-
-                                       if (isset($windows_1252_specials[$codepoint]))
-                                       {
-                                               $replacement = $windows_1252_specials[$codepoint];
-                                       }
-                                       else
-                                       {
-                                               $replacement = SimplePie_Misc::codepoint_to_utf8($codepoint);
-                                       }
-
-                                       if (!in_array($this->consume(), array(';', false), true))
-                                       {
-                                               $this->unconsume();
-                                       }
-
-                                       $consumed_length = strlen($this->consumed);
-                                       $this->data = substr_replace($this->data, $replacement, $this->position - $consumed_length, $consumed_length);
-                                       $this->position += strlen($replacement) - $consumed_length;
-                               }
-                               break;
-
-                       default:
-                               static $entities = array(
-                                       'Aacute' => "\xC3\x81",
-                                       'aacute' => "\xC3\xA1",
-                                       'Aacute;' => "\xC3\x81",
-                                       'aacute;' => "\xC3\xA1",
-                                       'Acirc' => "\xC3\x82",
-                                       'acirc' => "\xC3\xA2",
-                                       'Acirc;' => "\xC3\x82",
-                                       'acirc;' => "\xC3\xA2",
-                                       'acute' => "\xC2\xB4",
-                                       'acute;' => "\xC2\xB4",
-                                       'AElig' => "\xC3\x86",
-                                       'aelig' => "\xC3\xA6",
-                                       'AElig;' => "\xC3\x86",
-                                       'aelig;' => "\xC3\xA6",
-                                       'Agrave' => "\xC3\x80",
-                                       'agrave' => "\xC3\xA0",
-                                       'Agrave;' => "\xC3\x80",
-                                       'agrave;' => "\xC3\xA0",
-                                       'alefsym;' => "\xE2\x84\xB5",
-                                       'Alpha;' => "\xCE\x91",
-                                       'alpha;' => "\xCE\xB1",
-                                       'AMP' => "\x26",
-                                       'amp' => "\x26",
-                                       'AMP;' => "\x26",
-                                       'amp;' => "\x26",
-                                       'and;' => "\xE2\x88\xA7",
-                                       'ang;' => "\xE2\x88\xA0",
-                                       'apos;' => "\x27",
-                                       'Aring' => "\xC3\x85",
-                                       'aring' => "\xC3\xA5",
-                                       'Aring;' => "\xC3\x85",
-                                       'aring;' => "\xC3\xA5",
-                                       'asymp;' => "\xE2\x89\x88",
-                                       'Atilde' => "\xC3\x83",
-                                       'atilde' => "\xC3\xA3",
-                                       'Atilde;' => "\xC3\x83",
-                                       'atilde;' => "\xC3\xA3",
-                                       'Auml' => "\xC3\x84",
-                                       'auml' => "\xC3\xA4",
-                                       'Auml;' => "\xC3\x84",
-                                       'auml;' => "\xC3\xA4",
-                                       'bdquo;' => "\xE2\x80\x9E",
-                                       'Beta;' => "\xCE\x92",
-                                       'beta;' => "\xCE\xB2",
-                                       'brvbar' => "\xC2\xA6",
-                                       'brvbar;' => "\xC2\xA6",
-                                       'bull;' => "\xE2\x80\xA2",
-                                       'cap;' => "\xE2\x88\xA9",
-                                       'Ccedil' => "\xC3\x87",
-                                       'ccedil' => "\xC3\xA7",
-                                       'Ccedil;' => "\xC3\x87",
-                                       'ccedil;' => "\xC3\xA7",
-                                       'cedil' => "\xC2\xB8",
-                                       'cedil;' => "\xC2\xB8",
-                                       'cent' => "\xC2\xA2",
-                                       'cent;' => "\xC2\xA2",
-                                       'Chi;' => "\xCE\xA7",
-                                       'chi;' => "\xCF\x87",
-                                       'circ;' => "\xCB\x86",
-                                       'clubs;' => "\xE2\x99\xA3",
-                                       'cong;' => "\xE2\x89\x85",
-                                       'COPY' => "\xC2\xA9",
-                                       'copy' => "\xC2\xA9",
-                                       'COPY;' => "\xC2\xA9",
-                                       'copy;' => "\xC2\xA9",
-                                       'crarr;' => "\xE2\x86\xB5",
-                                       'cup;' => "\xE2\x88\xAA",
-                                       'curren' => "\xC2\xA4",
-                                       'curren;' => "\xC2\xA4",
-                                       'Dagger;' => "\xE2\x80\xA1",
-                                       'dagger;' => "\xE2\x80\xA0",
-                                       'dArr;' => "\xE2\x87\x93",
-                                       'darr;' => "\xE2\x86\x93",
-                                       'deg' => "\xC2\xB0",
-                                       'deg;' => "\xC2\xB0",
-                                       'Delta;' => "\xCE\x94",
-                                       'delta;' => "\xCE\xB4",
-                                       'diams;' => "\xE2\x99\xA6",
-                                       'divide' => "\xC3\xB7",
-                                       'divide;' => "\xC3\xB7",
-                                       'Eacute' => "\xC3\x89",
-                                       'eacute' => "\xC3\xA9",
-                                       'Eacute;' => "\xC3\x89",
-                                       'eacute;' => "\xC3\xA9",
-                                       'Ecirc' => "\xC3\x8A",
-                                       'ecirc' => "\xC3\xAA",
-                                       'Ecirc;' => "\xC3\x8A",
-                                       'ecirc;' => "\xC3\xAA",
-                                       'Egrave' => "\xC3\x88",
-                                       'egrave' => "\xC3\xA8",
-                                       'Egrave;' => "\xC3\x88",
-                                       'egrave;' => "\xC3\xA8",
-                                       'empty;' => "\xE2\x88\x85",
-                                       'emsp;' => "\xE2\x80\x83",
-                                       'ensp;' => "\xE2\x80\x82",
-                                       'Epsilon;' => "\xCE\x95",
-                                       'epsilon;' => "\xCE\xB5",
-                                       'equiv;' => "\xE2\x89\xA1",
-                                       'Eta;' => "\xCE\x97",
-                                       'eta;' => "\xCE\xB7",
-                                       'ETH' => "\xC3\x90",
-                                       'eth' => "\xC3\xB0",
-                                       'ETH;' => "\xC3\x90",
-                                       'eth;' => "\xC3\xB0",
-                                       'Euml' => "\xC3\x8B",
-                                       'euml' => "\xC3\xAB",
-                                       'Euml;' => "\xC3\x8B",
-                                       'euml;' => "\xC3\xAB",
-                                       'euro;' => "\xE2\x82\xAC",
-                                       'exist;' => "\xE2\x88\x83",
-                                       'fnof;' => "\xC6\x92",
-                                       'forall;' => "\xE2\x88\x80",
-                                       'frac12' => "\xC2\xBD",
-                                       'frac12;' => "\xC2\xBD",
-                                       'frac14' => "\xC2\xBC",
-                                       'frac14;' => "\xC2\xBC",
-                                       'frac34' => "\xC2\xBE",
-                                       'frac34;' => "\xC2\xBE",
-                                       'frasl;' => "\xE2\x81\x84",
-                                       'Gamma;' => "\xCE\x93",
-                                       'gamma;' => "\xCE\xB3",
-                                       'ge;' => "\xE2\x89\xA5",
-                                       'GT' => "\x3E",
-                                       'gt' => "\x3E",
-                                       'GT;' => "\x3E",
-                                       'gt;' => "\x3E",
-                                       'hArr;' => "\xE2\x87\x94",
-                                       'harr;' => "\xE2\x86\x94",
-                                       'hearts;' => "\xE2\x99\xA5",
-                                       'hellip;' => "\xE2\x80\xA6",
-                                       'Iacute' => "\xC3\x8D",
-                                       'iacute' => "\xC3\xAD",
-                                       'Iacute;' => "\xC3\x8D",
-                                       'iacute;' => "\xC3\xAD",
-                                       'Icirc' => "\xC3\x8E",
-                                       'icirc' => "\xC3\xAE",
-                                       'Icirc;' => "\xC3\x8E",
-                                       'icirc;' => "\xC3\xAE",
-                                       'iexcl' => "\xC2\xA1",
-                                       'iexcl;' => "\xC2\xA1",
-                                       'Igrave' => "\xC3\x8C",
-                                       'igrave' => "\xC3\xAC",
-                                       'Igrave;' => "\xC3\x8C",
-                                       'igrave;' => "\xC3\xAC",
-                                       'image;' => "\xE2\x84\x91",
-                                       'infin;' => "\xE2\x88\x9E",
-                                       'int;' => "\xE2\x88\xAB",
-                                       'Iota;' => "\xCE\x99",
-                                       'iota;' => "\xCE\xB9",
-                                       'iquest' => "\xC2\xBF",
-                                       'iquest;' => "\xC2\xBF",
-                                       'isin;' => "\xE2\x88\x88",
-                                       'Iuml' => "\xC3\x8F",
-                                       'iuml' => "\xC3\xAF",
-                                       'Iuml;' => "\xC3\x8F",
-                                       'iuml;' => "\xC3\xAF",
-                                       'Kappa;' => "\xCE\x9A",
-                                       'kappa;' => "\xCE\xBA",
-                                       'Lambda;' => "\xCE\x9B",
-                                       'lambda;' => "\xCE\xBB",
-                                       'lang;' => "\xE3\x80\x88",
-                                       'laquo' => "\xC2\xAB",
-                                       'laquo;' => "\xC2\xAB",
-                                       'lArr;' => "\xE2\x87\x90",
-                                       'larr;' => "\xE2\x86\x90",
-                                       'lceil;' => "\xE2\x8C\x88",
-                                       'ldquo;' => "\xE2\x80\x9C",
-                                       'le;' => "\xE2\x89\xA4",
-                                       'lfloor;' => "\xE2\x8C\x8A",
-                                       'lowast;' => "\xE2\x88\x97",
-                                       'loz;' => "\xE2\x97\x8A",
-                                       'lrm;' => "\xE2\x80\x8E",
-                                       'lsaquo;' => "\xE2\x80\xB9",
-                                       'lsquo;' => "\xE2\x80\x98",
-                                       'LT' => "\x3C",
-                                       'lt' => "\x3C",
-                                       'LT;' => "\x3C",
-                                       'lt;' => "\x3C",
-                                       'macr' => "\xC2\xAF",
-                                       'macr;' => "\xC2\xAF",
-                                       'mdash;' => "\xE2\x80\x94",
-                                       'micro' => "\xC2\xB5",
-                                       'micro;' => "\xC2\xB5",
-                                       'middot' => "\xC2\xB7",
-                                       'middot;' => "\xC2\xB7",
-                                       'minus;' => "\xE2\x88\x92",
-                                       'Mu;' => "\xCE\x9C",
-                                       'mu;' => "\xCE\xBC",
-                                       'nabla;' => "\xE2\x88\x87",
-                                       'nbsp' => "\xC2\xA0",
-                                       'nbsp;' => "\xC2\xA0",
-                                       'ndash;' => "\xE2\x80\x93",
-                                       'ne;' => "\xE2\x89\xA0",
-                                       'ni;' => "\xE2\x88\x8B",
-                                       'not' => "\xC2\xAC",
-                                       'not;' => "\xC2\xAC",
-                                       'notin;' => "\xE2\x88\x89",
-                                       'nsub;' => "\xE2\x8A\x84",
-                                       'Ntilde' => "\xC3\x91",
-                                       'ntilde' => "\xC3\xB1",
-                                       'Ntilde;' => "\xC3\x91",
-                                       'ntilde;' => "\xC3\xB1",
-                                       'Nu;' => "\xCE\x9D",
-                                       'nu;' => "\xCE\xBD",
-                                       'Oacute' => "\xC3\x93",
-                                       'oacute' => "\xC3\xB3",
-                                       'Oacute;' => "\xC3\x93",
-                                       'oacute;' => "\xC3\xB3",
-                                       'Ocirc' => "\xC3\x94",
-                                       'ocirc' => "\xC3\xB4",
-                                       'Ocirc;' => "\xC3\x94",
-                                       'ocirc;' => "\xC3\xB4",
-                                       'OElig;' => "\xC5\x92",
-                                       'oelig;' => "\xC5\x93",
-                                       'Ograve' => "\xC3\x92",
-                                       'ograve' => "\xC3\xB2",
-                                       'Ograve;' => "\xC3\x92",
-                                       'ograve;' => "\xC3\xB2",
-                                       'oline;' => "\xE2\x80\xBE",
-                                       'Omega;' => "\xCE\xA9",
-                                       'omega;' => "\xCF\x89",
-                                       'Omicron;' => "\xCE\x9F",
-                                       'omicron;' => "\xCE\xBF",
-                                       'oplus;' => "\xE2\x8A\x95",
-                                       'or;' => "\xE2\x88\xA8",
-                                       'ordf' => "\xC2\xAA",
-                                       'ordf;' => "\xC2\xAA",
-                                       'ordm' => "\xC2\xBA",
-                                       'ordm;' => "\xC2\xBA",
-                                       'Oslash' => "\xC3\x98",
-                                       'oslash' => "\xC3\xB8",
-                                       'Oslash;' => "\xC3\x98",
-                                       'oslash;' => "\xC3\xB8",
-                                       'Otilde' => "\xC3\x95",
-                                       'otilde' => "\xC3\xB5",
-                                       'Otilde;' => "\xC3\x95",
-                                       'otilde;' => "\xC3\xB5",
-                                       'otimes;' => "\xE2\x8A\x97",
-                                       'Ouml' => "\xC3\x96",
-                                       'ouml' => "\xC3\xB6",
-                                       'Ouml;' => "\xC3\x96",
-                                       'ouml;' => "\xC3\xB6",
-                                       'para' => "\xC2\xB6",
-                                       'para;' => "\xC2\xB6",
-                                       'part;' => "\xE2\x88\x82",
-                                       'permil;' => "\xE2\x80\xB0",
-                                       'perp;' => "\xE2\x8A\xA5",
-                                       'Phi;' => "\xCE\xA6",
-                                       'phi;' => "\xCF\x86",
-                                       'Pi;' => "\xCE\xA0",
-                                       'pi;' => "\xCF\x80",
-                                       'piv;' => "\xCF\x96",
-                                       'plusmn' => "\xC2\xB1",
-                                       'plusmn;' => "\xC2\xB1",
-                                       'pound' => "\xC2\xA3",
-                                       'pound;' => "\xC2\xA3",
-                                       'Prime;' => "\xE2\x80\xB3",
-                                       'prime;' => "\xE2\x80\xB2",
-                                       'prod;' => "\xE2\x88\x8F",
-                                       'prop;' => "\xE2\x88\x9D",
-                                       'Psi;' => "\xCE\xA8",
-                                       'psi;' => "\xCF\x88",
-                                       'QUOT' => "\x22",
-                                       'quot' => "\x22",
-                                       'QUOT;' => "\x22",
-                                       'quot;' => "\x22",
-                                       'radic;' => "\xE2\x88\x9A",
-                                       'rang;' => "\xE3\x80\x89",
-                                       'raquo' => "\xC2\xBB",
-                                       'raquo;' => "\xC2\xBB",
-                                       'rArr;' => "\xE2\x87\x92",
-                                       'rarr;' => "\xE2\x86\x92",
-                                       'rceil;' => "\xE2\x8C\x89",
-                                       'rdquo;' => "\xE2\x80\x9D",
-                                       'real;' => "\xE2\x84\x9C",
-                                       'REG' => "\xC2\xAE",
-                                       'reg' => "\xC2\xAE",
-                                       'REG;' => "\xC2\xAE",
-                                       'reg;' => "\xC2\xAE",
-                                       'rfloor;' => "\xE2\x8C\x8B",
-                                       'Rho;' => "\xCE\xA1",
-                                       'rho;' => "\xCF\x81",
-                                       'rlm;' => "\xE2\x80\x8F",
-                                       'rsaquo;' => "\xE2\x80\xBA",
-                                       'rsquo;' => "\xE2\x80\x99",
-                                       'sbquo;' => "\xE2\x80\x9A",
-                                       'Scaron;' => "\xC5\xA0",
-                                       'scaron;' => "\xC5\xA1",
-                                       'sdot;' => "\xE2\x8B\x85",
-                                       'sect' => "\xC2\xA7",
-                                       'sect;' => "\xC2\xA7",
-                                       'shy' => "\xC2\xAD",
-                                       'shy;' => "\xC2\xAD",
-                                       'Sigma;' => "\xCE\xA3",
-                                       'sigma;' => "\xCF\x83",
-                                       'sigmaf;' => "\xCF\x82",
-                                       'sim;' => "\xE2\x88\xBC",
-                                       'spades;' => "\xE2\x99\xA0",
-                                       'sub;' => "\xE2\x8A\x82",
-                                       'sube;' => "\xE2\x8A\x86",
-                                       'sum;' => "\xE2\x88\x91",
-                                       'sup;' => "\xE2\x8A\x83",
-                                       'sup1' => "\xC2\xB9",
-                                       'sup1;' => "\xC2\xB9",
-                                       'sup2' => "\xC2\xB2",
-                                       'sup2;' => "\xC2\xB2",
-                                       'sup3' => "\xC2\xB3",
-                                       'sup3;' => "\xC2\xB3",
-                                       'supe;' => "\xE2\x8A\x87",
-                                       'szlig' => "\xC3\x9F",
-                                       'szlig;' => "\xC3\x9F",
-                                       'Tau;' => "\xCE\xA4",
-                                       'tau;' => "\xCF\x84",
-                                       'there4;' => "\xE2\x88\xB4",
-                                       'Theta;' => "\xCE\x98",
-                                       'theta;' => "\xCE\xB8",
-                                       'thetasym;' => "\xCF\x91",
-                                       'thinsp;' => "\xE2\x80\x89",
-                                       'THORN' => "\xC3\x9E",
-                                       'thorn' => "\xC3\xBE",
-                                       'THORN;' => "\xC3\x9E",
-                                       'thorn;' => "\xC3\xBE",
-                                       'tilde;' => "\xCB\x9C",
-                                       'times' => "\xC3\x97",
-                                       'times;' => "\xC3\x97",
-                                       'TRADE;' => "\xE2\x84\xA2",
-                                       'trade;' => "\xE2\x84\xA2",
-                                       'Uacute' => "\xC3\x9A",
-                                       'uacute' => "\xC3\xBA",
-                                       'Uacute;' => "\xC3\x9A",
-                                       'uacute;' => "\xC3\xBA",
-                                       'uArr;' => "\xE2\x87\x91",
-                                       'uarr;' => "\xE2\x86\x91",
-                                       'Ucirc' => "\xC3\x9B",
-                                       'ucirc' => "\xC3\xBB",
-                                       'Ucirc;' => "\xC3\x9B",
-                                       'ucirc;' => "\xC3\xBB",
-                                       'Ugrave' => "\xC3\x99",
-                                       'ugrave' => "\xC3\xB9",
-                                       'Ugrave;' => "\xC3\x99",
-                                       'ugrave;' => "\xC3\xB9",
-                                       'uml' => "\xC2\xA8",
-                                       'uml;' => "\xC2\xA8",
-                                       'upsih;' => "\xCF\x92",
-                                       'Upsilon;' => "\xCE\xA5",
-                                       'upsilon;' => "\xCF\x85",
-                                       'Uuml' => "\xC3\x9C",
-                                       'uuml' => "\xC3\xBC",
-                                       'Uuml;' => "\xC3\x9C",
-                                       'uuml;' => "\xC3\xBC",
-                                       'weierp;' => "\xE2\x84\x98",
-                                       'Xi;' => "\xCE\x9E",
-                                       'xi;' => "\xCE\xBE",
-                                       'Yacute' => "\xC3\x9D",
-                                       'yacute' => "\xC3\xBD",
-                                       'Yacute;' => "\xC3\x9D",
-                                       'yacute;' => "\xC3\xBD",
-                                       'yen' => "\xC2\xA5",
-                                       'yen;' => "\xC2\xA5",
-                                       'yuml' => "\xC3\xBF",
-                                       'Yuml;' => "\xC5\xB8",
-                                       'yuml;' => "\xC3\xBF",
-                                       'Zeta;' => "\xCE\x96",
-                                       'zeta;' => "\xCE\xB6",
-                                       'zwj;' => "\xE2\x80\x8D",
-                                       'zwnj;' => "\xE2\x80\x8C"
-                               );
-
-                               for ($i = 0, $match = null; $i < 9 && $this->consume() !== false; $i++)
-                               {
-                                       $consumed = substr($this->consumed, 1);
-                                       if (isset($entities[$consumed]))
-                                       {
-                                               $match = $consumed;
-                                       }
-                               }
-
-                               if ($match !== null)
-                               {
-                                       $this->data = substr_replace($this->data, $entities[$match], $this->position - strlen($consumed) - 1, strlen($match) + 1);
-                                       $this->position += strlen($entities[$match]) - strlen($consumed) - 1;
-                               }
-                               break;
-               }
-       }
-}
-
-/**
- * Handles everything related to enclosures (including Media RSS and iTunes RSS)
- *
- * Used by {@see SimplePie_Item::get_enclosure()} and {@see SimplePie_Item::get_enclosures()}
- *
- * This class can be overloaded with {@see SimplePie::set_enclosure_class()}
- *
- * @package SimplePie
- * @subpackage API
- */
-class SimplePie_Enclosure
-{
-       /**
-        * @var string
-        * @see get_bitrate()
-        */
-       var $bitrate;
-
-       /**
-        * @var array
-        * @see get_captions()
-        */
-       var $captions;
-
-       /**
-        * @var array
-        * @see get_categories()
-        */
-       var $categories;
-
-       /**
-        * @var int
-        * @see get_channels()
-        */
-       var $channels;
-
-       /**
-        * @var SimplePie_Copyright
-        * @see get_copyright()
-        */
-       var $copyright;
-
-       /**
-        * @var array
-        * @see get_credits()
-        */
-       var $credits;
-
-       /**
-        * @var string
-        * @see get_description()
-        */
-       var $description;
-
-       /**
-        * @var int
-        * @see get_duration()
-        */
-       var $duration;
-
-       /**
-        * @var string
-        * @see get_expression()
-        */
-       var $expression;
-
-       /**
-        * @var string
-        * @see get_framerate()
-        */
-       var $framerate;
-
-       /**
-        * @var string
-        * @see get_handler()
-        */
-       var $handler;
-
-       /**
-        * @var array
-        * @see get_hashes()
-        */
-       var $hashes;
-
-       /**
-        * @var string
-        * @see get_height()
-        */
-       var $height;
-
-       /**
-        * @deprecated
-        * @var null
-        */
-       var $javascript;
-
-       /**
-        * @var array
-        * @see get_keywords()
-        */
-       var $keywords;
-
-       /**
-        * @var string
-        * @see get_language()
-        */
-       var $lang;
-
-       /**
-        * @var string
-        * @see get_length()
-        */
-       var $length;
-
-       /**
-        * @var string
-        * @see get_link()
-        */
-       var $link;
-
-       /**
-        * @var string
-        * @see get_medium()
-        */
-       var $medium;
-
-       /**
-        * @var string
-        * @see get_player()
-        */
-       var $player;
-
-       /**
-        * @var array
-        * @see get_ratings()
-        */
-       var $ratings;
-
-       /**
-        * @var array
-        * @see get_restrictions()
-        */
-       var $restrictions;
-
-       /**
-        * @var string
-        * @see get_sampling_rate()
-        */
-       var $samplingrate;
-
-       /**
-        * @var array
-        * @see get_thumbnails()
-        */
-       var $thumbnails;
-
-       /**
-        * @var string
-        * @see get_title()
-        */
-       var $title;
-
-       /**
-        * @var string
-        * @see get_type()
-        */
-       var $type;
-
-       /**
-        * @var string
-        * @see get_width()
-        */
-       var $width;
-
-       /**
-        * Constructor, used to input the data
-        *
-        * For documentation on all the parameters, see the corresponding
-        * properties and their accessors
-        *
-        * @uses idna_convert If available, this will convert an IDN
-        */
-       public function __construct($link = null, $type = null, $length = null, $javascript = null, $bitrate = null, $captions = null, $categories = null, $channels = null, $copyright = null, $credits = null, $description = null, $duration = null, $expression = null, $framerate = null, $hashes = null, $height = null, $keywords = null, $lang = null, $medium = null, $player = null, $ratings = null, $restrictions = null, $samplingrate = null, $thumbnails = null, $title = null, $width = null)
-       {
-               $this->bitrate = $bitrate;
-               $this->captions = $captions;
-               $this->categories = $categories;
-               $this->channels = $channels;
-               $this->copyright = $copyright;
-               $this->credits = $credits;
-               $this->description = $description;
-               $this->duration = $duration;
-               $this->expression = $expression;
-               $this->framerate = $framerate;
-               $this->hashes = $hashes;
-               $this->height = $height;
-               $this->keywords = $keywords;
-               $this->lang = $lang;
-               $this->length = $length;
-               $this->link = $link;
-               $this->medium = $medium;
-               $this->player = $player;
-               $this->ratings = $ratings;
-               $this->restrictions = $restrictions;
-               $this->samplingrate = $samplingrate;
-               $this->thumbnails = $thumbnails;
-               $this->title = $title;
-               $this->type = $type;
-               $this->width = $width;
-
-               if (class_exists('idna_convert'))
-               {
-                       $idn = new idna_convert();
-                       $parsed = SimplePie_Misc::parse_url($link);
-                       $this->link = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']);
-               }
-               $this->handler = $this->get_handler(); // Needs to load last
-       }
-
-       /**
-        * String-ified version
-        *
-        * @return string
-        */
-       public function __toString()
-       {
-               // There is no $this->data here
-               return md5(serialize($this));
-       }
-
-       /**
-        * Get the bitrate
-        *
-        * @return string|null
-        */
-       public function get_bitrate()
-       {
-               if ($this->bitrate !== null)
-               {
-                       return $this->bitrate;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get a single caption
-        *
-        * @param int $key
-        * @return SimplePie_Caption|null
-        */
-       public function get_caption($key = 0)
-       {
-               $captions = $this->get_captions();
-               if (isset($captions[$key]))
-               {
-                       return $captions[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get all captions
-        *
-        * @return array|null Array of {@see SimplePie_Caption} objects
-        */
-       public function get_captions()
-       {
-               if ($this->captions !== null)
-               {
-                       return $this->captions;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get a single category
-        *
-        * @param int $key
-        * @return SimplePie_Category|null
-        */
-       public function get_category($key = 0)
-       {
-               $categories = $this->get_categories();
-               if (isset($categories[$key]))
-               {
-                       return $categories[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get all categories
-        *
-        * @return array|null Array of {@see SimplePie_Category} objects
-        */
-       public function get_categories()
-       {
-               if ($this->categories !== null)
-               {
-                       return $this->categories;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the number of audio channels
-        *
-        * @return int|null
-        */
-       public function get_channels()
-       {
-               if ($this->channels !== null)
-               {
-                       return $this->channels;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the copyright information
-        *
-        * @return SimplePie_Copyright|null
-        */
-       public function get_copyright()
-       {
-               if ($this->copyright !== null)
-               {
-                       return $this->copyright;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get a single credit
-        *
-        * @param int $key
-        * @return SimplePie_Credit|null
-        */
-       public function get_credit($key = 0)
-       {
-               $credits = $this->get_credits();
-               if (isset($credits[$key]))
-               {
-                       return $credits[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get all credits
-        *
-        * @return array|null Array of {@see SimplePie_Credit} objects
-        */
-       public function get_credits()
-       {
-               if ($this->credits !== null)
-               {
-                       return $this->credits;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the description of the enclosure
-        *
-        * @return string|null
-        */
-       public function get_description()
-       {
-               if ($this->description !== null)
-               {
-                       return $this->description;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the duration of the enclosure
-        *
-        * @param string $convert Convert seconds into hh:mm:ss
-        * @return string|int|null 'hh:mm:ss' string if `$convert` was specified, otherwise integer (or null if none found)
-        */
-       public function get_duration($convert = false)
-       {
-               if ($this->duration !== null)
-               {
-                       if ($convert)
-                       {
-                               $time = SimplePie_Misc::time_hms($this->duration);
-                               return $time;
-                       }
-                       else
-                       {
-                               return $this->duration;
-                       }
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the expression
-        *
-        * @return string Probably one of 'sample', 'full', 'nonstop', 'clip'. Defaults to 'full'
-        */
-       public function get_expression()
-       {
-               if ($this->expression !== null)
-               {
-                       return $this->expression;
-               }
-               else
-               {
-                       return 'full';
-               }
-       }
-
-       /**
-        * Get the file extension
-        *
-        * @return string|null
-        */
-       public function get_extension()
-       {
-               if ($this->link !== null)
-               {
-                       $url = SimplePie_Misc::parse_url($this->link);
-                       if ($url['path'] !== '')
-                       {
-                               return pathinfo($url['path'], PATHINFO_EXTENSION);
-                       }
-               }
-               return null;
-       }
-
-       /**
-        * Get the framerate (in frames-per-second)
-        *
-        * @return string|null
-        */
-       public function get_framerate()
-       {
-               if ($this->framerate !== null)
-               {
-                       return $this->framerate;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the preferred handler
-        *
-        * @return string|null One of 'flash', 'fmedia', 'quicktime', 'wmedia', 'mp3'
-        */
-       public function get_handler()
-       {
-               return $this->get_real_type(true);
-       }
-
-       /**
-        * Get a single hash
-        *
-        * @link http://www.rssboard.org/media-rss#media-hash
-        * @param int $key
-        * @return string|null Hash as per `media:hash`, prefixed with "$algo:"
-        */
-       public function get_hash($key = 0)
-       {
-               $hashes = $this->get_hashes();
-               if (isset($hashes[$key]))
-               {
-                       return $hashes[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get all credits
-        *
-        * @return array|null Array of strings, see {@see get_hash()}
-        */
-       public function get_hashes()
-       {
-               if ($this->hashes !== null)
-               {
-                       return $this->hashes;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the height
-        *
-        * @return string|null
-        */
-       public function get_height()
-       {
-               if ($this->height !== null)
-               {
-                       return $this->height;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the language
-        *
-        * @link http://tools.ietf.org/html/rfc3066
-        * @return string|null Language code as per RFC 3066
-        */
-       public function get_language()
-       {
-               if ($this->lang !== null)
-               {
-                       return $this->lang;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get a single keyword
-        *
-        * @param int $key
-        * @return string|null
-        */
-       public function get_keyword($key = 0)
-       {
-               $keywords = $this->get_keywords();
-               if (isset($keywords[$key]))
-               {
-                       return $keywords[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get all keywords
-        *
-        * @return array|null Array of strings
-        */
-       public function get_keywords()
-       {
-               if ($this->keywords !== null)
-               {
-                       return $this->keywords;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get length
-        *
-        * @return float Length in bytes
-        */
-       public function get_length()
-       {
-               if ($this->length !== null)
-               {
-                       return $this->length;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the URL
-        *
-        * @return string|null
-        */
-       public function get_link()
-       {
-               if ($this->link !== null)
-               {
-                       return urldecode($this->link);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the medium
-        *
-        * @link http://www.rssboard.org/media-rss#media-content
-        * @return string|null Should be one of 'image', 'audio', 'video', 'document', 'executable'
-        */
-       public function get_medium()
-       {
-               if ($this->medium !== null)
-               {
-                       return $this->medium;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the player URL
-        *
-        * Typically the same as {@see get_permalink()}
-        * @return string|null Player URL
-        */
-       public function get_player()
-       {
-               if ($this->player !== null)
-               {
-                       return $this->player;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get a single rating
-        *
-        * @param int $key
-        * @return SimplePie_Rating|null
-        */
-       public function get_rating($key = 0)
-       {
-               $ratings = $this->get_ratings();
-               if (isset($ratings[$key]))
-               {
-                       return $ratings[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get all ratings
-        *
-        * @return array|null Array of {@see SimplePie_Rating} objects
-        */
-       public function get_ratings()
-       {
-               if ($this->ratings !== null)
-               {
-                       return $this->ratings;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get a single restriction
-        *
-        * @param int $key
-        * @return SimplePie_Restriction|null
-        */
-       public function get_restriction($key = 0)
-       {
-               $restrictions = $this->get_restrictions();
-               if (isset($restrictions[$key]))
-               {
-                       return $restrictions[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get all restrictions
-        *
-        * @return array|null Array of {@see SimplePie_Restriction} objects
-        */
-       public function get_restrictions()
-       {
-               if ($this->restrictions !== null)
-               {
-                       return $this->restrictions;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the sampling rate (in kHz)
-        *
-        * @return string|null
-        */
-       public function get_sampling_rate()
-       {
-               if ($this->samplingrate !== null)
-               {
-                       return $this->samplingrate;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the file size (in MiB)
-        *
-        * @return float|null File size in mebibytes (1048 bytes)
-        */
-       public function get_size()
-       {
-               $length = $this->get_length();
-               if ($length !== null)
-               {
-                       return round($length/1048576, 2);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get a single thumbnail
-        *
-        * @param int $key
-        * @return string|null Thumbnail URL
-        */
-       public function get_thumbnail($key = 0)
-       {
-               $thumbnails = $this->get_thumbnails();
-               if (isset($thumbnails[$key]))
-               {
-                       return $thumbnails[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get all thumbnails
-        *
-        * @return array|null Array of thumbnail URLs
-        */
-       public function get_thumbnails()
-       {
-               if ($this->thumbnails !== null)
-               {
-                       return $this->thumbnails;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the title
-        *
-        * @return string|null
-        */
-       public function get_title()
-       {
-               if ($this->title !== null)
-               {
-                       return $this->title;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get mimetype of the enclosure
-        *
-        * @see get_real_type()
-        * @return string|null MIME type
-        */
-       public function get_type()
-       {
-               if ($this->type !== null)
-               {
-                       return $this->type;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the width
-        *
-        * @return string|null
-        */
-       public function get_width()
-       {
-               if ($this->width !== null)
-               {
-                       return $this->width;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Embed the enclosure using `<embed>`
-        *
-        * @deprecated Use the second parameter to {@see embed} instead
-        *
-        * @param array|string $options See first paramter to {@see embed}
-        * @return string HTML string to output
-        */
-       public function native_embed($options='')
-       {
-               return $this->embed($options, true);
-       }
-
-       /**
-        * Embed the enclosure using Javascript
-        *
-        * `$options` is an array or comma-separated key:value string, with the
-        * following properties:
-        *
-        * - `alt` (string): Alternate content for when an end-user does not have
-        *    the appropriate handler installed or when a file type is
-        *    unsupported. Can be any text or HTML. Defaults to blank.
-        * - `altclass` (string): If a file type is unsupported, the end-user will
-        *    see the alt text (above) linked directly to the content. That link
-        *    will have this value as its class name. Defaults to blank.
-        * - `audio` (string): This is an image that should be used as a
-        *    placeholder for audio files before they're loaded (QuickTime-only).
-        *    Can be any relative or absolute URL. Defaults to blank.
-        * - `bgcolor` (string): The background color for the media, if not
-        *    already transparent. Defaults to `#ffffff`.
-        * - `height` (integer): The height of the embedded media. Accepts any
-        *    numeric pixel value (such as `360`) or `auto`. Defaults to `auto`,
-        *    and it is recommended that you use this default.
-        * - `loop` (boolean): Do you want the media to loop when its done?
-        *    Defaults to `false`.
-        * - `mediaplayer` (string): The location of the included
-        *    `mediaplayer.swf` file. This allows for the playback of Flash Video
-        *    (`.flv`) files, and is the default handler for non-Odeo MP3's.
-        *    Defaults to blank.
-        * - `video` (string): This is an image that should be used as a
-        *    placeholder for video files before they're loaded (QuickTime-only).
-        *    Can be any relative or absolute URL. Defaults to blank.
-        * - `width` (integer): The width of the embedded media. Accepts any
-        *    numeric pixel value (such as `480`) or `auto`. Defaults to `auto`,
-        *    and it is recommended that you use this default.
-        * - `widescreen` (boolean): Is the enclosure widescreen or standard?
-        *    This applies only to video enclosures, and will automatically resize
-        *    the content appropriately.  Defaults to `false`, implying 4:3 mode.
-        *
-        * Note: Non-widescreen (4:3) mode with `width` and `height` set to `auto`
-        * will default to 480x360 video resolution.  Widescreen (16:9) mode with
-        * `width` and `height` set to `auto` will default to 480x270 video resolution.
-        *
-        * @todo If the dimensions for media:content are defined, use them when width/height are set to 'auto'.
-        * @param array|string $options Comma-separated key:value list, or array
-        * @param bool $native Use `<embed>`
-        * @return string HTML string to output
-        */
-       public function embed($options = '', $native = false)
-       {
-               // Set up defaults
-               $audio = '';
-               $video = '';
-               $alt = '';
-               $altclass = '';
-               $loop = 'false';
-               $width = 'auto';
-               $height = 'auto';
-               $bgcolor = '#ffffff';
-               $mediaplayer = '';
-               $widescreen = false;
-               $handler = $this->get_handler();
-               $type = $this->get_real_type();
-
-               // Process options and reassign values as necessary
-               if (is_array($options))
-               {
-                       extract($options);
-               }
-               else
-               {
-                       $options = explode(',', $options);
-                       foreach($options as $option)
-                       {
-                               $opt = explode(':', $option, 2);
-                               if (isset($opt[0], $opt[1]))
-                               {
-                                       $opt[0] = trim($opt[0]);
-                                       $opt[1] = trim($opt[1]);
-                                       switch ($opt[0])
-                                       {
-                                               case 'audio':
-                                                       $audio = $opt[1];
-                                                       break;
-
-                                               case 'video':
-                                                       $video = $opt[1];
-                                                       break;
-
-                                               case 'alt':
-                                                       $alt = $opt[1];
-                                                       break;
-
-                                               case 'altclass':
-                                                       $altclass = $opt[1];
-                                                       break;
-
-                                               case 'loop':
-                                                       $loop = $opt[1];
-                                                       break;
-
-                                               case 'width':
-                                                       $width = $opt[1];
-                                                       break;
-
-                                               case 'height':
-                                                       $height = $opt[1];
-                                                       break;
-
-                                               case 'bgcolor':
-                                                       $bgcolor = $opt[1];
-                                                       break;
-
-                                               case 'mediaplayer':
-                                                       $mediaplayer = $opt[1];
-                                                       break;
-
-                                               case 'widescreen':
-                                                       $widescreen = $opt[1];
-                                                       break;
-                                       }
-                               }
-                       }
-               }
-
-               $mime = explode('/', $type, 2);
-               $mime = $mime[0];
-
-               // Process values for 'auto'
-               if ($width === 'auto')
-               {
-                       if ($mime === 'video')
-                       {
-                               if ($height === 'auto')
-                               {
-                                       $width = 480;
-                               }
-                               elseif ($widescreen)
-                               {
-                                       $width = round((intval($height)/9)*16);
-                               }
-                               else
-                               {
-                                       $width = round((intval($height)/3)*4);
-                               }
-                       }
-                       else
-                       {
-                               $width = '100%';
-                       }
-               }
-
-               if ($height === 'auto')
-               {
-                       if ($mime === 'audio')
-                       {
-                               $height = 0;
-                       }
-                       elseif ($mime === 'video')
-                       {
-                               if ($width === 'auto')
-                               {
-                                       if ($widescreen)
-                                       {
-                                               $height = 270;
-                                       }
-                                       else
-                                       {
-                                               $height = 360;
-                                       }
-                               }
-                               elseif ($widescreen)
-                               {
-                                       $height = round((intval($width)/16)*9);
-                               }
-                               else
-                               {
-                                       $height = round((intval($width)/4)*3);
-                               }
-                       }
-                       else
-                       {
-                               $height = 376;
-                       }
-               }
-               elseif ($mime === 'audio')
-               {
-                       $height = 0;
-               }
-
-               // Set proper placeholder value
-               if ($mime === 'audio')
-               {
-                       $placeholder = $audio;
-               }
-               elseif ($mime === 'video')
-               {
-                       $placeholder = $video;
-               }
-
-               $embed = '';
-
-               // Flash
-               if ($handler === 'flash')
-               {
-                       if ($native)
-                       {
-                               $embed .= "<embed src=\"" . $this->get_link() . "\" pluginspage=\"http://adobe.com/go/getflashplayer\" type=\"$type\" quality=\"high\" width=\"$width\" height=\"$height\" bgcolor=\"$bgcolor\" loop=\"$loop\"></embed>";
-                       }
-                       else
-                       {
-                               $embed .= "<script type='text/javascript'>embed_flash('$bgcolor', '$width', '$height', '" . $this->get_link() . "', '$loop', '$type');</script>";
-                       }
-               }
-
-               // Flash Media Player file types.
-               // Preferred handler for MP3 file types.
-               elseif ($handler === 'fmedia' || ($handler === 'mp3' && $mediaplayer !== ''))
-               {
-                       $height += 20;
-                       if ($native)
-                       {
-                               $embed .= "<embed src=\"$mediaplayer\" pluginspage=\"http://adobe.com/go/getflashplayer\" type=\"application/x-shockwave-flash\" quality=\"high\" width=\"$width\" height=\"$height\" wmode=\"transparent\" flashvars=\"file=" . rawurlencode($this->get_link().'?file_extension=.'.$this->get_extension()) . "&autostart=false&repeat=$loop&showdigits=true&showfsbutton=false\"></embed>";
-                       }
-                       else
-                       {
-                               $embed .= "<script type='text/javascript'>embed_flv('$width', '$height', '" . rawurlencode($this->get_link().'?file_extension=.'.$this->get_extension()) . "', '$placeholder', '$loop', '$mediaplayer');</script>";
-                       }
-               }
-
-               // QuickTime 7 file types.  Need to test with QuickTime 6.
-               // Only handle MP3's if the Flash Media Player is not present.
-               elseif ($handler === 'quicktime' || ($handler === 'mp3' && $mediaplayer === ''))
-               {
-                       $height += 16;
-                       if ($native)
-                       {
-                               if ($placeholder !== '')
-                               {
-                                       $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" href=\"" . $this->get_link() . "\" src=\"$placeholder\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"false\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\"></embed>";
-                               }
-                               else
-                               {
-                                       $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" src=\"" . $this->get_link() . "\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"true\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\"></embed>";
-                               }
-                       }
-                       else
-                       {
-                               $embed .= "<script type='text/javascript'>embed_quicktime('$type', '$bgcolor', '$width', '$height', '" . $this->get_link() . "', '$placeholder', '$loop');</script>";
-                       }
-               }
-
-               // Windows Media
-               elseif ($handler === 'wmedia')
-               {
-                       $height += 45;
-                       if ($native)
-                       {
-                               $embed .= "<embed type=\"application/x-mplayer2\" src=\"" . $this->get_link() . "\" autosize=\"1\" width=\"$width\" height=\"$height\" showcontrols=\"1\" showstatusbar=\"0\" showdisplay=\"0\" autostart=\"0\"></embed>";
-                       }
-                       else
-                       {
-                               $embed .= "<script type='text/javascript'>embed_wmedia('$width', '$height', '" . $this->get_link() . "');</script>";
-                       }
-               }
-
-               // Everything else
-               else $embed .= '<a href="' . $this->get_link() . '" class="' . $altclass . '">' . $alt . '</a>';
-
-               return $embed;
-       }
-
-       /**
-        * Get the real media type
-        *
-        * Often, feeds lie to us, necessitating a bit of deeper inspection. This
-        * converts types to their canonical representations based on the file
-        * extension
-        *
-        * @see get_type()
-        * @param bool $find_handler Internal use only, use {@see get_handler()} instead
-        * @return string MIME type
-        */
-       public function get_real_type($find_handler = false)
-       {
-               // Mime-types by handler.
-               $types_flash = array('application/x-shockwave-flash', 'application/futuresplash'); // Flash
-               $types_fmedia = array('video/flv', 'video/x-flv','flv-application/octet-stream'); // Flash Media Player
-               $types_quicktime = array('audio/3gpp', 'audio/3gpp2', 'audio/aac', 'audio/x-aac', 'audio/aiff', 'audio/x-aiff', 'audio/mid', 'audio/midi', 'audio/x-midi', 'audio/mp4', 'audio/m4a', 'audio/x-m4a', 'audio/wav', 'audio/x-wav', 'video/3gpp', 'video/3gpp2', 'video/m4v', 'video/x-m4v', 'video/mp4', 'video/mpeg', 'video/x-mpeg', 'video/quicktime', 'video/sd-video'); // QuickTime
-               $types_wmedia = array('application/asx', 'application/x-mplayer2', 'audio/x-ms-wma', 'audio/x-ms-wax', 'video/x-ms-asf-plugin', 'video/x-ms-asf', 'video/x-ms-wm', 'video/x-ms-wmv', 'video/x-ms-wvx'); // Windows Media
-               $types_mp3 = array('audio/mp3', 'audio/x-mp3', 'audio/mpeg', 'audio/x-mpeg'); // MP3
-
-               if ($this->get_type() !== null)
-               {
-                       $type = strtolower($this->type);
-               }
-               else
-               {
-                       $type = null;
-               }
-
-               // If we encounter an unsupported mime-type, check the file extension and guess intelligently.
-               if (!in_array($type, array_merge($types_flash, $types_fmedia, $types_quicktime, $types_wmedia, $types_mp3)))
-               {
-                       switch (strtolower($this->get_extension()))
-                       {
-                               // Audio mime-types
-                               case 'aac':
-                               case 'adts':
-                                       $type = 'audio/acc';
-                                       break;
-
-                               case 'aif':
-                               case 'aifc':
-                               case 'aiff':
-                               case 'cdda':
-                                       $type = 'audio/aiff';
-                                       break;
-
-                               case 'bwf':
-                                       $type = 'audio/wav';
-                                       break;
-
-                               case 'kar':
-                               case 'mid':
-                               case 'midi':
-                               case 'smf':
-                                       $type = 'audio/midi';
-                                       break;
-
-                               case 'm4a':
-                                       $type = 'audio/x-m4a';
-                                       break;
-
-                               case 'mp3':
-                               case 'swa':
-                                       $type = 'audio/mp3';
-                                       break;
-
-                               case 'wav':
-                                       $type = 'audio/wav';
-                                       break;
-
-                               case 'wax':
-                                       $type = 'audio/x-ms-wax';
-                                       break;
-
-                               case 'wma':
-                                       $type = 'audio/x-ms-wma';
-                                       break;
-
-                               // Video mime-types
-                               case '3gp':
-                               case '3gpp':
-                                       $type = 'video/3gpp';
-                                       break;
-
-                               case '3g2':
-                               case '3gp2':
-                                       $type = 'video/3gpp2';
-                                       break;
-
-                               case 'asf':
-                                       $type = 'video/x-ms-asf';
-                                       break;
-
-                               case 'flv':
-                                       $type = 'video/x-flv';
-                                       break;
-
-                               case 'm1a':
-                               case 'm1s':
-                               case 'm1v':
-                               case 'm15':
-                               case 'm75':
-                               case 'mp2':
-                               case 'mpa':
-                               case 'mpeg':
-                               case 'mpg':
-                               case 'mpm':
-                               case 'mpv':
-                                       $type = 'video/mpeg';
-                                       break;
-
-                               case 'm4v':
-                                       $type = 'video/x-m4v';
-                                       break;
-
-                               case 'mov':
-                               case 'qt':
-                                       $type = 'video/quicktime';
-                                       break;
-
-                               case 'mp4':
-                               case 'mpg4':
-                                       $type = 'video/mp4';
-                                       break;
-
-                               case 'sdv':
-                                       $type = 'video/sd-video';
-                                       break;
-
-                               case 'wm':
-                                       $type = 'video/x-ms-wm';
-                                       break;
-
-                               case 'wmv':
-                                       $type = 'video/x-ms-wmv';
-                                       break;
-
-                               case 'wvx':
-                                       $type = 'video/x-ms-wvx';
-                                       break;
-
-                               // Flash mime-types
-                               case 'spl':
-                                       $type = 'application/futuresplash';
-                                       break;
-
-                               case 'swf':
-                                       $type = 'application/x-shockwave-flash';
-                                       break;
-                       }
-               }
-
-               if ($find_handler)
-               {
-                       if (in_array($type, $types_flash))
-                       {
-                               return 'flash';
-                       }
-                       elseif (in_array($type, $types_fmedia))
-                       {
-                               return 'fmedia';
-                       }
-                       elseif (in_array($type, $types_quicktime))
-                       {
-                               return 'quicktime';
-                       }
-                       elseif (in_array($type, $types_wmedia))
-                       {
-                               return 'wmedia';
-                       }
-                       elseif (in_array($type, $types_mp3))
-                       {
-                               return 'mp3';
-                       }
-                       else
-                       {
-                               return null;
-                       }
-               }
-               else
-               {
-                       return $type;
-               }
-       }
-}
-
-/**
- * General SimplePie exception class
- *
- * @package SimplePie
- */
-class SimplePie_Exception extends Exception
-{
-}
-
-/**
- * Used for fetching remote files and reading local files
- *
- * Supports HTTP 1.0 via cURL or fsockopen, with spotty HTTP 1.1 support
- *
- * This class can be overloaded with {@see SimplePie::set_file_class()}
- *
- * @package SimplePie
- * @subpackage HTTP
- * @todo Move to properly supporting RFC2616 (HTTP/1.1)
- */
-class SimplePie_File
-{
-       var $url;
-       var $useragent;
-       var $success = true;
-       var $headers = array();
-       var $body;
-       var $status_code;
-       var $redirects = 0;
-       var $error;
-       var $method = SIMPLEPIE_FILE_SOURCE_NONE;
-
-       public function __construct($url, $timeout = 10, $redirects = 5, $headers = null, $useragent = null, $force_fsockopen = false)
-       {
-               if (class_exists('idna_convert'))
-               {
-                       $idn = new idna_convert();
-                       $parsed = SimplePie_Misc::parse_url($url);
-                       $url = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']);
-               }
-               $this->url = $url;
-               $this->useragent = $useragent;
-               if (preg_match('/^http(s)?:\/\//i', $url))
-               {
-                       if ($useragent === null)
-                       {
-                               $useragent = ini_get('user_agent');
-                               $this->useragent = $useragent;
-                       }
-                       if (!is_array($headers))
-                       {
-                               $headers = array();
-                       }
-                       if (!$force_fsockopen && function_exists('curl_exec'))
-                       {
-                               $this->method = SIMPLEPIE_FILE_SOURCE_REMOTE | SIMPLEPIE_FILE_SOURCE_CURL;
-                               $fp = curl_init();
-                               $headers2 = array();
-                               foreach ($headers as $key => $value)
-                               {
-                                       $headers2[] = "$key: $value";
-                               }
-                               if (version_compare(SimplePie_Misc::get_curl_version(), '7.10.5', '>='))
-                               {
-                                       curl_setopt($fp, CURLOPT_ENCODING, '');
-                               }
-                               curl_setopt($fp, CURLOPT_URL, $url);
-                               curl_setopt($fp, CURLOPT_HEADER, 1);
-                               curl_setopt($fp, CURLOPT_RETURNTRANSFER, 1);
-                               curl_setopt($fp, CURLOPT_TIMEOUT, $timeout);
-                               curl_setopt($fp, CURLOPT_CONNECTTIMEOUT, $timeout);
-                               curl_setopt($fp, CURLOPT_REFERER, $url);
-                               curl_setopt($fp, CURLOPT_USERAGENT, $useragent);
-                               curl_setopt($fp, CURLOPT_HTTPHEADER, $headers2);
-                               if (!ini_get('open_basedir') && !ini_get('safe_mode') && version_compare(SimplePie_Misc::get_curl_version(), '7.15.2', '>='))
-                               {
-                                       curl_setopt($fp, CURLOPT_FOLLOWLOCATION, 1);
-                                       curl_setopt($fp, CURLOPT_MAXREDIRS, $redirects);
-                               }
-
-                               /* Enable Digest authentication and SSL -fox */
-                               curl_setopt($fp, CURLOPT_SSL_VERIFYPEER, false); 
-                               curl_setopt($fp, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
-
-                               $this->headers = curl_exec($fp);
-                               if (curl_errno($fp) === 23 || curl_errno($fp) === 61)
-                               {
-                                       curl_setopt($fp, CURLOPT_ENCODING, 'none');
-                                       $this->headers = curl_exec($fp);
-                               }
-                               if (curl_errno($fp))
-                               {
-                                       $this->error = 'cURL error ' . curl_errno($fp) . ': ' . curl_error($fp);
-                                       $this->success = false;
-                               }
-                               else
-                               {
-                                       $info = curl_getinfo($fp);
-                                       curl_close($fp);
-                                       $this->headers = explode("\r\n\r\n", $this->headers, $info['redirect_count'] + 1);
-                                       $this->headers = array_pop($this->headers);
-                                       $parser = new SimplePie_HTTP_Parser($this->headers);
-                                       if ($parser->parse())
-                                       {
-                                               $this->headers = $parser->headers;
-                                               $this->body = $parser->body;
-                                               $this->status_code = $parser->status_code;
-                                               if ((in_array($this->status_code, array(300, 301, 302, 303, 307)) || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects)
-                                               {
-                                                       $this->redirects++;
-                                                       $location = SimplePie_Misc::absolutize_url($this->headers['location'], $url);
-                                                       return $this->__construct($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen);
-                                               }
-                                       }
-                               }
-                       }
-                       else
-                       {
-                               $this->method = SIMPLEPIE_FILE_SOURCE_REMOTE | SIMPLEPIE_FILE_SOURCE_FSOCKOPEN;
-                               $url_parts = parse_url($url);
-                               $socket_host = $url_parts['host'];
-                               if (isset($url_parts['scheme']) && strtolower($url_parts['scheme']) === 'https')
-                               {
-                                       $socket_host = "ssl://$url_parts[host]";
-                                       $url_parts['port'] = 443;
-                               }
-                               if (!isset($url_parts['port']))
-                               {
-                                       $url_parts['port'] = 80;
-                               }
-                               $fp = @fsockopen($socket_host, $url_parts['port'], $errno, $errstr, $timeout);
-                               if (!$fp)
-                               {
-                                       $this->error = 'fsockopen error: ' . $errstr;
-                                       $this->success = false;
-                               }
-                               else
-                               {
-                                       stream_set_timeout($fp, $timeout);
-                                       if (isset($url_parts['path']))
-                                       {
-                                               if (isset($url_parts['query']))
-                                               {
-                                                       $get = "$url_parts[path]?$url_parts[query]";
-                                               }
-                                               else
-                                               {
-                                                       $get = $url_parts['path'];
-                                               }
-                                       }
-                                       else
-                                       {
-                                               $get = '/';
-                                       }
-                                       $out = "GET $get HTTP/1.1\r\n";
-                                       $out .= "Host: $url_parts[host]\r\n";
-                                       $out .= "User-Agent: $useragent\r\n";
-                                       if (extension_loaded('zlib'))
-                                       {
-                                               $out .= "Accept-Encoding: x-gzip,gzip,deflate\r\n";
-                                       }
-
-                                       if (isset($url_parts['user']) && isset($url_parts['pass']))
-                                       {
-                                               $out .= "Authorization: Basic " . base64_encode("$url_parts[user]:$url_parts[pass]") . "\r\n";
-                                       }
-                                       foreach ($headers as $key => $value)
-                                       {
-                                               $out .= "$key: $value\r\n";
-                                       }
-                                       $out .= "Connection: Close\r\n\r\n";
-                                       fwrite($fp, $out);
-
-                                       $info = stream_get_meta_data($fp);
-
-                                       $this->headers = '';
-                                       while (!$info['eof'] && !$info['timed_out'])
-                                       {
-                                               $this->headers .= fread($fp, 1160);
-                                               $info = stream_get_meta_data($fp);
-                                       }
-                                       if (!$info['timed_out'])
-                                       {
-                                               $parser = new SimplePie_HTTP_Parser($this->headers);
-                                               if ($parser->parse())
-                                               {
-                                                       $this->headers = $parser->headers;
-                                                       $this->body = $parser->body;
-                                                       $this->status_code = $parser->status_code;
-                                                       if ((in_array($this->status_code, array(300, 301, 302, 303, 307)) || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects)
-                                                       {
-                                                               $this->redirects++;
-                                                               $location = SimplePie_Misc::absolutize_url($this->headers['location'], $url);
-                                                               return $this->__construct($location, $timeout, $redirects, $headers, $useragent, $force_fsockopen);
-                                                       }
-                                                       if (isset($this->headers['content-encoding']))
-                                                       {
-                                                               // Hey, we act dumb elsewhere, so let's do that here too
-                                                               switch (strtolower(trim($this->headers['content-encoding'], "\x09\x0A\x0D\x20")))
-                                                               {
-                                                                       case 'gzip':
-                                                                       case 'x-gzip':
-                                                                               $decoder = new SimplePie_gzdecode($this->body);
-                                                                               if (!$decoder->parse())
-                                                                               {
-                                                                                       $this->error = 'Unable to decode HTTP "gzip" stream';
-                                                                                       $this->success = false;
-                                                                               }
-                                                                               else
-                                                                               {
-                                                                                       $this->body = $decoder->data;
-                                                                               }
-                                                                               break;
-
-                                                                       case 'deflate':
-                                                                               if (($decompressed = gzinflate($this->body)) !== false)
-                                                                               {
-                                                                                       $this->body = $decompressed;
-                                                                               }
-                                                                               else if (($decompressed = gzuncompress($this->body)) !== false)
-                                                                               {
-                                                                                       $this->body = $decompressed;
-                                                                               }
-                                                                               else if (function_exists('gzdecode') && ($decompressed = gzdecode($this->body)) !== false)
-                                                                               {
-                                                                                       $this->body = $decompressed;
-                                                                               }
-                                                                               else
-                                                                               {
-                                                                                       $this->error = 'Unable to decode HTTP "deflate" stream';
-                                                                                       $this->success = false;
-                                                                               }
-                                                                               break;
-
-                                                                       default:
-                                                                               $this->error = 'Unknown content coding';
-                                                                               $this->success = false;
-                                                               }
-                                                       }
-                                               }
-                                       }
-                                       else
-                                       {
-                                               $this->error = 'fsocket timed out';
-                                               $this->success = false;
-                                       }
-                                       fclose($fp);
-                               }
-                       }
-               }
-               else
-               {
-                       $this->method = SIMPLEPIE_FILE_SOURCE_LOCAL | SIMPLEPIE_FILE_SOURCE_FILE_GET_CONTENTS;
-                       if (!$this->body = file_get_contents($url))
-                       {
-                               $this->error = 'file_get_contents could not read the file';
-                               $this->success = false;
-                       }
-               }
-       }
-}
-
-/**
- * Decode 'gzip' encoded HTTP data
- *
- * @package SimplePie
- * @subpackage HTTP
- * @link http://www.gzip.org/format.txt
- */
-class SimplePie_gzdecode
-{
-       /**
-        * Compressed data
-        *
-        * @access private
-        * @var string
-        * @see gzdecode::$data
-        */
-       var $compressed_data;
-
-       /**
-        * Size of compressed data
-        *
-        * @access private
-        * @var int
-        */
-       var $compressed_size;
-
-       /**
-        * Minimum size of a valid gzip string
-        *
-        * @access private
-        * @var int
-        */
-       var $min_compressed_size = 18;
-
-       /**
-        * Current position of pointer
-        *
-        * @access private
-        * @var int
-        */
-       var $position = 0;
-
-       /**
-        * Flags (FLG)
-        *
-        * @access private
-        * @var int
-        */
-       var $flags;
-
-       /**
-        * Uncompressed data
-        *
-        * @access public
-        * @see gzdecode::$compressed_data
-        * @var string
-        */
-       var $data;
-
-       /**
-        * Modified time
-        *
-        * @access public
-        * @var int
-        */
-       var $MTIME;
-
-       /**
-        * Extra Flags
-        *
-        * @access public
-        * @var int
-        */
-       var $XFL;
-
-       /**
-        * Operating System
-        *
-        * @access public
-        * @var int
-        */
-       var $OS;
-
-       /**
-        * Subfield ID 1
-        *
-        * @access public
-        * @see gzdecode::$extra_field
-        * @see gzdecode::$SI2
-        * @var string
-        */
-       var $SI1;
-
-       /**
-        * Subfield ID 2
-        *
-        * @access public
-        * @see gzdecode::$extra_field
-        * @see gzdecode::$SI1
-        * @var string
-        */
-       var $SI2;
-
-       /**
-        * Extra field content
-        *
-        * @access public
-        * @see gzdecode::$SI1
-        * @see gzdecode::$SI2
-        * @var string
-        */
-       var $extra_field;
-
-       /**
-        * Original filename
-        *
-        * @access public
-        * @var string
-        */
-       var $filename;
-
-       /**
-        * Human readable comment
-        *
-        * @access public
-        * @var string
-        */
-       var $comment;
-
-       /**
-        * Don't allow anything to be set
-        *
-        * @param string $name
-        * @param mixed $value
-        */
-       public function __set($name, $value)
-       {
-               trigger_error("Cannot write property $name", E_USER_ERROR);
-       }
-
-       /**
-        * Set the compressed string and related properties
-        *
-        * @param string $data
-        */
-       public function __construct($data)
-       {
-               $this->compressed_data = $data;
-               $this->compressed_size = strlen($data);
-       }
-
-       /**
-        * Decode the GZIP stream
-        *
-        * @return bool Successfulness
-        */
-       public function parse()
-       {
-               if ($this->compressed_size >= $this->min_compressed_size)
-               {
-                       // Check ID1, ID2, and CM
-                       if (substr($this->compressed_data, 0, 3) !== "\x1F\x8B\x08")
-                       {
-                               return false;
-                       }
-
-                       // Get the FLG (FLaGs)
-                       $this->flags = ord($this->compressed_data[3]);
-
-                       // FLG bits above (1 << 4) are reserved
-                       if ($this->flags > 0x1F)
-                       {
-                               return false;
-                       }
-
-                       // Advance the pointer after the above
-                       $this->position += 4;
-
-                       // MTIME
-                       $mtime = substr($this->compressed_data, $this->position, 4);
-                       // Reverse the string if we're on a big-endian arch because l is the only signed long and is machine endianness
-                       if (current(unpack('S', "\x00\x01")) === 1)
-                       {
-                               $mtime = strrev($mtime);
-                       }
-                       $this->MTIME = current(unpack('l', $mtime));
-                       $this->position += 4;
-
-                       // Get the XFL (eXtra FLags)
-                       $this->XFL = ord($this->compressed_data[$this->position++]);
-
-                       // Get the OS (Operating System)
-                       $this->OS = ord($this->compressed_data[$this->position++]);
-
-                       // Parse the FEXTRA
-                       if ($this->flags & 4)
-                       {
-                               // Read subfield IDs
-                               $this->SI1 = $this->compressed_data[$this->position++];
-                               $this->SI2 = $this->compressed_data[$this->position++];
-
-                               // SI2 set to zero is reserved for future use
-                               if ($this->SI2 === "\x00")
-                               {
-                                       return false;
-                               }
-
-                               // Get the length of the extra field
-                               $len = current(unpack('v', substr($this->compressed_data, $this->position, 2)));
-                               $this->position += 2;
-
-                               // Check the length of the string is still valid
-                               $this->min_compressed_size += $len + 4;
-                               if ($this->compressed_size >= $this->min_compressed_size)
-                               {
-                                       // Set the extra field to the given data
-                                       $this->extra_field = substr($this->compressed_data, $this->position, $len);
-                                       $this->position += $len;
-                               }
-                               else
-                               {
-                                       return false;
-                               }
-                       }
-
-                       // Parse the FNAME
-                       if ($this->flags & 8)
-                       {
-                               // Get the length of the filename
-                               $len = strcspn($this->compressed_data, "\x00", $this->position);
-
-                               // Check the length of the string is still valid
-                               $this->min_compressed_size += $len + 1;
-                               if ($this->compressed_size >= $this->min_compressed_size)
-                               {
-                                       // Set the original filename to the given string
-                                       $this->filename = substr($this->compressed_data, $this->position, $len);
-                                       $this->position += $len + 1;
-                               }
-                               else
-                               {
-                                       return false;
-                               }
-                       }
-
-                       // Parse the FCOMMENT
-                       if ($this->flags & 16)
-                       {
-                               // Get the length of the comment
-                               $len = strcspn($this->compressed_data, "\x00", $this->position);
-
-                               // Check the length of the string is still valid
-                               $this->min_compressed_size += $len + 1;
-                               if ($this->compressed_size >= $this->min_compressed_size)
-                               {
-                                       // Set the original comment to the given string
-                                       $this->comment = substr($this->compressed_data, $this->position, $len);
-                                       $this->position += $len + 1;
-                               }
-                               else
-                               {
-                                       return false;
-                               }
-                       }
-
-                       // Parse the FHCRC
-                       if ($this->flags & 2)
-                       {
-                               // Check the length of the string is still valid
-                               $this->min_compressed_size += $len + 2;
-                               if ($this->compressed_size >= $this->min_compressed_size)
-                               {
-                                       // Read the CRC
-                                       $crc = current(unpack('v', substr($this->compressed_data, $this->position, 2)));
-
-                                       // Check the CRC matches
-                                       if ((crc32(substr($this->compressed_data, 0, $this->position)) & 0xFFFF) === $crc)
-                                       {
-                                               $this->position += 2;
-                                       }
-                                       else
-                                       {
-                                               return false;
-                                       }
-                               }
-                               else
-                               {
-                                       return false;
-                               }
-                       }
-
-                       // Decompress the actual data
-                       if (($this->data = gzinflate(substr($this->compressed_data, $this->position, -8))) === false)
-                       {
-                               return false;
-                       }
-                       else
-                       {
-                               $this->position = $this->compressed_size - 8;
-                       }
-
-                       // Check CRC of data
-                       $crc = current(unpack('V', substr($this->compressed_data, $this->position, 4)));
-                       $this->position += 4;
-                       /*if (extension_loaded('hash') && sprintf('%u', current(unpack('V', hash('crc32b', $this->data)))) !== sprintf('%u', $crc))
-                       {
-                               return false;
-                       }*/
-
-                       // Check ISIZE of data
-                       $isize = current(unpack('V', substr($this->compressed_data, $this->position, 4)));
-                       $this->position += 4;
-                       if (sprintf('%u', strlen($this->data) & 0xFFFFFFFF) !== sprintf('%u', $isize))
-                       {
-                               return false;
-                       }
-
-                       // Wow, against all odds, we've actually got a valid gzip string
-                       return true;
-               }
-               else
-               {
-                       return false;
-               }
-       }
-}
-
-/**
- * HTTP Response Parser
- *
- * @package SimplePie
- * @subpackage HTTP
- */
-class SimplePie_HTTP_Parser
-{
-       /**
-        * HTTP Version
-        *
-        * @var float
-        */
-       public $http_version = 0.0;
-
-       /**
-        * Status code
-        *
-        * @var int
-        */
-       public $status_code = 0;
-
-       /**
-        * Reason phrase
-        *
-        * @var string
-        */
-       public $reason = '';
-
-       /**
-        * Key/value pairs of the headers
-        *
-        * @var array
-        */
-       public $headers = array();
-
-       /**
-        * Body of the response
-        *
-        * @var string
-        */
-       public $body = '';
-
-       /**
-        * Current state of the state machine
-        *
-        * @var string
-        */
-       protected $state = 'http_version';
-
-       /**
-        * Input data
-        *
-        * @var string
-        */
-       protected $data = '';
-
-       /**
-        * Input data length (to avoid calling strlen() everytime this is needed)
-        *
-        * @var int
-        */
-       protected $data_length = 0;
-
-       /**
-        * Current position of the pointer
-        *
-        * @var int
-        */
-       protected $position = 0;
-
-       /**
-        * Name of the hedaer currently being parsed
-        *
-        * @var string
-        */
-       protected $name = '';
-
-       /**
-        * Value of the hedaer currently being parsed
-        *
-        * @var string
-        */
-       protected $value = '';
-
-       /**
-        * Create an instance of the class with the input data
-        *
-        * @param string $data Input data
-        */
-       public function __construct($data)
-       {
-               $this->data = $data;
-               $this->data_length = strlen($this->data);
-       }
-
-       /**
-        * Parse the input data
-        *
-        * @return bool true on success, false on failure
-        */
-       public function parse()
-       {
-               while ($this->state && $this->state !== 'emit' && $this->has_data())
-               {
-                       $state = $this->state;
-                       $this->$state();
-               }
-               $this->data = '';
-               if ($this->state === 'emit' || $this->state === 'body')
-               {
-                       return true;
-               }
-               else
-               {
-                       $this->http_version = '';
-                       $this->status_code = '';
-                       $this->reason = '';
-                       $this->headers = array();
-                       $this->body = '';
-                       return false;
-               }
-       }
-
-       /**
-        * Check whether there is data beyond the pointer
-        *
-        * @return bool true if there is further data, false if not
-        */
-       protected function has_data()
-       {
-               return (bool) ($this->position < $this->data_length);
-       }
-
-       /**
-        * See if the next character is LWS
-        *
-        * @return bool true if the next character is LWS, false if not
-        */
-       protected function is_linear_whitespace()
-       {
-               return (bool) ($this->data[$this->position] === "\x09"
-                       || $this->data[$this->position] === "\x20"
-                       || ($this->data[$this->position] === "\x0A"
-                               && isset($this->data[$this->position + 1])
-                               && ($this->data[$this->position + 1] === "\x09" || $this->data[$this->position + 1] === "\x20")));
-       }
-
-       /**
-        * Parse the HTTP version
-        */
-       protected function http_version()
-       {
-               if (strpos($this->data, "\x0A") !== false && strtoupper(substr($this->data, 0, 5)) === 'HTTP/')
-               {
-                       $len = strspn($this->data, '0123456789.', 5);
-                       $this->http_version = substr($this->data, 5, $len);
-                       $this->position += 5 + $len;
-                       if (substr_count($this->http_version, '.') <= 1)
-                       {
-                               $this->http_version = (float) $this->http_version;
-                               $this->position += strspn($this->data, "\x09\x20", $this->position);
-                               $this->state = 'status';
-                       }
-                       else
-                       {
-                               $this->state = false;
-                       }
-               }
-               else
-               {
-                       $this->state = false;
-               }
-       }
-
-       /**
-        * Parse the status code
-        */
-       protected function status()
-       {
-               if ($len = strspn($this->data, '0123456789', $this->position))
-               {
-                       $this->status_code = (int) substr($this->data, $this->position, $len);
-                       $this->position += $len;
-                       $this->state = 'reason';
-               }
-               else
-               {
-                       $this->state = false;
-               }
-       }
-
-       /**
-        * Parse the reason phrase
-        */
-       protected function reason()
-       {
-               $len = strcspn($this->data, "\x0A", $this->position);
-               $this->reason = trim(substr($this->data, $this->position, $len), "\x09\x0D\x20");
-               $this->position += $len + 1;
-               $this->state = 'new_line';
-       }
-
-       /**
-        * Deal with a new line, shifting data around as needed
-        */
-       protected function new_line()
-       {
-               $this->value = trim($this->value, "\x0D\x20");
-               if ($this->name !== '' && $this->value !== '')
-               {
-                       $this->name = strtolower($this->name);
-                       // We should only use the last Content-Type header. c.f. issue #1
-                       if (isset($this->headers[$this->name]) && $this->name !== 'content-type')
-                       {
-                               $this->headers[$this->name] .= ', ' . $this->value;
-                       }
-                       else
-                       {
-                               $this->headers[$this->name] = $this->value;
-                       }
-               }
-               $this->name = '';
-               $this->value = '';
-               if (substr($this->data[$this->position], 0, 2) === "\x0D\x0A")
-               {
-                       $this->position += 2;
-                       $this->state = 'body';
-               }
-               elseif ($this->data[$this->position] === "\x0A")
-               {
-                       $this->position++;
-                       $this->state = 'body';
-               }
-               else
-               {
-                       $this->state = 'name';
-               }
-       }
-
-       /**
-        * Parse a header name
-        */
-       protected function name()
-       {
-               $len = strcspn($this->data, "\x0A:", $this->position);
-               if (isset($this->data[$this->position + $len]))
-               {
-                       if ($this->data[$this->position + $len] === "\x0A")
-                       {
-                               $this->position += $len;
-                               $this->state = 'new_line';
-                       }
-                       else
-                       {
-                               $this->name = substr($this->data, $this->position, $len);
-                               $this->position += $len + 1;
-                               $this->state = 'value';
-                       }
-               }
-               else
-               {
-                       $this->state = false;
-               }
-       }
-
-       /**
-        * Parse LWS, replacing consecutive LWS characters with a single space
-        */
-       protected function linear_whitespace()
-       {
-               do
-               {
-                       if (substr($this->data, $this->position, 2) === "\x0D\x0A")
-                       {
-                               $this->position += 2;
-                       }
-                       elseif ($this->data[$this->position] === "\x0A")
-                       {
-                               $this->position++;
-                       }
-                       $this->position += strspn($this->data, "\x09\x20", $this->position);
-               } while ($this->has_data() && $this->is_linear_whitespace());
-               $this->value .= "\x20";
-       }
-
-       /**
-        * See what state to move to while within non-quoted header values
-        */
-       protected function value()
-       {
-               if ($this->is_linear_whitespace())
-               {
-                       $this->linear_whitespace();
-               }
-               else
-               {
-                       switch ($this->data[$this->position])
-                       {
-                               case '"':
-                                       // Workaround for ETags: we have to include the quotes as
-                                       // part of the tag.
-                                       if (strtolower($this->name) === 'etag')
-                                       {
-                                               $this->value .= '"';
-                                               $this->position++;
-                                               $this->state = 'value_char';
-                                               break;
-                                       }
-                                       $this->position++;
-                                       $this->state = 'quote';
-                                       break;
-
-                               case "\x0A":
-                                       $this->position++;
-                                       $this->state = 'new_line';
-                                       break;
-
-                               default:
-                                       $this->state = 'value_char';
-                                       break;
-                       }
-               }
-       }
-
-       /**
-        * Parse a header value while outside quotes
-        */
-       protected function value_char()
-       {
-               $len = strcspn($this->data, "\x09\x20\x0A\"", $this->position);
-               $this->value .= substr($this->data, $this->position, $len);
-               $this->position += $len;
-               $this->state = 'value';
-       }
-
-       /**
-        * See what state to move to while within quoted header values
-        */
-       protected function quote()
-       {
-               if ($this->is_linear_whitespace())
-               {
-                       $this->linear_whitespace();
-               }
-               else
-               {
-                       switch ($this->data[$this->position])
-                       {
-                               case '"':
-                                       $this->position++;
-                                       $this->state = 'value';
-                                       break;
-
-                               case "\x0A":
-                                       $this->position++;
-                                       $this->state = 'new_line';
-                                       break;
-
-                               case '\\':
-                                       $this->position++;
-                                       $this->state = 'quote_escaped';
-                                       break;
-
-                               default:
-                                       $this->state = 'quote_char';
-                                       break;
-                       }
-               }
-       }
-
-       /**
-        * Parse a header value while within quotes
-        */
-       protected function quote_char()
-       {
-               $len = strcspn($this->data, "\x09\x20\x0A\"\\", $this->position);
-               $this->value .= substr($this->data, $this->position, $len);
-               $this->position += $len;
-               $this->state = 'value';
-       }
-
-       /**
-        * Parse an escaped character within quotes
-        */
-       protected function quote_escaped()
-       {
-               $this->value .= $this->data[$this->position];
-               $this->position++;
-               $this->state = 'quote';
-       }
-
-       /**
-        * Parse the body
-        */
-       protected function body()
-       {
-               $this->body = substr($this->data, $this->position);
-               if (!empty($this->headers['transfer-encoding']))
-               {
-                       unset($this->headers['transfer-encoding']);
-                       $this->state = 'chunked';
-               }
-               else
-               {
-                       $this->state = 'emit';
-               }
-       }
-
-       /**
-        * Parsed a "Transfer-Encoding: chunked" body
-        */
-       protected function chunked()
-       {
-               if (!preg_match('/^([0-9a-f]+)[^\r\n]*\r\n/i', trim($this->body)))
-               {
-                       $this->state = 'emit';
-                       return;
-               }
-
-               $decoded = '';
-               $encoded = $this->body;
-
-               while (true)
-               {
-                       $is_chunked = (bool) preg_match( '/^([0-9a-f]+)[^\r\n]*\r\n/i', $encoded, $matches );
-                       if (!$is_chunked)
-                       {
-                               // Looks like it's not chunked after all
-                               $this->state = 'emit';
-                               return;
-                       }
-
-                       $length = hexdec(trim($matches[1]));
-                       if ($length === 0)
-                       {
-                               // Ignore trailer headers
-                               $this->state = 'emit';
-                               $this->body = $decoded;
-                               return;
-                       }
-
-                       $chunk_length = strlen($matches[0]);
-                       $decoded .= $part = substr($encoded, $chunk_length, $length);
-                       $encoded = substr($encoded, $chunk_length + $length + 2);
-
-                       if (trim($encoded) === '0' || empty($encoded))
-                       {
-                               $this->state = 'emit';
-                               $this->body = $decoded;
-                               return;
-                       }
-               }
-       }
-}
-
-/**
- * IRI parser/serialiser/normaliser
- *
- * @package SimplePie
- * @subpackage HTTP
- * @author Geoffrey Sneddon
- * @author Steve Minutillo
- * @author Ryan McCue
- * @copyright 2007-2012 Geoffrey Sneddon, Steve Minutillo, Ryan McCue
- * @license http://www.opensource.org/licenses/bsd-license.php
- */
-class SimplePie_IRI
-{
-       /**
-        * Scheme
-        *
-        * @var string
-        */
-       protected $scheme = null;
-
-       /**
-        * User Information
-        *
-        * @var string
-        */
-       protected $iuserinfo = null;
-
-       /**
-        * ihost
-        *
-        * @var string
-        */
-       protected $ihost = null;
-
-       /**
-        * Port
-        *
-        * @var string
-        */
-       protected $port = null;
-
-       /**
-        * ipath
-        *
-        * @var string
-        */
-       protected $ipath = '';
-
-       /**
-        * iquery
-        *
-        * @var string
-        */
-       protected $iquery = null;
-
-       /**
-        * ifragment
-        *
-        * @var string
-        */
-       protected $ifragment = null;
-
-       /**
-        * Normalization database
-        *
-        * Each key is the scheme, each value is an array with each key as the IRI
-        * part and value as the default value for that part.
-        */
-       protected $normalization = array(
-               'acap' => array(
-                       'port' => 674
-               ),
-               'dict' => array(
-                       'port' => 2628
-               ),
-               'file' => array(
-                       'ihost' => 'localhost'
-               ),
-               'http' => array(
-                       'port' => 80,
-                       'ipath' => '/'
-               ),
-               'https' => array(
-                       'port' => 443,
-                       'ipath' => '/'
-               ),
-       );
-
-       /**
-        * Return the entire IRI when you try and read the object as a string
-        *
-        * @return string
-        */
-       public function __toString()
-       {
-               return $this->get_iri();
-       }
-
-       /**
-        * Overload __set() to provide access via properties
-        *
-        * @param string $name Property name
-        * @param mixed $value Property value
-        */
-       public function __set($name, $value)
-       {
-               if (method_exists($this, 'set_' . $name))
-               {
-                       call_user_func(array($this, 'set_' . $name), $value);
-               }
-               elseif (
-                          $name === 'iauthority'
-                       || $name === 'iuserinfo'
-                       || $name === 'ihost'
-                       || $name === 'ipath'
-                       || $name === 'iquery'
-                       || $name === 'ifragment'
-               )
-               {
-                       call_user_func(array($this, 'set_' . substr($name, 1)), $value);
-               }
-       }
-
-       /**
-        * Overload __get() to provide access via properties
-        *
-        * @param string $name Property name
-        * @return mixed
-        */
-       public function __get($name)
-       {
-               // isset() returns false for null, we don't want to do that
-               // Also why we use array_key_exists below instead of isset()
-               $props = get_object_vars($this);
-
-               if (
-                       $name === 'iri' ||
-                       $name === 'uri' ||
-                       $name === 'iauthority' ||
-                       $name === 'authority'
-               )
-               {
-                       $return = $this->{"get_$name"}();
-               }
-               elseif (array_key_exists($name, $props))
-               {
-                       $return = $this->$name;
-               }
-               // host -> ihost
-               elseif (($prop = 'i' . $name) && array_key_exists($prop, $props))
-               {
-                       $name = $prop;
-                       $return = $this->$prop;
-               }
-               // ischeme -> scheme
-               elseif (($prop = substr($name, 1)) && array_key_exists($prop, $props))
-               {
-                       $name = $prop;
-                       $return = $this->$prop;
-               }
-               else
-               {
-                       trigger_error('Undefined property: ' . get_class($this) . '::' . $name, E_USER_NOTICE);
-                       $return = null;
-               }
-
-               if ($return === null && isset($this->normalization[$this->scheme][$name]))
-               {
-                       return $this->normalization[$this->scheme][$name];
-               }
-               else
-               {
-                       return $return;
-               }
-       }
-
-       /**
-        * Overload __isset() to provide access via properties
-        *
-        * @param string $name Property name
-        * @return bool
-        */
-       public function __isset($name)
-       {
-               if (method_exists($this, 'get_' . $name) || isset($this->$name))
-               {
-                       return true;
-               }
-               else
-               {
-                       return false;
-               }
-       }
-
-       /**
-        * Overload __unset() to provide access via properties
-        *
-        * @param string $name Property name
-        */
-       public function __unset($name)
-       {
-               if (method_exists($this, 'set_' . $name))
-               {
-                       call_user_func(array($this, 'set_' . $name), '');
-               }
-       }
-
-       /**
-        * Create a new IRI object, from a specified string
-        *
-        * @param string $iri
-        */
-       public function __construct($iri = null)
-       {
-               $this->set_iri($iri);
-       }
-
-       /**
-        * Create a new IRI object by resolving a relative IRI
-        *
-        * Returns false if $base is not absolute, otherwise an IRI.
-        *
-        * @param IRI|string $base (Absolute) Base IRI
-        * @param IRI|string $relative Relative IRI
-        * @return IRI|false
-        */
-       public static function absolutize($base, $relative)
-       {
-               if (!($relative instanceof SimplePie_IRI))
-               {
-                       $relative = new SimplePie_IRI($relative);
-               }
-               if (!$relative->is_valid())
-               {
-                       return false;
-               }
-               elseif ($relative->scheme !== null)
-               {
-                       return clone $relative;
-               }
-               else
-               {
-                       if (!($base instanceof SimplePie_IRI))
-                       {
-                               $base = new SimplePie_IRI($base);
-                       }
-                       if ($base->scheme !== null && $base->is_valid())
-                       {
-                               if ($relative->get_iri() !== '')
-                               {
-                                       if ($relative->iuserinfo !== null || $relative->ihost !== null || $relative->port !== null)
-                                       {
-                                               $target = clone $relative;
-                                               $target->scheme = $base->scheme;
-                                       }
-                                       else
-                                       {
-                                               $target = new SimplePie_IRI;
-                                               $target->scheme = $base->scheme;
-                                               $target->iuserinfo = $base->iuserinfo;
-                                               $target->ihost = $base->ihost;
-                                               $target->port = $base->port;
-                                               if ($relative->ipath !== '')
-                                               {
-                                                       if ($relative->ipath[0] === '/')
-                                                       {
-                                                               $target->ipath = $relative->ipath;
-                                                       }
-                                                       elseif (($base->iuserinfo !== null || $base->ihost !== null || $base->port !== null) && $base->ipath === '')
-                                                       {
-                                                               $target->ipath = '/' . $relative->ipath;
-                                                       }
-                                                       elseif (($last_segment = strrpos($base->ipath, '/')) !== false)
-                                                       {
-                                                               $target->ipath = substr($base->ipath, 0, $last_segment + 1) . $relative->ipath;
-                                                       }
-                                                       else
-                                                       {
-                                                               $target->ipath = $relative->ipath;
-                                                       }
-                                                       $target->ipath = $target->remove_dot_segments($target->ipath);
-                                                       $target->iquery = $relative->iquery;
-                                               }
-                                               else
-                                               {
-                                                       $target->ipath = $base->ipath;
-                                                       if ($relative->iquery !== null)
-                                                       {
-                                                               $target->iquery = $relative->iquery;
-                                                       }
-                                                       elseif ($base->iquery !== null)
-                                                       {
-                                                               $target->iquery = $base->iquery;
-                                                       }
-                                               }
-                                               $target->ifragment = $relative->ifragment;
-                                       }
-                               }
-                               else
-                               {
-                                       $target = clone $base;
-                                       $target->ifragment = null;
-                               }
-                               $target->scheme_normalization();
-                               return $target;
-                       }
-                       else
-                       {
-                               return false;
-                       }
-               }
-       }
-
-       /**
-        * Parse an IRI into scheme/authority/path/query/fragment segments
-        *
-        * @param string $iri
-        * @return array
-        */
-       protected function parse_iri($iri)
-       {
-               $iri = trim($iri, "\x20\x09\x0A\x0C\x0D");
-               if (preg_match('/^((?P<scheme>[^:\/?#]+):)?(\/\/(?P<authority>[^\/?#]*))?(?P<path>[^?#]*)(\?(?P<query>[^#]*))?(#(?P<fragment>.*))?$/', $iri, $match))
-               {
-                       if ($match[1] === '')
-                       {
-                               $match['scheme'] = null;
-                       }
-                       if (!isset($match[3]) || $match[3] === '')
-                       {
-                               $match['authority'] = null;
-                       }
-                       if (!isset($match[5]))
-                       {
-                               $match['path'] = '';
-                       }
-                       if (!isset($match[6]) || $match[6] === '')
-                       {
-                               $match['query'] = null;
-                       }
-                       if (!isset($match[8]) || $match[8] === '')
-                       {
-                               $match['fragment'] = null;
-                       }
-                       return $match;
-               }
-               else
-               {
-                       // This can occur when a paragraph is accidentally parsed as a URI
-                       return false;
-               }
-       }
-
-       /**
-        * Remove dot segments from a path
-        *
-        * @param string $input
-        * @return string
-        */
-       protected function remove_dot_segments($input)
-       {
-               $output = '';
-               while (strpos($input, './') !== false || strpos($input, '/.') !== false || $input === '.' || $input === '..')
-               {
-                       // A: If the input buffer begins with a prefix of "../" or "./", then remove that prefix from the input buffer; otherwise,
-                       if (strpos($input, '../') === 0)
-                       {
-                               $input = substr($input, 3);
-                       }
-                       elseif (strpos($input, './') === 0)
-                       {
-                               $input = substr($input, 2);
-                       }
-                       // B: if the input buffer begins with a prefix of "/./" or "/.", where "." is a complete path segment, then replace that prefix with "/" in the input buffer; otherwise,
-                       elseif (strpos($input, '/./') === 0)
-                       {
-                               $input = substr($input, 2);
-                       }
-                       elseif ($input === '/.')
-                       {
-                               $input = '/';
-                       }
-                       // C: if the input buffer begins with a prefix of "/../" or "/..", where ".." is a complete path segment, then replace that prefix with "/" in the input buffer and remove the last segment and its preceding "/" (if any) from the output buffer; otherwise,
-                       elseif (strpos($input, '/../') === 0)
-                       {
-                               $input = substr($input, 3);
-                               $output = substr_replace($output, '', strrpos($output, '/'));
-                       }
-                       elseif ($input === '/..')
-                       {
-                               $input = '/';
-                               $output = substr_replace($output, '', strrpos($output, '/'));
-                       }
-                       // D: if the input buffer consists only of "." or "..", then remove that from the input buffer; otherwise,
-                       elseif ($input === '.' || $input === '..')
-                       {
-                               $input = '';
-                       }
-                       // E: move the first path segment in the input buffer to the end of the output buffer, including the initial "/" character (if any) and any subsequent characters up to, but not including, the next "/" character or the end of the input buffer
-                       elseif (($pos = strpos($input, '/', 1)) !== false)
-                       {
-                               $output .= substr($input, 0, $pos);
-                               $input = substr_replace($input, '', 0, $pos);
-                       }
-                       else
-                       {
-                               $output .= $input;
-                               $input = '';
-                       }
-               }
-               return $output . $input;
-       }
-
-       /**
-        * Replace invalid character with percent encoding
-        *
-        * @param string $string Input string
-        * @param string $extra_chars Valid characters not in iunreserved or
-        *                            iprivate (this is ASCII-only)
-        * @param bool $iprivate Allow iprivate
-        * @return string
-        */
-       protected function replace_invalid_with_pct_encoding($string, $extra_chars, $iprivate = false)
-       {
-               // Normalize as many pct-encoded sections as possible
-               $string = preg_replace_callback('/(?:%[A-Fa-f0-9]{2})+/', array($this, 'remove_iunreserved_percent_encoded'), $string);
-
-               // Replace invalid percent characters
-               $string = preg_replace('/%(?![A-Fa-f0-9]{2})/', '%25', $string);
-
-               // Add unreserved and % to $extra_chars (the latter is safe because all
-               // pct-encoded sections are now valid).
-               $extra_chars .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~%';
-
-               // Now replace any bytes that aren't allowed with their pct-encoded versions
-               $position = 0;
-               $strlen = strlen($string);
-               while (($position += strspn($string, $extra_chars, $position)) < $strlen)
-               {
-                       $value = ord($string[$position]);
-
-                       // Start position
-                       $start = $position;
-
-                       // By default we are valid
-                       $valid = true;
-
-                       // No one byte sequences are valid due to the while.
-                       // Two byte sequence:
-                       if (($value & 0xE0) === 0xC0)
-                       {
-                               $character = ($value & 0x1F) << 6;
-                               $length = 2;
-                               $remaining = 1;
-                       }
-                       // Three byte sequence:
-                       elseif (($value & 0xF0) === 0xE0)
-                       {
-                               $character = ($value & 0x0F) << 12;
-                               $length = 3;
-                               $remaining = 2;
-                       }
-                       // Four byte sequence:
-                       elseif (($value & 0xF8) === 0xF0)
-                       {
-                               $character = ($value & 0x07) << 18;
-                               $length = 4;
-                               $remaining = 3;
-                       }
-                       // Invalid byte:
-                       else
-                       {
-                               $valid = false;
-                               $length = 1;
-                               $remaining = 0;
-                       }
-
-                       if ($remaining)
-                       {
-                               if ($position + $length <= $strlen)
-                               {
-                                       for ($position++; $remaining; $position++)
-                                       {
-                                               $value = ord($string[$position]);
-
-                                               // Check that the byte is valid, then add it to the character:
-                                               if (($value & 0xC0) === 0x80)
-                                               {
-                                                       $character |= ($value & 0x3F) << (--$remaining * 6);
-                                               }
-                                               // If it is invalid, count the sequence as invalid and reprocess the current byte:
-                                               else
-                                               {
-                                                       $valid = false;
-                                                       $position--;
-                                                       break;
-                                               }
-                                       }
-                               }
-                               else
-                               {
-                                       $position = $strlen - 1;
-                                       $valid = false;
-                               }
-                       }
-
-                       // Percent encode anything invalid or not in ucschar
-                       if (
-                               // Invalid sequences
-                               !$valid
-                               // Non-shortest form sequences are invalid
-                               || $length > 1 && $character <= 0x7F
-                               || $length > 2 && $character <= 0x7FF
-                               || $length > 3 && $character <= 0xFFFF
-                               // Outside of range of ucschar codepoints
-                               // Noncharacters
-                               || ($character & 0xFFFE) === 0xFFFE
-                               || $character >= 0xFDD0 && $character <= 0xFDEF
-                               || (
-                                       // Everything else not in ucschar
-                                          $character > 0xD7FF && $character < 0xF900
-                                       || $character < 0xA0
-                                       || $character > 0xEFFFD
-                               )
-                               && (
-                                       // Everything not in iprivate, if it applies
-                                          !$iprivate
-                                       || $character < 0xE000
-                                       || $character > 0x10FFFD
-                               )
-                       )
-                       {
-                               // If we were a character, pretend we weren't, but rather an error.
-                               if ($valid)
-                                       $position--;
-
-                               for ($j = $start; $j <= $position; $j++)
-                               {
-                                       $string = substr_replace($string, sprintf('%%%02X', ord($string[$j])), $j, 1);
-                                       $j += 2;
-                                       $position += 2;
-                                       $strlen += 2;
-                               }
-                       }
-               }
-
-               return $string;
-       }
-
-       /**
-        * Callback function for preg_replace_callback.
-        *
-        * Removes sequences of percent encoded bytes that represent UTF-8
-        * encoded characters in iunreserved
-        *
-        * @param array $match PCRE match
-        * @return string Replacement
-        */
-       protected function remove_iunreserved_percent_encoded($match)
-       {
-               // As we just have valid percent encoded sequences we can just explode
-               // and ignore the first member of the returned array (an empty string).
-               $bytes = explode('%', $match[0]);
-
-               // Initialize the new string (this is what will be returned) and that
-               // there are no bytes remaining in the current sequence (unsurprising
-               // at the first byte!).
-               $string = '';
-               $remaining = 0;
-
-               // Loop over each and every byte, and set $value to its value
-               for ($i = 1, $len = count($bytes); $i < $len; $i++)
-               {
-                       $value = hexdec($bytes[$i]);
-
-                       // If we're the first byte of sequence:
-                       if (!$remaining)
-                       {
-                               // Start position
-                               $start = $i;
-
-                               // By default we are valid
-                               $valid = true;
-
-                               // One byte sequence:
-                               if ($value <= 0x7F)
-                               {
-                                       $character = $value;
-                                       $length = 1;
-                               }
-                               // Two byte sequence:
-                               elseif (($value & 0xE0) === 0xC0)
-                               {
-                                       $character = ($value & 0x1F) << 6;
-                                       $length = 2;
-                                       $remaining = 1;
-                               }
-                               // Three byte sequence:
-                               elseif (($value & 0xF0) === 0xE0)
-                               {
-                                       $character = ($value & 0x0F) << 12;
-                                       $length = 3;
-                                       $remaining = 2;
-                               }
-                               // Four byte sequence:
-                               elseif (($value & 0xF8) === 0xF0)
-                               {
-                                       $character = ($value & 0x07) << 18;
-                                       $length = 4;
-                                       $remaining = 3;
-                               }
-                               // Invalid byte:
-                               else
-                               {
-                                       $valid = false;
-                                       $remaining = 0;
-                               }
-                       }
-                       // Continuation byte:
-                       else
-                       {
-                               // Check that the byte is valid, then add it to the character:
-                               if (($value & 0xC0) === 0x80)
-                               {
-                                       $remaining--;
-                                       $character |= ($value & 0x3F) << ($remaining * 6);
-                               }
-                               // If it is invalid, count the sequence as invalid and reprocess the current byte as the start of a sequence:
-                               else
-                               {
-                                       $valid = false;
-                                       $remaining = 0;
-                                       $i--;
-                               }
-                       }
-
-                       // If we've reached the end of the current byte sequence, append it to Unicode::$data
-                       if (!$remaining)
-                       {
-                               // Percent encode anything invalid or not in iunreserved
-                               if (
-                                       // Invalid sequences
-                                       !$valid
-                                       // Non-shortest form sequences are invalid
-                                       || $length > 1 && $character <= 0x7F
-                                       || $length > 2 && $character <= 0x7FF
-                                       || $length > 3 && $character <= 0xFFFF
-                                       // Outside of range of iunreserved codepoints
-                                       || $character < 0x2D
-                                       || $character > 0xEFFFD
-                                       // Noncharacters
-                                       || ($character & 0xFFFE) === 0xFFFE
-                                       || $character >= 0xFDD0 && $character <= 0xFDEF
-                                       // Everything else not in iunreserved (this is all BMP)
-                                       || $character === 0x2F
-                                       || $character > 0x39 && $character < 0x41
-                                       || $character > 0x5A && $character < 0x61
-                                       || $character > 0x7A && $character < 0x7E
-                                       || $character > 0x7E && $character < 0xA0
-                                       || $character > 0xD7FF && $character < 0xF900
-                               )
-                               {
-                                       for ($j = $start; $j <= $i; $j++)
-                                       {
-                                               $string .= '%' . strtoupper($bytes[$j]);
-                                       }
-                               }
-                               else
-                               {
-                                       for ($j = $start; $j <= $i; $j++)
-                                       {
-                                               $string .= chr(hexdec($bytes[$j]));
-                                       }
-                               }
-                       }
-               }
-
-               // If we have any bytes left over they are invalid (i.e., we are
-               // mid-way through a multi-byte sequence)
-               if ($remaining)
-               {
-                       for ($j = $start; $j < $len; $j++)
-                       {
-                               $string .= '%' . strtoupper($bytes[$j]);
-                       }
-               }
-
-               return $string;
-       }
-
-       protected function scheme_normalization()
-       {
-               if (isset($this->normalization[$this->scheme]['iuserinfo']) && $this->iuserinfo === $this->normalization[$this->scheme]['iuserinfo'])
-               {
-                       $this->iuserinfo = null;
-               }
-               if (isset($this->normalization[$this->scheme]['ihost']) && $this->ihost === $this->normalization[$this->scheme]['ihost'])
-               {
-                       $this->ihost = null;
-               }
-               if (isset($this->normalization[$this->scheme]['port']) && $this->port === $this->normalization[$this->scheme]['port'])
-               {
-                       $this->port = null;
-               }
-               if (isset($this->normalization[$this->scheme]['ipath']) && $this->ipath === $this->normalization[$this->scheme]['ipath'])
-               {
-                       $this->ipath = '';
-               }
-               if (isset($this->normalization[$this->scheme]['iquery']) && $this->iquery === $this->normalization[$this->scheme]['iquery'])
-               {
-                       $this->iquery = null;
-               }
-               if (isset($this->normalization[$this->scheme]['ifragment']) && $this->ifragment === $this->normalization[$this->scheme]['ifragment'])
-               {
-                       $this->ifragment = null;
-               }
-       }
-
-       /**
-        * Check if the object represents a valid IRI. This needs to be done on each
-        * call as some things change depending on another part of the IRI.
-        *
-        * @return bool
-        */
-       public function is_valid()
-       {
-               $isauthority = $this->iuserinfo !== null || $this->ihost !== null || $this->port !== null;
-               if ($this->ipath !== '' &&
-                       (
-                               $isauthority && (
-                                       $this->ipath[0] !== '/' ||
-                                       substr($this->ipath, 0, 2) === '//'
-                               ) ||
-                               (
-                                       $this->scheme === null &&
-                                       !$isauthority &&
-                                       strpos($this->ipath, ':') !== false &&
-                                       (strpos($this->ipath, '/') === false ? true : strpos($this->ipath, ':') < strpos($this->ipath, '/'))
-                               )
-                       )
-               )
-               {
-                       return false;
-               }
-
-               return true;
-       }
-
-       /**
-        * Set the entire IRI. Returns true on success, false on failure (if there
-        * are any invalid characters).
-        *
-        * @param string $iri
-        * @return bool
-        */
-       public function set_iri($iri)
-       {
-               static $cache;
-               if (!$cache)
-               {
-                       $cache = array();
-               }
-
-               if ($iri === null)
-               {
-                       return true;
-               }
-               elseif (isset($cache[$iri]))
-               {
-                       list($this->scheme,
-                                $this->iuserinfo,
-                                $this->ihost,
-                                $this->port,
-                                $this->ipath,
-                                $this->iquery,
-                                $this->ifragment,
-                                $return) = $cache[$iri];
-                       return $return;
-               }
-               else
-               {
-                       $parsed = $this->parse_iri((string) $iri);
-                       if (!$parsed)
-                       {
-                               return false;
-                       }
-
-                       $return = $this->set_scheme($parsed['scheme'])
-                               && $this->set_authority($parsed['authority'])
-                               && $this->set_path($parsed['path'])
-                               && $this->set_query($parsed['query'])
-                               && $this->set_fragment($parsed['fragment']);
-
-                       $cache[$iri] = array($this->scheme,
-                                                                $this->iuserinfo,
-                                                                $this->ihost,
-                                                                $this->port,
-                                                                $this->ipath,
-                                                                $this->iquery,
-                                                                $this->ifragment,
-                                                                $return);
-                       return $return;
-               }
-       }
-
-       /**
-        * Set the scheme. Returns true on success, false on failure (if there are
-        * any invalid characters).
-        *
-        * @param string $scheme
-        * @return bool
-        */
-       public function set_scheme($scheme)
-       {
-               if ($scheme === null)
-               {
-                       $this->scheme = null;
-               }
-               elseif (!preg_match('/^[A-Za-z][0-9A-Za-z+\-.]*$/', $scheme))
-               {
-                       $this->scheme = null;
-                       return false;
-               }
-               else
-               {
-                       $this->scheme = strtolower($scheme);
-               }
-               return true;
-       }
-
-       /**
-        * Set the authority. Returns true on success, false on failure (if there are
-        * any invalid characters).
-        *
-        * @param string $authority
-        * @return bool
-        */
-       public function set_authority($authority)
-       {
-               static $cache;
-               if (!$cache)
-                       $cache = array();
-
-               if ($authority === null)
-               {
-                       $this->iuserinfo = null;
-                       $this->ihost = null;
-                       $this->port = null;
-                       return true;
-               }
-               elseif (isset($cache[$authority]))
-               {
-                       list($this->iuserinfo,
-                                $this->ihost,
-                                $this->port,
-                                $return) = $cache[$authority];
-
-                       return $return;
-               }
-               else
-               {
-                       $remaining = $authority;
-                       if (($iuserinfo_end = strrpos($remaining, '@')) !== false)
-                       {
-                               $iuserinfo = substr($remaining, 0, $iuserinfo_end);
-                               $remaining = substr($remaining, $iuserinfo_end + 1);
-                       }
-                       else
-                       {
-                               $iuserinfo = null;
-                       }
-                       if (($port_start = strpos($remaining, ':', strpos($remaining, ']'))) !== false)
-                       {
-                               if (($port = substr($remaining, $port_start + 1)) === false)
-                               {
-                                       $port = null;
-                               }
-                               $remaining = substr($remaining, 0, $port_start);
-                       }
-                       else
-                       {
-                               $port = null;
-                       }
-
-                       $return = $this->set_userinfo($iuserinfo) &&
-                                         $this->set_host($remaining) &&
-                                         $this->set_port($port);
-
-                       $cache[$authority] = array($this->iuserinfo,
-                                                                          $this->ihost,
-                                                                          $this->port,
-                                                                          $return);
-
-                       return $return;
-               }
-       }
-
-       /**
-        * Set the iuserinfo.
-        *
-        * @param string $iuserinfo
-        * @return bool
-        */
-       public function set_userinfo($iuserinfo)
-       {
-               if ($iuserinfo === null)
-               {
-                       $this->iuserinfo = null;
-               }
-               else
-               {
-                       $this->iuserinfo = $this->replace_invalid_with_pct_encoding($iuserinfo, '!$&\'()*+,;=:');
-                       $this->scheme_normalization();
-               }
-
-               return true;
-       }
-
-       /**
-        * Set the ihost. Returns true on success, false on failure (if there are
-        * any invalid characters).
-        *
-        * @param string $ihost
-        * @return bool
-        */
-       public function set_host($ihost)
-       {
-               if ($ihost === null)
-               {
-                       $this->ihost = null;
-                       return true;
-               }
-               elseif (substr($ihost, 0, 1) === '[' && substr($ihost, -1) === ']')
-               {
-                       if (SimplePie_Net_IPv6::check_ipv6(substr($ihost, 1, -1)))
-                       {
-                               $this->ihost = '[' . SimplePie_Net_IPv6::compress(substr($ihost, 1, -1)) . ']';
-                       }
-                       else
-                       {
-                               $this->ihost = null;
-                               return false;
-                       }
-               }
-               else
-               {
-                       $ihost = $this->replace_invalid_with_pct_encoding($ihost, '!$&\'()*+,;=');
-
-                       // Lowercase, but ignore pct-encoded sections (as they should
-                       // remain uppercase). This must be done after the previous step
-                       // as that can add unescaped characters.
-                       $position = 0;
-                       $strlen = strlen($ihost);
-                       while (($position += strcspn($ihost, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ%', $position)) < $strlen)
-                       {
-                               if ($ihost[$position] === '%')
-                               {
-                                       $position += 3;
-                               }
-                               else
-                               {
-                                       $ihost[$position] = strtolower($ihost[$position]);
-                                       $position++;
-                               }
-                       }
-
-                       $this->ihost = $ihost;
-               }
-
-               $this->scheme_normalization();
-
-               return true;
-       }
-
-       /**
-        * Set the port. Returns true on success, false on failure (if there are
-        * any invalid characters).
-        *
-        * @param string $port
-        * @return bool
-        */
-       public function set_port($port)
-       {
-               if ($port === null)
-               {
-                       $this->port = null;
-                       return true;
-               }
-               elseif (strspn($port, '0123456789') === strlen($port))
-               {
-                       $this->port = (int) $port;
-                       $this->scheme_normalization();
-                       return true;
-               }
-               else
-               {
-                       $this->port = null;
-                       return false;
-               }
-       }
-
-       /**
-        * Set the ipath.
-        *
-        * @param string $ipath
-        * @return bool
-        */
-       public function set_path($ipath)
-       {
-               static $cache;
-               if (!$cache)
-               {
-                       $cache = array();
-               }
-
-               $ipath = (string) $ipath;
-
-               if (isset($cache[$ipath]))
-               {
-                       $this->ipath = $cache[$ipath][(int) ($this->scheme !== null)];
-               }
-               else
-               {
-                       $valid = $this->replace_invalid_with_pct_encoding($ipath, '!$&\'()*+,;=@:/');
-                       $removed = $this->remove_dot_segments($valid);
-
-                       $cache[$ipath] = array($valid, $removed);
-                       $this->ipath =  ($this->scheme !== null) ? $removed : $valid;
-               }
-
-               $this->scheme_normalization();
-               return true;
-       }
-
-       /**
-        * Set the iquery.
-        *
-        * @param string $iquery
-        * @return bool
-        */
-       public function set_query($iquery)
-       {
-               if ($iquery === null)
-               {
-                       $this->iquery = null;
-               }
-               else
-               {
-                       $this->iquery = $this->replace_invalid_with_pct_encoding($iquery, '!$&\'()*+,;=:@/?', true);
-                       $this->scheme_normalization();
-               }
-               return true;
-       }
-
-       /**
-        * Set the ifragment.
-        *
-        * @param string $ifragment
-        * @return bool
-        */
-       public function set_fragment($ifragment)
-       {
-               if ($ifragment === null)
-               {
-                       $this->ifragment = null;
-               }
-               else
-               {
-                       $this->ifragment = $this->replace_invalid_with_pct_encoding($ifragment, '!$&\'()*+,;=:@/?');
-                       $this->scheme_normalization();
-               }
-               return true;
-       }
-
-       /**
-        * Convert an IRI to a URI (or parts thereof)
-        *
-        * @return string
-        */
-       public function to_uri($string)
-       {
-               static $non_ascii;
-               if (!$non_ascii)
-               {
-                       $non_ascii = implode('', range("\x80", "\xFF"));
-               }
-
-               $position = 0;
-               $strlen = strlen($string);
-               while (($position += strcspn($string, $non_ascii, $position)) < $strlen)
-               {
-                       $string = substr_replace($string, sprintf('%%%02X', ord($string[$position])), $position, 1);
-                       $position += 3;
-                       $strlen += 2;
-               }
-
-               return $string;
-       }
-
-       /**
-        * Get the complete IRI
-        *
-        * @return string
-        */
-       public function get_iri()
-       {
-               if (!$this->is_valid())
-               {
-                       return false;
-               }
-
-               $iri = '';
-               if ($this->scheme !== null)
-               {
-                       $iri .= $this->scheme . ':';
-               }
-               if (($iauthority = $this->get_iauthority()) !== null)
-               {
-                       $iri .= '//' . $iauthority;
-               }
-               if ($this->ipath !== '')
-               {
-                       $iri .= $this->ipath;
-               }
-               elseif (!empty($this->normalization[$this->scheme]['ipath']) && $iauthority !== null && $iauthority !== '')
-               {
-                       $iri .= $this->normalization[$this->scheme]['ipath'];
-               }
-               if ($this->iquery !== null)
-               {
-                       $iri .= '?' . $this->iquery;
-               }
-               if ($this->ifragment !== null)
-               {
-                       $iri .= '#' . $this->ifragment;
-               }
-
-               return $iri;
-       }
-
-       /**
-        * Get the complete URI
-        *
-        * @return string
-        */
-       public function get_uri()
-       {
-               return $this->to_uri($this->get_iri());
-       }
-
-       /**
-        * Get the complete iauthority
-        *
-        * @return string
-        */
-       protected function get_iauthority()
-       {
-               if ($this->iuserinfo !== null || $this->ihost !== null || $this->port !== null)
-               {
-                       $iauthority = '';
-                       if ($this->iuserinfo !== null)
-                       {
-                               $iauthority .= $this->iuserinfo . '@';
-                       }
-                       if ($this->ihost !== null)
-                       {
-                               $iauthority .= $this->ihost;
-                       }
-                       if ($this->port !== null)
-                       {
-                               $iauthority .= ':' . $this->port;
-                       }
-                       return $iauthority;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the complete authority
-        *
-        * @return string
-        */
-       protected function get_authority()
-       {
-               $iauthority = $this->get_iauthority();
-               if (is_string($iauthority))
-                       return $this->to_uri($iauthority);
-               else
-                       return $iauthority;
-       }
-}
-
-/**
- * Manages all item-related data
- *
- * Used by {@see SimplePie::get_item()} and {@see SimplePie::get_items()}
- *
- * This class can be overloaded with {@see SimplePie::set_item_class()}
- *
- * @package SimplePie
- * @subpackage API
- */
-class SimplePie_Item
-{
-       /**
-        * Parent feed
-        *
-        * @access private
-        * @var SimplePie
-        */
-       var $feed;
-
-       /**
-        * Raw data
-        *
-        * @access private
-        * @var array
-        */
-       var $data = array();
-
-       /**
-        * Registry object
-        *
-        * @see set_registry
-        * @var SimplePie_Registry
-        */
-       protected $registry;
-
-       /**
-        * Create a new item object
-        *
-        * This is usually used by {@see SimplePie::get_items} and
-        * {@see SimplePie::get_item}. Avoid creating this manually.
-        *
-        * @param SimplePie $feed Parent feed
-        * @param array $data Raw data
-        */
-       public function __construct($feed, $data)
-       {
-               $this->feed = $feed;
-               $this->data = $data;
-       }
-
-       /**
-        * Set the registry handler
-        *
-        * This is usually used by {@see SimplePie_Registry::create}
-        *
-        * @since 1.3
-        * @param SimplePie_Registry $registry
-        */
-       public function set_registry(SimplePie_Registry $registry)
-       {
-               $this->registry = $registry;
-       }
-
-       /**
-        * Get a string representation of the item
-        *
-        * @return string
-        */
-       public function __toString()
-       {
-               return md5(serialize($this->data));
-       }
-
-       /**
-        * Remove items that link back to this before destroying this object
-        */
-       public function __destruct()
-       {
-               if ((version_compare(PHP_VERSION, '5.3', '<') || !gc_enabled()) && !ini_get('zend.ze1_compatibility_mode'))
-               {
-                       unset($this->feed);
-               }
-       }
-
-       /**
-        * Get data for an item-level element
-        *
-        * This method allows you to get access to ANY element/attribute that is a
-        * sub-element of the item/entry tag.
-        *
-        * See {@see SimplePie::get_feed_tags()} for a description of the return value
-        *
-        * @since 1.0
-        * @see http://simplepie.org/wiki/faq/supported_xml_namespaces
-        * @param string $namespace The URL of the XML namespace of the elements you're trying to access
-        * @param string $tag Tag name
-        * @return array
-        */
-       public function get_item_tags($namespace, $tag)
-       {
-               if (isset($this->data['child'][$namespace][$tag]))
-               {
-                       return $this->data['child'][$namespace][$tag];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the base URL value from the parent feed
-        *
-        * Uses `<xml:base>`
-        *
-        * @param array $element
-        * @return string
-        */
-       public function get_base($element = array())
-       {
-               return $this->feed->get_base($element);
-       }
-
-       /**
-        * Sanitize feed data
-        *
-        * @access private
-        * @see SimplePie::sanitize()
-        * @param string $data Data to sanitize
-        * @param int $type One of the SIMPLEPIE_CONSTRUCT_* constants
-        * @param string $base Base URL to resolve URLs against
-        * @return string Sanitized data
-        */
-       public function sanitize($data, $type, $base = '')
-       {
-               return $this->feed->sanitize($data, $type, $base);
-       }
-
-       /**
-        * Get the parent feed
-        *
-        * Note: this may not work as you think for multifeeds!
-        *
-        * @link http://simplepie.org/faq/typical_multifeed_gotchas#missing_data_from_feed
-        * @since 1.0
-        * @return SimplePie
-        */
-       public function get_feed()
-       {
-               return $this->feed;
-       }
-
-       /**
-        * Get the unique identifier for the item
-        *
-        * This is usually used when writing code to check for new items in a feed.
-        *
-        * Uses `<atom:id>`, `<guid>`, `<dc:identifier>` or the `about` attribute
-        * for RDF. If none of these are supplied (or `$hash` is true), creates an
-        * MD5 hash based on the permalink and title. If either of those are not
-        * supplied, creates a hash based on the full feed data.
-        *
-        * @since Beta 2
-        * @param boolean $hash Should we force using a hash instead of the supplied ID?
-        * @return string
-        */
-       public function get_id($hash = false)
-       {
-               if (!$hash)
-               {
-                       if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'id'))
-                       {
-                               return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'id'))
-                       {
-                               return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'guid'))
-                       {
-                               return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'identifier'))
-                       {
-                               return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'identifier'))
-                       {
-                               return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       elseif (isset($this->data['attribs'][SIMPLEPIE_NAMESPACE_RDF]['about']))
-                       {
-                               return $this->sanitize($this->data['attribs'][SIMPLEPIE_NAMESPACE_RDF]['about'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       elseif (($return = $this->get_permalink()) !== null)
-                       {
-                               return $return;
-                       }
-                       elseif (($return = $this->get_title()) !== null)
-                       {
-                               return $return;
-                       }
-               }
-               if ($this->get_permalink() !== null || $this->get_title() !== null)
-               {
-                       return md5($this->get_permalink() . $this->get_title());
-               }
-               else
-               {
-                       return md5(serialize($this->data));
-               }
-       }
-
-       /**
-        * Get the title of the item
-        *
-        * Uses `<atom:title>`, `<title>` or `<dc:title>`
-        *
-        * @since Beta 2 (previously called `get_item_title` since 0.8)
-        * @return string|null
-        */
-       public function get_title()
-       {
-               if (!isset($this->data['title']))
-               {
-                       if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title'))
-                       {
-                               $this->data['title'] = $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title'))
-                       {
-                               $this->data['title'] = $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title'))
-                       {
-                               $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title'))
-                       {
-                               $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title'))
-                       {
-                               $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title'))
-                       {
-                               $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title'))
-                       {
-                               $this->data['title'] = $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       else
-                       {
-                               $this->data['title'] = null;
-                       }
-               }
-               return $this->data['title'];
-       }
-
-       /**
-        * Get the content for the item
-        *
-        * Prefers summaries over full content , but will return full content if a
-        * summary does not exist.
-        *
-        * To prefer full content instead, use {@see get_content}
-        *
-        * Uses `<atom:summary>`, `<description>`, `<dc:description>` or
-        * `<itunes:subtitle>`
-        *
-        * @since 0.8
-        * @param boolean $description_only Should we avoid falling back to the content?
-        * @return string|null
-        */
-       public function get_description($description_only = false)
-       {
-               if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'summary'))
-               {
-                       return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'summary'))
-               {
-                       return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML);
-               }
-
-               elseif (!$description_only)
-               {
-                       return $this->get_content(true);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the content for the item
-        *
-        * Prefers full content over summaries, but will return a summary if full
-        * content does not exist.
-        *
-        * To prefer summaries instead, use {@see get_description}
-        *
-        * Uses `<atom:content>` or `<content:encoded>` (RSS 1.0 Content Module)
-        *
-        * @since 1.0
-        * @param boolean $content_only Should we avoid falling back to the description?
-        * @return string|null
-        */
-       public function get_content($content_only = false)
-       {
-               if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'content'))
-               {
-                       return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_content_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'content'))
-               {
-                       return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT, 'encoded'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
-               }
-               elseif (!$content_only)
-               {
-                       return $this->get_description(true);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get a category for the item
-        *
-        * @since Beta 3 (previously called `get_categories()` since Beta 2)
-        * @param int $key The category that you want to return.  Remember that arrays begin with 0, not 1
-        * @return SimplePie_Category|null
-        */
-       public function get_category($key = 0)
-       {
-               $categories = $this->get_categories();
-               if (isset($categories[$key]))
-               {
-                       return $categories[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get all categories for the item
-        *
-        * Uses `<atom:category>`, `<category>` or `<dc:subject>`
-        *
-        * @since Beta 3
-        * @return array|null List of {@see SimplePie_Category} objects
-        */
-       public function get_categories()
-       {
-               $categories = array();
-
-               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category)
-               {
-                       $term = null;
-                       $scheme = null;
-                       $label = null;
-                       if (isset($category['attribs']['']['term']))
-                       {
-                               $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($category['attribs']['']['scheme']))
-                       {
-                               $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($category['attribs']['']['label']))
-                       {
-                               $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       $categories[] = $this->registry->create('Category', array($term, $scheme, $label));
-               }
-               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category)
-               {
-                       // This is really the label, but keep this as the term also for BC.
-                       // Label will also work on retrieving because that falls back to term.
-                       $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       if (isset($category['attribs']['']['domain']))
-                       {
-                               $scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       else
-                       {
-                               $scheme = null;
-                       }
-                       $categories[] = $this->registry->create('Category', array($term, $scheme, null));
-               }
-               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category)
-               {
-                       $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
-               }
-               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category)
-               {
-                       $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
-               }
-
-               if (!empty($categories))
-               {
-                       return array_unique($categories);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get an author for the item
-        *
-        * @since Beta 2
-        * @param int $key The author that you want to return.  Remember that arrays begin with 0, not 1
-        * @return SimplePie_Author|null
-        */
-       public function get_author($key = 0)
-       {
-               $authors = $this->get_authors();
-               if (isset($authors[$key]))
-               {
-                       return $authors[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get a contributor for the item
-        *
-        * @since 1.1
-        * @param int $key The contrbutor that you want to return.  Remember that arrays begin with 0, not 1
-        * @return SimplePie_Author|null
-        */
-       public function get_contributor($key = 0)
-       {
-               $contributors = $this->get_contributors();
-               if (isset($contributors[$key]))
-               {
-                       return $contributors[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get all contributors for the item
-        *
-        * Uses `<atom:contributor>`
-        *
-        * @since 1.1
-        * @return array|null List of {@see SimplePie_Author} objects
-        */
-       public function get_contributors()
-       {
-               $contributors = array();
-               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor)
-               {
-                       $name = null;
-                       $uri = null;
-                       $email = null;
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
-                       {
-                               $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
-                       {
-                               $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]));
-                       }
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data']))
-                       {
-                               $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if ($name !== null || $email !== null || $uri !== null)
-                       {
-                               $contributors[] = $this->registry->create('Author', array($name, $uri, $email));
-                       }
-               }
-               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor)
-               {
-                       $name = null;
-                       $url = null;
-                       $email = null;
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data']))
-                       {
-                               $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data']))
-                       {
-                               $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]));
-                       }
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data']))
-                       {
-                               $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if ($name !== null || $email !== null || $url !== null)
-                       {
-                               $contributors[] = $this->registry->create('Author', array($name, $url, $email));
-                       }
-               }
-
-               if (!empty($contributors))
-               {
-                       return array_unique($contributors);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get all authors for the item
-        *
-        * Uses `<atom:author>`, `<author>`, `<dc:creator>` or `<itunes:author>`
-        *
-        * @since Beta 2
-        * @return array|null List of {@see SimplePie_Author} objects
-        */
-       public function get_authors()
-       {
-               $authors = array();
-               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author)
-               {
-                       $name = null;
-                       $uri = null;
-                       $email = null;
-                       if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
-                       {
-                               $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
-                       {
-                               $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]));
-                       }
-                       if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data']))
-                       {
-                               $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if ($name !== null || $email !== null || $uri !== null)
-                       {
-                               $authors[] = $this->registry->create('Author', array($name, $uri, $email));
-                       }
-               }
-               if ($author = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author'))
-               {
-                       $name = null;
-                       $url = null;
-                       $email = null;
-                       if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data']))
-                       {
-                               $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data']))
-                       {
-                               $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]));
-                       }
-                       if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data']))
-                       {
-                               $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if ($name !== null || $email !== null || $url !== null)
-                       {
-                               $authors[] = $this->registry->create('Author', array($name, $url, $email));
-                       }
-               }
-               if ($author = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'author'))
-               {
-                       $authors[] = $this->registry->create('Author', array(null, null, $this->sanitize($author[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)));
-               }
-               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author)
-               {
-                       $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
-               }
-               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author)
-               {
-                       $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
-               }
-               foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author)
-               {
-                       $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
-               }
-
-               if (!empty($authors))
-               {
-                       return array_unique($authors);
-               }
-               elseif (($source = $this->get_source()) && ($authors = $source->get_authors()))
-               {
-                       return $authors;
-               }
-               elseif ($authors = $this->feed->get_authors())
-               {
-                       return $authors;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the copyright info for the item
-        *
-        * Uses `<atom:rights>` or `<dc:rights>`
-        *
-        * @since 1.1
-        * @return string
-        */
-       public function get_copyright()
-       {
-               if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights'))
-               {
-                       return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the posting date/time for the item
-        *
-        * Uses `<atom:published>`, `<atom:updated>`, `<atom:issued>`,
-        * `<atom:modified>`, `<pubDate>` or `<dc:date>`
-        *
-        * Note: obeys PHP's timezone setting. To get a UTC date/time, use
-        * {@see get_gmdate}
-        *
-        * @since Beta 2 (previously called `get_item_date` since 0.8)
-        *
-        * @param string $date_format Supports any PHP date format from {@see http://php.net/date} (empty for the raw data)
-        * @return int|string|null
-        */
-       public function get_date($date_format = 'j F Y, g:i a')
-       {
-               if (!isset($this->data['date']))
-               {
-                       if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'published'))
-                       {
-                               $this->data['date']['raw'] = $return[0]['data'];
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'updated'))
-                       {
-                               $this->data['date']['raw'] = $return[0]['data'];
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'issued'))
-                       {
-                               $this->data['date']['raw'] = $return[0]['data'];
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'created'))
-                       {
-                               $this->data['date']['raw'] = $return[0]['data'];
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'modified'))
-                       {
-                               $this->data['date']['raw'] = $return[0]['data'];
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'pubDate'))
-                       {
-                               $this->data['date']['raw'] = $return[0]['data'];
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'date'))
-                       {
-                               $this->data['date']['raw'] = $return[0]['data'];
-                       }
-                       elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'date'))
-                       {
-                               $this->data['date']['raw'] = $return[0]['data'];
-                       }
-
-                       if (!empty($this->data['date']['raw']))
-                       {
-                               $parser = $this->registry->call('Parse_Date', 'get');
-                               $this->data['date']['parsed'] = $parser->parse($this->data['date']['raw']);
-                       }
-                       else
-                       {
-                               $this->data['date'] = null;
-                       }
-               }
-               if ($this->data['date'])
-               {
-                       $date_format = (string) $date_format;
-                       switch ($date_format)
-                       {
-                               case '':
-                                       return $this->sanitize($this->data['date']['raw'], SIMPLEPIE_CONSTRUCT_TEXT);
-
-                               case 'U':
-                                       return $this->data['date']['parsed'];
-
-                               default:
-                                       return date($date_format, $this->data['date']['parsed']);
-                       }
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the update date/time for the item
-        *
-        * Uses `<atom:updated>`
-        *
-        * Note: obeys PHP's timezone setting. To get a UTC date/time, use
-        * {@see get_gmdate}
-        *
-        * @param string $date_format Supports any PHP date format from {@see http://php.net/date} (empty for the raw data)
-        * @return int|string|null
-        */
-       public function get_updated_date($date_format = 'j F Y, g:i a')
-       {
-               if (!isset($this->data['updated']))
-               {
-                       if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'updated'))
-                       {
-                               $this->data['updated']['raw'] = $return[0]['data'];
-                       }
-
-                       if (!empty($this->data['updated']['raw']))
-                       {
-                               $parser = $this->registry->call('Parse_Date', 'get');
-                               $this->data['updated']['parsed'] = $parser->parse($this->data['date']['raw']);
-                       }
-                       else
-                       {
-                               $this->data['updated'] = null;
-                       }
-               }
-               if ($this->data['updated'])
-               {
-                       $date_format = (string) $date_format;
-                       switch ($date_format)
-                       {
-                               case '':
-                                       return $this->sanitize($this->data['updated']['raw'], SIMPLEPIE_CONSTRUCT_TEXT);
-
-                               case 'U':
-                                       return $this->data['updated']['parsed'];
-
-                               default:
-                                       return date($date_format, $this->data['updated']['parsed']);
-                       }
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the localized posting date/time for the item
-        *
-        * Returns the date formatted in the localized language. To display in
-        * languages other than the server's default, you need to change the locale
-        * with {@link http://php.net/setlocale setlocale()}. The available
-        * localizations depend on which ones are installed on your web server.
-        *
-        * @since 1.0
-        *
-        * @param string $date_format Supports any PHP date format from {@see http://php.net/strftime} (empty for the raw data)
-        * @return int|string|null
-        */
-       public function get_local_date($date_format = '%c')
-       {
-               if (!$date_format)
-               {
-                       return $this->sanitize($this->get_date(''), SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif (($date = $this->get_date('U')) !== null && $date !== false)
-               {
-                       return strftime($date_format, $date);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the posting date/time for the item (UTC time)
-        *
-        * @see get_date
-        * @param string $date_format Supports any PHP date format from {@see http://php.net/date}
-        * @return int|string|null
-        */
-       public function get_gmdate($date_format = 'j F Y, g:i a')
-       {
-               $date = $this->get_date('U');
-               if ($date === null)
-               {
-                       return null;
-               }
-
-               return gmdate($date_format, $date);
-       }
-
-       /**
-        * Get the update date/time for the item (UTC time)
-        *
-        * @see get_updated_date
-        * @param string $date_format Supports any PHP date format from {@see http://php.net/date}
-        * @return int|string|null
-        */
-       public function get_updated_gmdate($date_format = 'j F Y, g:i a')
-       {
-               $date = $this->get_updated_date('U');
-               if ($date === null)
-               {
-                       return null;
-               }
-
-               return gmdate($date_format, $date);
-       }
-
-       /**
-        * Get the permalink for the item
-        *
-        * Returns the first link available with a relationship of "alternate".
-        * Identical to {@see get_link()} with key 0
-        *
-        * @see get_link
-        * @since 0.8
-        * @return string|null Permalink URL
-        */
-       public function get_permalink()
-       {
-               $link = $this->get_link();
-               $enclosure = $this->get_enclosure(0);
-               if ($link !== null)
-               {
-                       return $link;
-               }
-               elseif ($enclosure !== null)
-               {
-                       return $enclosure->get_link();
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get a single link for the item
-        *
-        * @since Beta 3
-        * @param int $key The link that you want to return.  Remember that arrays begin with 0, not 1
-        * @param string $rel The relationship of the link to return
-        * @return string|null Link URL
-        */
-       public function get_link($key = 0, $rel = 'alternate')
-       {
-               $links = $this->get_links($rel);
-               if ($links[$key] !== null)
-               {
-                       return $links[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get all links for the item
-        *
-        * Uses `<atom:link>`, `<link>` or `<guid>`
-        *
-        * @since Beta 2
-        * @param string $rel The relationship of links to return
-        * @return array|null Links found for the item (strings)
-        */
-       public function get_links($rel = 'alternate')
-       {
-               if (!isset($this->data['links']))
-               {
-                       $this->data['links'] = array();
-                       foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link)
-                       {
-                               if (isset($link['attribs']['']['href']))
-                               {
-                                       $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
-                                       $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
-
-                               }
-                       }
-                       foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link)
-                       {
-                               if (isset($link['attribs']['']['href']))
-                               {
-                                       $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
-                                       $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
-                               }
-                       }
-                       if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link'))
-                       {
-                               $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
-                       }
-                       if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link'))
-                       {
-                               $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
-                       }
-                       if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link'))
-                       {
-                               $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
-                       }
-                       if ($links = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'guid'))
-                       {
-                               if (!isset($links[0]['attribs']['']['isPermaLink']) || strtolower(trim($links[0]['attribs']['']['isPermaLink'])) === 'true')
-                               {
-                                       $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
-                               }
-                       }
-
-                       $keys = array_keys($this->data['links']);
-                       foreach ($keys as $key)
-                       {
-                               if ($this->registry->call('Misc', 'is_isegment_nz_nc', array($key)))
-                               {
-                                       if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]))
-                                       {
-                                               $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]);
-                                               $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key];
-                                       }
-                                       else
-                                       {
-                                               $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key];
-                                       }
-                               }
-                               elseif (substr($key, 0, 41) === SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY)
-                               {
-                                       $this->data['links'][substr($key, 41)] =& $this->data['links'][$key];
-                               }
-                               $this->data['links'][$key] = array_unique($this->data['links'][$key]);
-                       }
-               }
-               if (isset($this->data['links'][$rel]))
-               {
-                       return $this->data['links'][$rel];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get an enclosure from the item
-        *
-        * Supports the <enclosure> RSS tag, as well as Media RSS and iTunes RSS.
-        *
-        * @since Beta 2
-        * @todo Add ability to prefer one type of content over another (in a media group).
-        * @param int $key The enclosure that you want to return.  Remember that arrays begin with 0, not 1
-        * @return SimplePie_Enclosure|null
-        */
-       public function get_enclosure($key = 0, $prefer = null)
-       {
-               $enclosures = $this->get_enclosures();
-               if (isset($enclosures[$key]))
-               {
-                       return $enclosures[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get all available enclosures (podcasts, etc.)
-        *
-        * Supports the <enclosure> RSS tag, as well as Media RSS and iTunes RSS.
-        *
-        * At this point, we're pretty much assuming that all enclosures for an item
-        * are the same content.  Anything else is too complicated to
-        * properly support.
-        *
-        * @since Beta 2
-        * @todo Add support for end-user defined sorting of enclosures by type/handler (so we can prefer the faster-loading FLV over MP4).
-        * @todo If an element exists at a level, but it's value is empty, we should fall back to the value from the parent (if it exists).
-        * @return array|null List of SimplePie_Enclosure items
-        */
-       public function get_enclosures()
-       {
-               if (!isset($this->data['enclosures']))
-               {
-                       $this->data['enclosures'] = array();
-
-                       // Elements
-                       $captions_parent = null;
-                       $categories_parent = null;
-                       $copyrights_parent = null;
-                       $credits_parent = null;
-                       $description_parent = null;
-                       $duration_parent = null;
-                       $hashes_parent = null;
-                       $keywords_parent = null;
-                       $player_parent = null;
-                       $ratings_parent = null;
-                       $restrictions_parent = null;
-                       $thumbnails_parent = null;
-                       $title_parent = null;
-
-                       // Let's do the channel and item-level ones first, and just re-use them if we need to.
-                       $parent = $this->get_feed();
-
-                       // CAPTIONS
-                       if ($captions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text'))
-                       {
-                               foreach ($captions as $caption)
-                               {
-                                       $caption_type = null;
-                                       $caption_lang = null;
-                                       $caption_startTime = null;
-                                       $caption_endTime = null;
-                                       $caption_text = null;
-                                       if (isset($caption['attribs']['']['type']))
-                                       {
-                                               $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($caption['attribs']['']['lang']))
-                                       {
-                                               $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($caption['attribs']['']['start']))
-                                       {
-                                               $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($caption['attribs']['']['end']))
-                                       {
-                                               $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($caption['data']))
-                                       {
-                                               $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       $captions_parent[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text));
-                               }
-                       }
-                       elseif ($captions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'text'))
-                       {
-                               foreach ($captions as $caption)
-                               {
-                                       $caption_type = null;
-                                       $caption_lang = null;
-                                       $caption_startTime = null;
-                                       $caption_endTime = null;
-                                       $caption_text = null;
-                                       if (isset($caption['attribs']['']['type']))
-                                       {
-                                               $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($caption['attribs']['']['lang']))
-                                       {
-                                               $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($caption['attribs']['']['start']))
-                                       {
-                                               $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($caption['attribs']['']['end']))
-                                       {
-                                               $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($caption['data']))
-                                       {
-                                               $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       $captions_parent[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text));
-                               }
-                       }
-                       if (is_array($captions_parent))
-                       {
-                               $captions_parent = array_values(array_unique($captions_parent));
-                       }
-
-                       // CATEGORIES
-                       foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category)
-                       {
-                               $term = null;
-                               $scheme = null;
-                               $label = null;
-                               if (isset($category['data']))
-                               {
-                                       $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                               if (isset($category['attribs']['']['scheme']))
-                               {
-                                       $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                               else
-                               {
-                                       $scheme = 'http://search.yahoo.com/mrss/category_schema';
-                               }
-                               if (isset($category['attribs']['']['label']))
-                               {
-                                       $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                               $categories_parent[] = $this->registry->create('Category', array($term, $scheme, $label));
-                       }
-                       foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'category') as $category)
-                       {
-                               $term = null;
-                               $scheme = null;
-                               $label = null;
-                               if (isset($category['data']))
-                               {
-                                       $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                               if (isset($category['attribs']['']['scheme']))
-                               {
-                                       $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                               else
-                               {
-                                       $scheme = 'http://search.yahoo.com/mrss/category_schema';
-                               }
-                               if (isset($category['attribs']['']['label']))
-                               {
-                                       $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                               $categories_parent[] = $this->registry->create('Category', array($term, $scheme, $label));
-                       }
-                       foreach ((array) $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'category') as $category)
-                       {
-                               $term = null;
-                               $scheme = 'http://www.itunes.com/dtds/podcast-1.0.dtd';
-                               $label = null;
-                               if (isset($category['attribs']['']['text']))
-                               {
-                                       $label = $this->sanitize($category['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                               $categories_parent[] = $this->registry->create('Category', array($term, $scheme, $label));
-
-                               if (isset($category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category']))
-                               {
-                                       foreach ((array) $category['child'][SIMPLEPIE_NAMESPACE_ITUNES]['category'] as $subcategory)
-                                       {
-                                               if (isset($subcategory['attribs']['']['text']))
-                                               {
-                                                       $label = $this->sanitize($subcategory['attribs']['']['text'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               $categories_parent[] = $this->registry->create('Category', array($term, $scheme, $label));
-                                       }
-                               }
-                       }
-                       if (is_array($categories_parent))
-                       {
-                               $categories_parent = array_values(array_unique($categories_parent));
-                       }
-
-                       // COPYRIGHT
-                       if ($copyright = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright'))
-                       {
-                               $copyright_url = null;
-                               $copyright_label = null;
-                               if (isset($copyright[0]['attribs']['']['url']))
-                               {
-                                       $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                               if (isset($copyright[0]['data']))
-                               {
-                                       $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                               $copyrights_parent = $this->registry->create('Copyright', array($copyright_url, $copyright_label));
-                       }
-                       elseif ($copyright = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'copyright'))
-                       {
-                               $copyright_url = null;
-                               $copyright_label = null;
-                               if (isset($copyright[0]['attribs']['']['url']))
-                               {
-                                       $copyright_url = $this->sanitize($copyright[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                               if (isset($copyright[0]['data']))
-                               {
-                                       $copyright_label = $this->sanitize($copyright[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                               $copyrights_parent = $this->registry->create('Copyright', array($copyright_url, $copyright_label));
-                       }
-
-                       // CREDITS
-                       if ($credits = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit'))
-                       {
-                               foreach ($credits as $credit)
-                               {
-                                       $credit_role = null;
-                                       $credit_scheme = null;
-                                       $credit_name = null;
-                                       if (isset($credit['attribs']['']['role']))
-                                       {
-                                               $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($credit['attribs']['']['scheme']))
-                                       {
-                                               $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       else
-                                       {
-                                               $credit_scheme = 'urn:ebu';
-                                       }
-                                       if (isset($credit['data']))
-                                       {
-                                               $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       $credits_parent[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name));
-                               }
-                       }
-                       elseif ($credits = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'credit'))
-                       {
-                               foreach ($credits as $credit)
-                               {
-                                       $credit_role = null;
-                                       $credit_scheme = null;
-                                       $credit_name = null;
-                                       if (isset($credit['attribs']['']['role']))
-                                       {
-                                               $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($credit['attribs']['']['scheme']))
-                                       {
-                                               $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       else
-                                       {
-                                               $credit_scheme = 'urn:ebu';
-                                       }
-                                       if (isset($credit['data']))
-                                       {
-                                               $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       $credits_parent[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name));
-                               }
-                       }
-                       if (is_array($credits_parent))
-                       {
-                               $credits_parent = array_values(array_unique($credits_parent));
-                       }
-
-                       // DESCRIPTION
-                       if ($description_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description'))
-                       {
-                               if (isset($description_parent[0]['data']))
-                               {
-                                       $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                       }
-                       elseif ($description_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'description'))
-                       {
-                               if (isset($description_parent[0]['data']))
-                               {
-                                       $description_parent = $this->sanitize($description_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                       }
-
-                       // DURATION
-                       if ($duration_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'duration'))
-                       {
-                               $seconds = null;
-                               $minutes = null;
-                               $hours = null;
-                               if (isset($duration_parent[0]['data']))
-                               {
-                                       $temp = explode(':', $this->sanitize($duration_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
-                                       if (sizeof($temp) > 0)
-                                       {
-                                               $seconds = (int) array_pop($temp);
-                                       }
-                                       if (sizeof($temp) > 0)
-                                       {
-                                               $minutes = (int) array_pop($temp);
-                                               $seconds += $minutes * 60;
-                                       }
-                                       if (sizeof($temp) > 0)
-                                       {
-                                               $hours = (int) array_pop($temp);
-                                               $seconds += $hours * 3600;
-                                       }
-                                       unset($temp);
-                                       $duration_parent = $seconds;
-                               }
-                       }
-
-                       // HASHES
-                       if ($hashes_iterator = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash'))
-                       {
-                               foreach ($hashes_iterator as $hash)
-                               {
-                                       $value = null;
-                                       $algo = null;
-                                       if (isset($hash['data']))
-                                       {
-                                               $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($hash['attribs']['']['algo']))
-                                       {
-                                               $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       else
-                                       {
-                                               $algo = 'md5';
-                                       }
-                                       $hashes_parent[] = $algo.':'.$value;
-                               }
-                       }
-                       elseif ($hashes_iterator = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'hash'))
-                       {
-                               foreach ($hashes_iterator as $hash)
-                               {
-                                       $value = null;
-                                       $algo = null;
-                                       if (isset($hash['data']))
-                                       {
-                                               $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($hash['attribs']['']['algo']))
-                                       {
-                                               $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       else
-                                       {
-                                               $algo = 'md5';
-                                       }
-                                       $hashes_parent[] = $algo.':'.$value;
-                               }
-                       }
-                       if (is_array($hashes_parent))
-                       {
-                               $hashes_parent = array_values(array_unique($hashes_parent));
-                       }
-
-                       // KEYWORDS
-                       if ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords'))
-                       {
-                               if (isset($keywords[0]['data']))
-                               {
-                                       $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
-                                       foreach ($temp as $word)
-                                       {
-                                               $keywords_parent[] = trim($word);
-                                       }
-                               }
-                               unset($temp);
-                       }
-                       elseif ($keywords = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords'))
-                       {
-                               if (isset($keywords[0]['data']))
-                               {
-                                       $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
-                                       foreach ($temp as $word)
-                                       {
-                                               $keywords_parent[] = trim($word);
-                                       }
-                               }
-                               unset($temp);
-                       }
-                       elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'keywords'))
-                       {
-                               if (isset($keywords[0]['data']))
-                               {
-                                       $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
-                                       foreach ($temp as $word)
-                                       {
-                                               $keywords_parent[] = trim($word);
-                                       }
-                               }
-                               unset($temp);
-                       }
-                       elseif ($keywords = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'keywords'))
-                       {
-                               if (isset($keywords[0]['data']))
-                               {
-                                       $temp = explode(',', $this->sanitize($keywords[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
-                                       foreach ($temp as $word)
-                                       {
-                                               $keywords_parent[] = trim($word);
-                                       }
-                               }
-                               unset($temp);
-                       }
-                       if (is_array($keywords_parent))
-                       {
-                               $keywords_parent = array_values(array_unique($keywords_parent));
-                       }
-
-                       // PLAYER
-                       if ($player_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player'))
-                       {
-                               if (isset($player_parent[0]['attribs']['']['url']))
-                               {
-                                       $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
-                               }
-                       }
-                       elseif ($player_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'player'))
-                       {
-                               if (isset($player_parent[0]['attribs']['']['url']))
-                               {
-                                       $player_parent = $this->sanitize($player_parent[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
-                               }
-                       }
-
-                       // RATINGS
-                       if ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating'))
-                       {
-                               foreach ($ratings as $rating)
-                               {
-                                       $rating_scheme = null;
-                                       $rating_value = null;
-                                       if (isset($rating['attribs']['']['scheme']))
-                                       {
-                                               $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       else
-                                       {
-                                               $rating_scheme = 'urn:simple';
-                                       }
-                                       if (isset($rating['data']))
-                                       {
-                                               $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       $ratings_parent[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
-                               }
-                       }
-                       elseif ($ratings = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit'))
-                       {
-                               foreach ($ratings as $rating)
-                               {
-                                       $rating_scheme = 'urn:itunes';
-                                       $rating_value = null;
-                                       if (isset($rating['data']))
-                                       {
-                                               $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       $ratings_parent[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
-                               }
-                       }
-                       elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'rating'))
-                       {
-                               foreach ($ratings as $rating)
-                               {
-                                       $rating_scheme = null;
-                                       $rating_value = null;
-                                       if (isset($rating['attribs']['']['scheme']))
-                                       {
-                                               $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       else
-                                       {
-                                               $rating_scheme = 'urn:simple';
-                                       }
-                                       if (isset($rating['data']))
-                                       {
-                                               $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       $ratings_parent[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
-                               }
-                       }
-                       elseif ($ratings = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'explicit'))
-                       {
-                               foreach ($ratings as $rating)
-                               {
-                                       $rating_scheme = 'urn:itunes';
-                                       $rating_value = null;
-                                       if (isset($rating['data']))
-                                       {
-                                               $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       $ratings_parent[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
-                               }
-                       }
-                       if (is_array($ratings_parent))
-                       {
-                               $ratings_parent = array_values(array_unique($ratings_parent));
-                       }
-
-                       // RESTRICTIONS
-                       if ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction'))
-                       {
-                               foreach ($restrictions as $restriction)
-                               {
-                                       $restriction_relationship = null;
-                                       $restriction_type = null;
-                                       $restriction_value = null;
-                                       if (isset($restriction['attribs']['']['relationship']))
-                                       {
-                                               $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($restriction['attribs']['']['type']))
-                                       {
-                                               $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($restriction['data']))
-                                       {
-                                               $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       $restrictions_parent[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
-                               }
-                       }
-                       elseif ($restrictions = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block'))
-                       {
-                               foreach ($restrictions as $restriction)
-                               {
-                                       $restriction_relationship = 'allow';
-                                       $restriction_type = null;
-                                       $restriction_value = 'itunes';
-                                       if (isset($restriction['data']) && strtolower($restriction['data']) === 'yes')
-                                       {
-                                               $restriction_relationship = 'deny';
-                                       }
-                                       $restrictions_parent[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
-                               }
-                       }
-                       elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'restriction'))
-                       {
-                               foreach ($restrictions as $restriction)
-                               {
-                                       $restriction_relationship = null;
-                                       $restriction_type = null;
-                                       $restriction_value = null;
-                                       if (isset($restriction['attribs']['']['relationship']))
-                                       {
-                                               $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($restriction['attribs']['']['type']))
-                                       {
-                                               $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($restriction['data']))
-                                       {
-                                               $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       $restrictions_parent[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
-                               }
-                       }
-                       elseif ($restrictions = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'block'))
-                       {
-                               foreach ($restrictions as $restriction)
-                               {
-                                       $restriction_relationship = 'allow';
-                                       $restriction_type = null;
-                                       $restriction_value = 'itunes';
-                                       if (isset($restriction['data']) && strtolower($restriction['data']) === 'yes')
-                                       {
-                                               $restriction_relationship = 'deny';
-                                       }
-                                       $restrictions_parent[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
-                               }
-                       }
-                       if (is_array($restrictions_parent))
-                       {
-                               $restrictions_parent = array_values(array_unique($restrictions_parent));
-                       }
-                       else
-                       {
-                               $restrictions_parent = array(new SimplePie_Restriction('allow', null, 'default'));
-                       }
-
-                       // THUMBNAILS
-                       if ($thumbnails = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail'))
-                       {
-                               foreach ($thumbnails as $thumbnail)
-                               {
-                                       if (isset($thumbnail['attribs']['']['url']))
-                                       {
-                                               $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
-                                       }
-                               }
-                       }
-                       elseif ($thumbnails = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'thumbnail'))
-                       {
-                               foreach ($thumbnails as $thumbnail)
-                               {
-                                       if (isset($thumbnail['attribs']['']['url']))
-                                       {
-                                               $thumbnails_parent[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
-                                       }
-                               }
-                       }
-
-                       // TITLES
-                       if ($title_parent = $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title'))
-                       {
-                               if (isset($title_parent[0]['data']))
-                               {
-                                       $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                       }
-                       elseif ($title_parent = $parent->get_channel_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'title'))
-                       {
-                               if (isset($title_parent[0]['data']))
-                               {
-                                       $title_parent = $this->sanitize($title_parent[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                               }
-                       }
-
-                       // Clear the memory
-                       unset($parent);
-
-                       // Attributes
-                       $bitrate = null;
-                       $channels = null;
-                       $duration = null;
-                       $expression = null;
-                       $framerate = null;
-                       $height = null;
-                       $javascript = null;
-                       $lang = null;
-                       $length = null;
-                       $medium = null;
-                       $samplingrate = null;
-                       $type = null;
-                       $url = null;
-                       $width = null;
-
-                       // Elements
-                       $captions = null;
-                       $categories = null;
-                       $copyrights = null;
-                       $credits = null;
-                       $description = null;
-                       $hashes = null;
-                       $keywords = null;
-                       $player = null;
-                       $ratings = null;
-                       $restrictions = null;
-                       $thumbnails = null;
-                       $title = null;
-
-                       // If we have media:group tags, loop through them.
-                       foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_MEDIARSS, 'group') as $group)
-                       {
-                               if(isset($group['child']) && isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content']))
-                               {
-                                       // If we have media:content tags, loop through them.
-                                       foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content)
-                                       {
-                                               if (isset($content['attribs']['']['url']))
-                                               {
-                                                       // Attributes
-                                                       $bitrate = null;
-                                                       $channels = null;
-                                                       $duration = null;
-                                                       $expression = null;
-                                                       $framerate = null;
-                                                       $height = null;
-                                                       $javascript = null;
-                                                       $lang = null;
-                                                       $length = null;
-                                                       $medium = null;
-                                                       $samplingrate = null;
-                                                       $type = null;
-                                                       $url = null;
-                                                       $width = null;
-
-                                                       // Elements
-                                                       $captions = null;
-                                                       $categories = null;
-                                                       $copyrights = null;
-                                                       $credits = null;
-                                                       $description = null;
-                                                       $hashes = null;
-                                                       $keywords = null;
-                                                       $player = null;
-                                                       $ratings = null;
-                                                       $restrictions = null;
-                                                       $thumbnails = null;
-                                                       $title = null;
-
-                                                       // Start checking the attributes of media:content
-                                                       if (isset($content['attribs']['']['bitrate']))
-                                                       {
-                                                               $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                       }
-                                                       if (isset($content['attribs']['']['channels']))
-                                                       {
-                                                               $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                       }
-                                                       if (isset($content['attribs']['']['duration']))
-                                                       {
-                                                               $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                       }
-                                                       else
-                                                       {
-                                                               $duration = $duration_parent;
-                                                       }
-                                                       if (isset($content['attribs']['']['expression']))
-                                                       {
-                                                               $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                       }
-                                                       if (isset($content['attribs']['']['framerate']))
-                                                       {
-                                                               $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                       }
-                                                       if (isset($content['attribs']['']['height']))
-                                                       {
-                                                               $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                       }
-                                                       if (isset($content['attribs']['']['lang']))
-                                                       {
-                                                               $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                       }
-                                                       if (isset($content['attribs']['']['fileSize']))
-                                                       {
-                                                               $length = ceil($content['attribs']['']['fileSize']);
-                                                       }
-                                                       if (isset($content['attribs']['']['medium']))
-                                                       {
-                                                               $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                       }
-                                                       if (isset($content['attribs']['']['samplingrate']))
-                                                       {
-                                                               $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                       }
-                                                       if (isset($content['attribs']['']['type']))
-                                                       {
-                                                               $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                       }
-                                                       if (isset($content['attribs']['']['width']))
-                                                       {
-                                                               $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                       }
-                                                       $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
-
-                                                       // Checking the other optional media: elements. Priority: media:content, media:group, item, channel
-
-                                                       // CAPTIONS
-                                                       if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
-                                                       {
-                                                               foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
-                                                               {
-                                                                       $caption_type = null;
-                                                                       $caption_lang = null;
-                                                                       $caption_startTime = null;
-                                                                       $caption_endTime = null;
-                                                                       $caption_text = null;
-                                                                       if (isset($caption['attribs']['']['type']))
-                                                                       {
-                                                                               $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       if (isset($caption['attribs']['']['lang']))
-                                                                       {
-                                                                               $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       if (isset($caption['attribs']['']['start']))
-                                                                       {
-                                                                               $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       if (isset($caption['attribs']['']['end']))
-                                                                       {
-                                                                               $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       if (isset($caption['data']))
-                                                                       {
-                                                                               $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       $captions[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text));
-                                                               }
-                                                               if (is_array($captions))
-                                                               {
-                                                                       $captions = array_values(array_unique($captions));
-                                                               }
-                                                       }
-                                                       elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
-                                                       {
-                                                               foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
-                                                               {
-                                                                       $caption_type = null;
-                                                                       $caption_lang = null;
-                                                                       $caption_startTime = null;
-                                                                       $caption_endTime = null;
-                                                                       $caption_text = null;
-                                                                       if (isset($caption['attribs']['']['type']))
-                                                                       {
-                                                                               $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       if (isset($caption['attribs']['']['lang']))
-                                                                       {
-                                                                               $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       if (isset($caption['attribs']['']['start']))
-                                                                       {
-                                                                               $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       if (isset($caption['attribs']['']['end']))
-                                                                       {
-                                                                               $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       if (isset($caption['data']))
-                                                                       {
-                                                                               $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       $captions[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text));
-                                                               }
-                                                               if (is_array($captions))
-                                                               {
-                                                                       $captions = array_values(array_unique($captions));
-                                                               }
-                                                       }
-                                                       else
-                                                       {
-                                                               $captions = $captions_parent;
-                                                       }
-
-                                                       // CATEGORIES
-                                                       if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
-                                                       {
-                                                               foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
-                                                               {
-                                                                       $term = null;
-                                                                       $scheme = null;
-                                                                       $label = null;
-                                                                       if (isset($category['data']))
-                                                                       {
-                                                                               $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       if (isset($category['attribs']['']['scheme']))
-                                                                       {
-                                                                               $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       else
-                                                                       {
-                                                                               $scheme = 'http://search.yahoo.com/mrss/category_schema';
-                                                                       }
-                                                                       if (isset($category['attribs']['']['label']))
-                                                                       {
-                                                                               $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       $categories[] = $this->registry->create('Category', array($term, $scheme, $label));
-                                                               }
-                                                       }
-                                                       if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
-                                                       {
-                                                               foreach ((array) $group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
-                                                               {
-                                                                       $term = null;
-                                                                       $scheme = null;
-                                                                       $label = null;
-                                                                       if (isset($category['data']))
-                                                                       {
-                                                                               $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       if (isset($category['attribs']['']['scheme']))
-                                                                       {
-                                                                               $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       else
-                                                                       {
-                                                                               $scheme = 'http://search.yahoo.com/mrss/category_schema';
-                                                                       }
-                                                                       if (isset($category['attribs']['']['label']))
-                                                                       {
-                                                                               $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       $categories[] = $this->registry->create('Category', array($term, $scheme, $label));
-                                                               }
-                                                       }
-                                                       if (is_array($categories) && is_array($categories_parent))
-                                                       {
-                                                               $categories = array_values(array_unique(array_merge($categories, $categories_parent)));
-                                                       }
-                                                       elseif (is_array($categories))
-                                                       {
-                                                               $categories = array_values(array_unique($categories));
-                                                       }
-                                                       elseif (is_array($categories_parent))
-                                                       {
-                                                               $categories = array_values(array_unique($categories_parent));
-                                                       }
-
-                                                       // COPYRIGHTS
-                                                       if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
-                                                       {
-                                                               $copyright_url = null;
-                                                               $copyright_label = null;
-                                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
-                                                               {
-                                                                       $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
-                                                               {
-                                                                       $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               $copyrights = $this->registry->create('Copyright', array($copyright_url, $copyright_label));
-                                                       }
-                                                       elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
-                                                       {
-                                                               $copyright_url = null;
-                                                               $copyright_label = null;
-                                                               if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
-                                                               {
-                                                                       $copyright_url = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
-                                                               {
-                                                                       $copyright_label = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               $copyrights = $this->registry->create('Copyright', array($copyright_url, $copyright_label));
-                                                       }
-                                                       else
-                                                       {
-                                                               $copyrights = $copyrights_parent;
-                                                       }
-
-                                                       // CREDITS
-                                                       if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
-                                                       {
-                                                               foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
-                                                               {
-                                                                       $credit_role = null;
-                                                                       $credit_scheme = null;
-                                                                       $credit_name = null;
-                                                                       if (isset($credit['attribs']['']['role']))
-                                                                       {
-                                                                               $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       if (isset($credit['attribs']['']['scheme']))
-                                                                       {
-                                                                               $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       else
-                                                                       {
-                                                                               $credit_scheme = 'urn:ebu';
-                                                                       }
-                                                                       if (isset($credit['data']))
-                                                                       {
-                                                                               $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       $credits[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name));
-                                                               }
-                                                               if (is_array($credits))
-                                                               {
-                                                                       $credits = array_values(array_unique($credits));
-                                                               }
-                                                       }
-                                                       elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
-                                                       {
-                                                               foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
-                                                               {
-                                                                       $credit_role = null;
-                                                                       $credit_scheme = null;
-                                                                       $credit_name = null;
-                                                                       if (isset($credit['attribs']['']['role']))
-                                                                       {
-                                                                               $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       if (isset($credit['attribs']['']['scheme']))
-                                                                       {
-                                                                               $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       else
-                                                                       {
-                                                                               $credit_scheme = 'urn:ebu';
-                                                                       }
-                                                                       if (isset($credit['data']))
-                                                                       {
-                                                                               $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       $credits[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name));
-                                                               }
-                                                               if (is_array($credits))
-                                                               {
-                                                                       $credits = array_values(array_unique($credits));
-                                                               }
-                                                       }
-                                                       else
-                                                       {
-                                                               $credits = $credits_parent;
-                                                       }
-
-                                                       // DESCRIPTION
-                                                       if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
-                                                       {
-                                                               $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                       }
-                                                       elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
-                                                       {
-                                                               $description = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                       }
-                                                       else
-                                                       {
-                                                               $description = $description_parent;
-                                                       }
-
-                                                       // HASHES
-                                                       if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
-                                                       {
-                                                               foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
-                                                               {
-                                                                       $value = null;
-                                                                       $algo = null;
-                                                                       if (isset($hash['data']))
-                                                                       {
-                                                                               $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       if (isset($hash['attribs']['']['algo']))
-                                                                       {
-                                                                               $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       else
-                                                                       {
-                                                                               $algo = 'md5';
-                                                                       }
-                                                                       $hashes[] = $algo.':'.$value;
-                                                               }
-                                                               if (is_array($hashes))
-                                                               {
-                                                                       $hashes = array_values(array_unique($hashes));
-                                                               }
-                                                       }
-                                                       elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
-                                                       {
-                                                               foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
-                                                               {
-                                                                       $value = null;
-                                                                       $algo = null;
-                                                                       if (isset($hash['data']))
-                                                                       {
-                                                                               $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       if (isset($hash['attribs']['']['algo']))
-                                                                       {
-                                                                               $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       else
-                                                                       {
-                                                                               $algo = 'md5';
-                                                                       }
-                                                                       $hashes[] = $algo.':'.$value;
-                                                               }
-                                                               if (is_array($hashes))
-                                                               {
-                                                                       $hashes = array_values(array_unique($hashes));
-                                                               }
-                                                       }
-                                                       else
-                                                       {
-                                                               $hashes = $hashes_parent;
-                                                       }
-
-                                                       // KEYWORDS
-                                                       if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
-                                                       {
-                                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
-                                                               {
-                                                                       $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
-                                                                       foreach ($temp as $word)
-                                                                       {
-                                                                               $keywords[] = trim($word);
-                                                                       }
-                                                                       unset($temp);
-                                                               }
-                                                               if (is_array($keywords))
-                                                               {
-                                                                       $keywords = array_values(array_unique($keywords));
-                                                               }
-                                                       }
-                                                       elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
-                                                       {
-                                                               if (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
-                                                               {
-                                                                       $temp = explode(',', $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
-                                                                       foreach ($temp as $word)
-                                                                       {
-                                                                               $keywords[] = trim($word);
-                                                                       }
-                                                                       unset($temp);
-                                                               }
-                                                               if (is_array($keywords))
-                                                               {
-                                                                       $keywords = array_values(array_unique($keywords));
-                                                               }
-                                                       }
-                                                       else
-                                                       {
-                                                               $keywords = $keywords_parent;
-                                                       }
-
-                                                       // PLAYER
-                                                       if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
-                                                       {
-                                                               $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
-                                                       }
-                                                       elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
-                                                       {
-                                                               $player = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
-                                                       }
-                                                       else
-                                                       {
-                                                               $player = $player_parent;
-                                                       }
-
-                                                       // RATINGS
-                                                       if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
-                                                       {
-                                                               foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
-                                                               {
-                                                                       $rating_scheme = null;
-                                                                       $rating_value = null;
-                                                                       if (isset($rating['attribs']['']['scheme']))
-                                                                       {
-                                                                               $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       else
-                                                                       {
-                                                                               $rating_scheme = 'urn:simple';
-                                                                       }
-                                                                       if (isset($rating['data']))
-                                                                       {
-                                                                               $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       $ratings[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
-                                                               }
-                                                               if (is_array($ratings))
-                                                               {
-                                                                       $ratings = array_values(array_unique($ratings));
-                                                               }
-                                                       }
-                                                       elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
-                                                       {
-                                                               foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
-                                                               {
-                                                                       $rating_scheme = null;
-                                                                       $rating_value = null;
-                                                                       if (isset($rating['attribs']['']['scheme']))
-                                                                       {
-                                                                               $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       else
-                                                                       {
-                                                                               $rating_scheme = 'urn:simple';
-                                                                       }
-                                                                       if (isset($rating['data']))
-                                                                       {
-                                                                               $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       $ratings[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
-                                                               }
-                                                               if (is_array($ratings))
-                                                               {
-                                                                       $ratings = array_values(array_unique($ratings));
-                                                               }
-                                                       }
-                                                       else
-                                                       {
-                                                               $ratings = $ratings_parent;
-                                                       }
-
-                                                       // RESTRICTIONS
-                                                       if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
-                                                       {
-                                                               foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
-                                                               {
-                                                                       $restriction_relationship = null;
-                                                                       $restriction_type = null;
-                                                                       $restriction_value = null;
-                                                                       if (isset($restriction['attribs']['']['relationship']))
-                                                                       {
-                                                                               $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       if (isset($restriction['attribs']['']['type']))
-                                                                       {
-                                                                               $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       if (isset($restriction['data']))
-                                                                       {
-                                                                               $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       $restrictions[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
-                                                               }
-                                                               if (is_array($restrictions))
-                                                               {
-                                                                       $restrictions = array_values(array_unique($restrictions));
-                                                               }
-                                                       }
-                                                       elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
-                                                       {
-                                                               foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
-                                                               {
-                                                                       $restriction_relationship = null;
-                                                                       $restriction_type = null;
-                                                                       $restriction_value = null;
-                                                                       if (isset($restriction['attribs']['']['relationship']))
-                                                                       {
-                                                                               $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       if (isset($restriction['attribs']['']['type']))
-                                                                       {
-                                                                               $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       if (isset($restriction['data']))
-                                                                       {
-                                                                               $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                                       }
-                                                                       $restrictions[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
-                                                               }
-                                                               if (is_array($restrictions))
-                                                               {
-                                                                       $restrictions = array_values(array_unique($restrictions));
-                                                               }
-                                                       }
-                                                       else
-                                                       {
-                                                               $restrictions = $restrictions_parent;
-                                                       }
-
-                                                       // THUMBNAILS
-                                                       if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
-                                                       {
-                                                               foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
-                                                               {
-                                                                       $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
-                                                               }
-                                                               if (is_array($thumbnails))
-                                                               {
-                                                                       $thumbnails = array_values(array_unique($thumbnails));
-                                                               }
-                                                       }
-                                                       elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
-                                                       {
-                                                               foreach ($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
-                                                               {
-                                                                       $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
-                                                               }
-                                                               if (is_array($thumbnails))
-                                                               {
-                                                                       $thumbnails = array_values(array_unique($thumbnails));
-                                                               }
-                                                       }
-                                                       else
-                                                       {
-                                                               $thumbnails = $thumbnails_parent;
-                                                       }
-
-                                                       // TITLES
-                                                       if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
-                                                       {
-                                                               $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                       }
-                                                       elseif (isset($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
-                                                       {
-                                                               $title = $this->sanitize($group['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                       }
-                                                       else
-                                                       {
-                                                               $title = $title_parent;
-                                                       }
-
-                                                       $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width));
-                                               }
-                                       }
-                               }
-                       }
-
-                       // If we have standalone media:content tags, loop through them.
-                       if (isset($this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content']))
-                       {
-                               foreach ((array) $this->data['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['content'] as $content)
-                               {
-                                       if (isset($content['attribs']['']['url']) || isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
-                                       {
-                                               // Attributes
-                                               $bitrate = null;
-                                               $channels = null;
-                                               $duration = null;
-                                               $expression = null;
-                                               $framerate = null;
-                                               $height = null;
-                                               $javascript = null;
-                                               $lang = null;
-                                               $length = null;
-                                               $medium = null;
-                                               $samplingrate = null;
-                                               $type = null;
-                                               $url = null;
-                                               $width = null;
-
-                                               // Elements
-                                               $captions = null;
-                                               $categories = null;
-                                               $copyrights = null;
-                                               $credits = null;
-                                               $description = null;
-                                               $hashes = null;
-                                               $keywords = null;
-                                               $player = null;
-                                               $ratings = null;
-                                               $restrictions = null;
-                                               $thumbnails = null;
-                                               $title = null;
-
-                                               // Start checking the attributes of media:content
-                                               if (isset($content['attribs']['']['bitrate']))
-                                               {
-                                                       $bitrate = $this->sanitize($content['attribs']['']['bitrate'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['channels']))
-                                               {
-                                                       $channels = $this->sanitize($content['attribs']['']['channels'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['duration']))
-                                               {
-                                                       $duration = $this->sanitize($content['attribs']['']['duration'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               else
-                                               {
-                                                       $duration = $duration_parent;
-                                               }
-                                               if (isset($content['attribs']['']['expression']))
-                                               {
-                                                       $expression = $this->sanitize($content['attribs']['']['expression'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['framerate']))
-                                               {
-                                                       $framerate = $this->sanitize($content['attribs']['']['framerate'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['height']))
-                                               {
-                                                       $height = $this->sanitize($content['attribs']['']['height'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['lang']))
-                                               {
-                                                       $lang = $this->sanitize($content['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['fileSize']))
-                                               {
-                                                       $length = ceil($content['attribs']['']['fileSize']);
-                                               }
-                                               if (isset($content['attribs']['']['medium']))
-                                               {
-                                                       $medium = $this->sanitize($content['attribs']['']['medium'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['samplingrate']))
-                                               {
-                                                       $samplingrate = $this->sanitize($content['attribs']['']['samplingrate'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['type']))
-                                               {
-                                                       $type = $this->sanitize($content['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['width']))
-                                               {
-                                                       $width = $this->sanitize($content['attribs']['']['width'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               if (isset($content['attribs']['']['url']))
-                                               {
-                                                       $url = $this->sanitize($content['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
-                                               }
-                                               // Checking the other optional media: elements. Priority: media:content, media:group, item, channel
-
-                                               // CAPTIONS
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text']))
-                                               {
-                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['text'] as $caption)
-                                                       {
-                                                               $caption_type = null;
-                                                               $caption_lang = null;
-                                                               $caption_startTime = null;
-                                                               $caption_endTime = null;
-                                                               $caption_text = null;
-                                                               if (isset($caption['attribs']['']['type']))
-                                                               {
-                                                                       $caption_type = $this->sanitize($caption['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($caption['attribs']['']['lang']))
-                                                               {
-                                                                       $caption_lang = $this->sanitize($caption['attribs']['']['lang'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($caption['attribs']['']['start']))
-                                                               {
-                                                                       $caption_startTime = $this->sanitize($caption['attribs']['']['start'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($caption['attribs']['']['end']))
-                                                               {
-                                                                       $caption_endTime = $this->sanitize($caption['attribs']['']['end'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($caption['data']))
-                                                               {
-                                                                       $caption_text = $this->sanitize($caption['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               $captions[] = $this->registry->create('Caption', array($caption_type, $caption_lang, $caption_startTime, $caption_endTime, $caption_text));
-                                                       }
-                                                       if (is_array($captions))
-                                                       {
-                                                               $captions = array_values(array_unique($captions));
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       $captions = $captions_parent;
-                                               }
-
-                                               // CATEGORIES
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category']))
-                                               {
-                                                       foreach ((array) $content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['category'] as $category)
-                                                       {
-                                                               $term = null;
-                                                               $scheme = null;
-                                                               $label = null;
-                                                               if (isset($category['data']))
-                                                               {
-                                                                       $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($category['attribs']['']['scheme']))
-                                                               {
-                                                                       $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               else
-                                                               {
-                                                                       $scheme = 'http://search.yahoo.com/mrss/category_schema';
-                                                               }
-                                                               if (isset($category['attribs']['']['label']))
-                                                               {
-                                                                       $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               $categories[] = $this->registry->create('Category', array($term, $scheme, $label));
-                                                       }
-                                               }
-                                               if (is_array($categories) && is_array($categories_parent))
-                                               {
-                                                       $categories = array_values(array_unique(array_merge($categories, $categories_parent)));
-                                               }
-                                               elseif (is_array($categories))
-                                               {
-                                                       $categories = array_values(array_unique($categories));
-                                               }
-                                               elseif (is_array($categories_parent))
-                                               {
-                                                       $categories = array_values(array_unique($categories_parent));
-                                               }
-                                               else
-                                               {
-                                                       $categories = null;
-                                               }
-
-                                               // COPYRIGHTS
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright']))
-                                               {
-                                                       $copyright_url = null;
-                                                       $copyright_label = null;
-                                                       if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url']))
-                                                       {
-                                                               $copyright_url = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                       }
-                                                       if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data']))
-                                                       {
-                                                               $copyright_label = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['copyright'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                       }
-                                                       $copyrights = $this->registry->create('Copyright', array($copyright_url, $copyright_label));
-                                               }
-                                               else
-                                               {
-                                                       $copyrights = $copyrights_parent;
-                                               }
-
-                                               // CREDITS
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit']))
-                                               {
-                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['credit'] as $credit)
-                                                       {
-                                                               $credit_role = null;
-                                                               $credit_scheme = null;
-                                                               $credit_name = null;
-                                                               if (isset($credit['attribs']['']['role']))
-                                                               {
-                                                                       $credit_role = $this->sanitize($credit['attribs']['']['role'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($credit['attribs']['']['scheme']))
-                                                               {
-                                                                       $credit_scheme = $this->sanitize($credit['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               else
-                                                               {
-                                                                       $credit_scheme = 'urn:ebu';
-                                                               }
-                                                               if (isset($credit['data']))
-                                                               {
-                                                                       $credit_name = $this->sanitize($credit['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               $credits[] = $this->registry->create('Credit', array($credit_role, $credit_scheme, $credit_name));
-                                                       }
-                                                       if (is_array($credits))
-                                                       {
-                                                               $credits = array_values(array_unique($credits));
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       $credits = $credits_parent;
-                                               }
-
-                                               // DESCRIPTION
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description']))
-                                               {
-                                                       $description = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['description'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               else
-                                               {
-                                                       $description = $description_parent;
-                                               }
-
-                                               // HASHES
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash']))
-                                               {
-                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['hash'] as $hash)
-                                                       {
-                                                               $value = null;
-                                                               $algo = null;
-                                                               if (isset($hash['data']))
-                                                               {
-                                                                       $value = $this->sanitize($hash['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($hash['attribs']['']['algo']))
-                                                               {
-                                                                       $algo = $this->sanitize($hash['attribs']['']['algo'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               else
-                                                               {
-                                                                       $algo = 'md5';
-                                                               }
-                                                               $hashes[] = $algo.':'.$value;
-                                                       }
-                                                       if (is_array($hashes))
-                                                       {
-                                                               $hashes = array_values(array_unique($hashes));
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       $hashes = $hashes_parent;
-                                               }
-
-                                               // KEYWORDS
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords']))
-                                               {
-                                                       if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data']))
-                                                       {
-                                                               $temp = explode(',', $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['keywords'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT));
-                                                               foreach ($temp as $word)
-                                                               {
-                                                                       $keywords[] = trim($word);
-                                                               }
-                                                               unset($temp);
-                                                       }
-                                                       if (is_array($keywords))
-                                                       {
-                                                               $keywords = array_values(array_unique($keywords));
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       $keywords = $keywords_parent;
-                                               }
-
-                                               // PLAYER
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player']))
-                                               {
-                                                       $player = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['player'][0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
-                                               }
-                                               else
-                                               {
-                                                       $player = $player_parent;
-                                               }
-
-                                               // RATINGS
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating']))
-                                               {
-                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['rating'] as $rating)
-                                                       {
-                                                               $rating_scheme = null;
-                                                               $rating_value = null;
-                                                               if (isset($rating['attribs']['']['scheme']))
-                                                               {
-                                                                       $rating_scheme = $this->sanitize($rating['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               else
-                                                               {
-                                                                       $rating_scheme = 'urn:simple';
-                                                               }
-                                                               if (isset($rating['data']))
-                                                               {
-                                                                       $rating_value = $this->sanitize($rating['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               $ratings[] = $this->registry->create('Rating', array($rating_scheme, $rating_value));
-                                                       }
-                                                       if (is_array($ratings))
-                                                       {
-                                                               $ratings = array_values(array_unique($ratings));
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       $ratings = $ratings_parent;
-                                               }
-
-                                               // RESTRICTIONS
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction']))
-                                               {
-                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['restriction'] as $restriction)
-                                                       {
-                                                               $restriction_relationship = null;
-                                                               $restriction_type = null;
-                                                               $restriction_value = null;
-                                                               if (isset($restriction['attribs']['']['relationship']))
-                                                               {
-                                                                       $restriction_relationship = $this->sanitize($restriction['attribs']['']['relationship'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($restriction['attribs']['']['type']))
-                                                               {
-                                                                       $restriction_type = $this->sanitize($restriction['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               if (isset($restriction['data']))
-                                                               {
-                                                                       $restriction_value = $this->sanitize($restriction['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                                               }
-                                                               $restrictions[] = $this->registry->create('Restriction', array($restriction_relationship, $restriction_type, $restriction_value));
-                                                       }
-                                                       if (is_array($restrictions))
-                                                       {
-                                                               $restrictions = array_values(array_unique($restrictions));
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       $restrictions = $restrictions_parent;
-                                               }
-
-                                               // THUMBNAILS
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail']))
-                                               {
-                                                       foreach ($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['thumbnail'] as $thumbnail)
-                                                       {
-                                                               $thumbnails[] = $this->sanitize($thumbnail['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI);
-                                                       }
-                                                       if (is_array($thumbnails))
-                                                       {
-                                                               $thumbnails = array_values(array_unique($thumbnails));
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       $thumbnails = $thumbnails_parent;
-                                               }
-
-                                               // TITLES
-                                               if (isset($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title']))
-                                               {
-                                                       $title = $this->sanitize($content['child'][SIMPLEPIE_NAMESPACE_MEDIARSS]['title'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                               }
-                                               else
-                                               {
-                                                       $title = $title_parent;
-                                               }
-
-                                               $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions, $categories, $channels, $copyrights, $credits, $description, $duration, $expression, $framerate, $hashes, $height, $keywords, $lang, $medium, $player, $ratings, $restrictions, $samplingrate, $thumbnails, $title, $width));
-                                       }
-                               }
-                       }
-
-                       foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link') as $link)
-                       {
-                               if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] === 'enclosure')
-                               {
-                                       // Attributes
-                                       $bitrate = null;
-                                       $channels = null;
-                                       $duration = null;
-                                       $expression = null;
-                                       $framerate = null;
-                                       $height = null;
-                                       $javascript = null;
-                                       $lang = null;
-                                       $length = null;
-                                       $medium = null;
-                                       $samplingrate = null;
-                                       $type = null;
-                                       $url = null;
-                                       $width = null;
-
-                                       $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
-                                       if (isset($link['attribs']['']['type']))
-                                       {
-                                               $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($link['attribs']['']['length']))
-                                       {
-                                               $length = ceil($link['attribs']['']['length']);
-                                       }
-
-                                       // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
-                                       $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width));
-                               }
-                       }
-
-                       foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link') as $link)
-                       {
-                               if (isset($link['attribs']['']['href']) && !empty($link['attribs']['']['rel']) && $link['attribs']['']['rel'] === 'enclosure')
-                               {
-                                       // Attributes
-                                       $bitrate = null;
-                                       $channels = null;
-                                       $duration = null;
-                                       $expression = null;
-                                       $framerate = null;
-                                       $height = null;
-                                       $javascript = null;
-                                       $lang = null;
-                                       $length = null;
-                                       $medium = null;
-                                       $samplingrate = null;
-                                       $type = null;
-                                       $url = null;
-                                       $width = null;
-
-                                       $url = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
-                                       if (isset($link['attribs']['']['type']))
-                                       {
-                                               $type = $this->sanitize($link['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($link['attribs']['']['length']))
-                                       {
-                                               $length = ceil($link['attribs']['']['length']);
-                                       }
-
-                                       // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
-                                       $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width));
-                               }
-                       }
-
-                       if ($enclosure = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'enclosure'))
-                       {
-                               if (isset($enclosure[0]['attribs']['']['url']))
-                               {
-                                       // Attributes
-                                       $bitrate = null;
-                                       $channels = null;
-                                       $duration = null;
-                                       $expression = null;
-                                       $framerate = null;
-                                       $height = null;
-                                       $javascript = null;
-                                       $lang = null;
-                                       $length = null;
-                                       $medium = null;
-                                       $samplingrate = null;
-                                       $type = null;
-                                       $url = null;
-                                       $width = null;
-
-                                       $url = $this->sanitize($enclosure[0]['attribs']['']['url'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($enclosure[0]));
-                                       if (isset($enclosure[0]['attribs']['']['type']))
-                                       {
-                                               $type = $this->sanitize($enclosure[0]['attribs']['']['type'], SIMPLEPIE_CONSTRUCT_TEXT);
-                                       }
-                                       if (isset($enclosure[0]['attribs']['']['length']))
-                                       {
-                                               $length = ceil($enclosure[0]['attribs']['']['length']);
-                                       }
-
-                                       // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
-                                       $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width));
-                               }
-                       }
-
-                       if (sizeof($this->data['enclosures']) === 0 && ($url || $type || $length || $bitrate || $captions_parent || $categories_parent || $channels || $copyrights_parent || $credits_parent || $description_parent || $duration_parent || $expression || $framerate || $hashes_parent || $height || $keywords_parent || $lang || $medium || $player_parent || $ratings_parent || $restrictions_parent || $samplingrate || $thumbnails_parent || $title_parent || $width))
-                       {
-                               // Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
-                               $this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width));
-                       }
-
-                       $this->data['enclosures'] = array_values(array_unique($this->data['enclosures']));
-               }
-               if (!empty($this->data['enclosures']))
-               {
-                       return $this->data['enclosures'];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the latitude coordinates for the item
-        *
-        * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications
-        *
-        * Uses `<geo:lat>` or `<georss:point>`
-        *
-        * @since 1.0
-        * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo
-        * @link http://www.georss.org/ GeoRSS
-        * @return string|null
-        */
-       public function get_latitude()
-       {
-               if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat'))
-               {
-                       return (float) $return[0]['data'];
-               }
-               elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
-               {
-                       return (float) $match[1];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the longitude coordinates for the item
-        *
-        * Compatible with the W3C WGS84 Basic Geo and GeoRSS specifications
-        *
-        * Uses `<geo:long>`, `<geo:lon>` or `<georss:point>`
-        *
-        * @since 1.0
-        * @link http://www.w3.org/2003/01/geo/ W3C WGS84 Basic Geo
-        * @link http://www.georss.org/ GeoRSS
-        * @return string|null
-        */
-       public function get_longitude()
-       {
-               if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long'))
-               {
-                       return (float) $return[0]['data'];
-               }
-               elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon'))
-               {
-                       return (float) $return[0]['data'];
-               }
-               elseif (($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
-               {
-                       return (float) $match[2];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the `<atom:source>` for the item
-        *
-        * @since 1.1
-        * @return SimplePie_Source|null
-        */
-       public function get_source()
-       {
-               if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'source'))
-               {
-                       return $this->registry->create('Source', array($this, $return[0]));
-               }
-               else
-               {
-                       return null;
-               }
-       }
-}
-
-/**
- * Used for feed auto-discovery
- *
- *
- * This class can be overloaded with {@see SimplePie::set_locator_class()}
- *
- * @package SimplePie
- */
-class SimplePie_Locator
-{
-       var $useragent;
-       var $timeout;
-       var $file;
-       var $local = array();
-       var $elsewhere = array();
-       var $cached_entities = array();
-       var $http_base;
-       var $base;
-       var $base_location = 0;
-       var $checked_feeds = 0;
-       var $max_checked_feeds = 10;
-       protected $registry;
-
-       public function __construct(SimplePie_File $file, $timeout = 10, $useragent = null, $max_checked_feeds = 10)
-       {
-               $this->file = $file;
-               $this->useragent = $useragent;
-               $this->timeout = $timeout;
-               $this->max_checked_feeds = $max_checked_feeds;
-
-               if (class_exists('DOMDocument'))
-               {
-                       $this->dom = new DOMDocument();
-
-                       set_error_handler(array('SimplePie_Misc', 'silence_errors'));
-                       $this->dom->loadHTML($this->file->body);
-                       restore_error_handler();
-               }
-               else
-               {
-                       $this->dom = null;
-               }
-       }
-
-       public function set_registry(SimplePie_Registry $registry)
-       {
-               $this->registry = $registry;
-       }
-
-       public function find($type = SIMPLEPIE_LOCATOR_ALL, &$working)
-       {
-               if ($this->is_feed($this->file))
-               {
-                       return $this->file;
-               }
-
-               if ($this->file->method & SIMPLEPIE_FILE_SOURCE_REMOTE)
-               {
-                       $sniffer = $this->registry->create('Content_Type_Sniffer', array($this->file));
-                       if ($sniffer->get_type() !== 'text/html')
-                       {
-                               return null;
-                       }
-               }
-
-               if ($type & ~SIMPLEPIE_LOCATOR_NONE)
-               {
-                       $this->get_base();
-               }
-
-               if ($type & SIMPLEPIE_LOCATOR_AUTODISCOVERY && $working = $this->autodiscovery())
-               {
-                       return $working[0];
-               }
-
-               if ($type & (SIMPLEPIE_LOCATOR_LOCAL_EXTENSION | SIMPLEPIE_LOCATOR_LOCAL_BODY | SIMPLEPIE_LOCATOR_REMOTE_EXTENSION | SIMPLEPIE_LOCATOR_REMOTE_BODY) && $this->get_links())
-               {
-                       if ($type & SIMPLEPIE_LOCATOR_LOCAL_EXTENSION && $working = $this->extension($this->local))
-                       {
-                               return $working;
-                       }
-
-                       if ($type & SIMPLEPIE_LOCATOR_LOCAL_BODY && $working = $this->body($this->local))
-                       {
-                               return $working;
-                       }
-
-                       if ($type & SIMPLEPIE_LOCATOR_REMOTE_EXTENSION && $working = $this->extension($this->elsewhere))
-                       {
-                               return $working;
-                       }
-
-                       if ($type & SIMPLEPIE_LOCATOR_REMOTE_BODY && $working = $this->body($this->elsewhere))
-                       {
-                               return $working;
-                       }
-               }
-               return null;
-       }
-
-       public function is_feed($file)
-       {
-               if ($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE)
-               {
-                       $sniffer = $this->registry->create('Content_Type_Sniffer', array($file));
-                       $sniffed = $sniffer->get_type();
-                       if (in_array($sniffed, array('application/rss+xml', 'application/rdf+xml', 'text/rdf', 'application/atom+xml', 'text/xml', 'application/xml')))
-                       {
-                               return true;
-                       }
-                       else
-                       {
-                               return false;
-                       }
-               }
-               elseif ($file->method & SIMPLEPIE_FILE_SOURCE_LOCAL)
-               {
-                       return true;
-               }
-               else
-               {
-                       return false;
-               }
-       }
-
-       public function get_base()
-       {
-               if ($this->dom === null)
-               {
-                       throw new SimplePie_Exception('DOMDocument not found, unable to use locator');
-               }
-               $this->http_base = $this->file->url;
-               $this->base = $this->http_base;
-               $elements = $this->dom->getElementsByTagName('base');
-               foreach ($elements as $element)
-               {
-                       if ($element->hasAttribute('href'))
-                       {
-                               $base = $this->registry->call('Misc', 'absolutize_url', array(trim($element->getAttribute('href')), $this->http_base));
-                               if ($base === false)
-                               {
-                                       continue;
-                               }
-                               $this->base = $base;
-                               $this->base_location = method_exists($element, 'getLineNo') ? $element->getLineNo() : 0;
-                               break;
-                       }
-               }
-       }
-
-       public function autodiscovery()
-       {
-               $done = array();
-               $feeds = array();
-               $feeds = array_merge($feeds, $this->search_elements_by_tag('link', $done, $feeds));
-               $feeds = array_merge($feeds, $this->search_elements_by_tag('a', $done, $feeds));
-               $feeds = array_merge($feeds, $this->search_elements_by_tag('area', $done, $feeds));
-
-               if (!empty($feeds))
-               {
-                       return array_values($feeds);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       protected function search_elements_by_tag($name, &$done, $feeds)
-       {
-               if ($this->dom === null)
-               {
-                       throw new SimplePie_Exception('DOMDocument not found, unable to use locator');
-               }
-
-               $links = $this->dom->getElementsByTagName($name);
-               foreach ($links as $link)
-               {
-                       if ($this->checked_feeds === $this->max_checked_feeds)
-                       {
-                               break;
-                       }
-                       if ($link->hasAttribute('href') && $link->hasAttribute('rel'))
-                       {
-                               $rel = array_unique($this->registry->call('Misc', 'space_seperated_tokens', array(strtolower($link->getAttribute('rel')))));
-                               $line = method_exists($link, 'getLineNo') ? $link->getLineNo() : 1;
-
-                               if ($this->base_location < $line)
-                               {
-                                       $href = $this->registry->call('Misc', 'absolutize_url', array(trim($link->getAttribute('href')), $this->base));
-                               }
-                               else
-                               {
-                                       $href = $this->registry->call('Misc', 'absolutize_url', array(trim($link->getAttribute('href')), $this->http_base));
-                               }
-                               if ($href === false)
-                               {
-                                       continue;
-                               }
-
-                               if (!in_array($href, $done) && in_array('feed', $rel) || (in_array('alternate', $rel) && !in_array('stylesheet', $rel) && $link->hasAttribute('type') && in_array(strtolower($this->registry->call('Misc', 'parse_mime', array($link->getAttribute('type')))), array('application/rss+xml', 'application/atom+xml'))) && !isset($feeds[$href]))
-                               {
-                                       $this->checked_feeds++;
-                                       $headers = array(
-                                               'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
-                                       );
-                                       $feed = $this->registry->create('File', array($href, $this->timeout, 5, $headers, $this->useragent));
-                                       if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed))
-                                       {
-                                               $feeds[$href] = $feed;
-                                       }
-                               }
-                               $done[] = $href;
-                       }
-               }
-
-               return $feeds;
-       }
-
-       public function get_links()
-       {
-               if ($this->dom === null)
-               {
-                       throw new SimplePie_Exception('DOMDocument not found, unable to use locator');
-               }
-
-               $links = $this->dom->getElementsByTagName('a');
-               foreach ($links as $link)
-               {
-                       if ($link->hasAttribute('href'))
-                       {
-                               $href = trim($link->getAttribute('href'));
-                               $parsed = $this->registry->call('Misc', 'parse_url', array($href));
-                               if ($parsed['scheme'] === '' || preg_match('/^(http(s)|feed)?$/i', $parsed['scheme']))
-                               {
-                                       if ($this->base_location < $link->getLineNo())
-                                       {
-                                               $href = $this->registry->call('Misc', 'absolutize_url', array(trim($link->getAttribute('href')), $this->base));
-                                       }
-                                       else
-                                       {
-                                               $href = $this->registry->call('Misc', 'absolutize_url', array(trim($link->getAttribute('href')), $this->http_base));
-                                       }
-                                       if ($href === false)
-                                       {
-                                               continue;
-                                       }
-
-                                       $current = $this->registry->call('Misc', 'parse_url', array($this->file->url));
-
-                                       if ($parsed['authority'] === '' || $parsed['authority'] === $current['authority'])
-                                       {
-                                               $this->local[] = $href;
-                                       }
-                                       else
-                                       {
-                                               $this->elsewhere[] = $href;
-                                       }
-                               }
-                       }
-               }
-               $this->local = array_unique($this->local);
-               $this->elsewhere = array_unique($this->elsewhere);
-               if (!empty($this->local) || !empty($this->elsewhere))
-               {
-                       return true;
-               }
-               return null;
-       }
-
-       public function extension(&$array)
-       {
-               foreach ($array as $key => $value)
-               {
-                       if ($this->checked_feeds === $this->max_checked_feeds)
-                       {
-                               break;
-                       }
-                       if (in_array(strtolower(strrchr($value, '.')), array('.rss', '.rdf', '.atom', '.xml')))
-                       {
-                               $this->checked_feeds++;
-
-                               $headers = array(
-                                       'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
-                               );
-                               $feed = $this->registry->create('File', array($value, $this->timeout, 5, $headers, $this->useragent));
-                               if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed))
-                               {
-                                       return $feed;
-                               }
-                               else
-                               {
-                                       unset($array[$key]);
-                               }
-                       }
-               }
-               return null;
-       }
-
-       public function body(&$array)
-       {
-               foreach ($array as $key => $value)
-               {
-                       if ($this->checked_feeds === $this->max_checked_feeds)
-                       {
-                               break;
-                       }
-                       if (preg_match('/(rss|rdf|atom|xml)/i', $value))
-                       {
-                               $this->checked_feeds++;
-                               $headers = array(
-                                       'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
-                               );
-                               $feed = $this->registry->create('File', array($value, $this->timeout, 5, null, $this->useragent));
-                               if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed))
-                               {
-                                       return $feed;
-                               }
-                               else
-                               {
-                                       unset($array[$key]);
-                               }
-                       }
-               }
-               return null;
-       }
-}
-
-/**
- * Miscellanous utilities
- *
- * @package SimplePie
- */
-class SimplePie_Misc
-{
-       public static function time_hms($seconds)
-       {
-               $time = '';
-
-               $hours = floor($seconds / 3600);
-               $remainder = $seconds % 3600;
-               if ($hours > 0)
-               {
-                       $time .= $hours.':';
-               }
-
-               $minutes = floor($remainder / 60);
-               $seconds = $remainder % 60;
-               if ($minutes < 10 && $hours > 0)
-               {
-                       $minutes = '0' . $minutes;
-               }
-               if ($seconds < 10)
-               {
-                       $seconds = '0' . $seconds;
-               }
-
-               $time .= $minutes.':';
-               $time .= $seconds;
-
-               return $time;
-       }
-
-       public static function absolutize_url($relative, $base)
-       {
-               $iri = SimplePie_IRI::absolutize(new SimplePie_IRI($base), $relative);
-               if ($iri === false)
-               {
-                       return false;
-               }
-               return $iri->get_uri();
-       }
-
-       /**
-        * Get a HTML/XML element from a HTML string
-        *
-        * @deprecated Use DOMDocument instead (parsing HTML with regex is bad!)
-        * @param string $realname Element name (including namespace prefix if applicable)
-        * @param string $string HTML document
-        * @return array
-        */
-       public static function get_element($realname, $string)
-       {
-               $return = array();
-               $name = preg_quote($realname, '/');
-               if (preg_match_all("/<($name)" . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . "(>(.*)<\/$name>|(\/)?>)/siU", $string, $matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE))
-               {
-                       for ($i = 0, $total_matches = count($matches); $i < $total_matches; $i++)
-                       {
-                               $return[$i]['tag'] = $realname;
-                               $return[$i]['full'] = $matches[$i][0][0];
-                               $return[$i]['offset'] = $matches[$i][0][1];
-                               if (strlen($matches[$i][3][0]) <= 2)
-                               {
-                                       $return[$i]['self_closing'] = true;
-                               }
-                               else
-                               {
-                                       $return[$i]['self_closing'] = false;
-                                       $return[$i]['content'] = $matches[$i][4][0];
-                               }
-                               $return[$i]['attribs'] = array();
-                               if (isset($matches[$i][2][0]) && preg_match_all('/[\x09\x0A\x0B\x0C\x0D\x20]+([^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3D\x3E]*)(?:[\x09\x0A\x0B\x0C\x0D\x20]*=[\x09\x0A\x0B\x0C\x0D\x20]*(?:"([^"]*)"|\'([^\']*)\'|([^\x09\x0A\x0B\x0C\x0D\x20\x22\x27\x3E][^\x09\x0A\x0B\x0C\x0D\x20\x3E]*)?))?/', ' ' . $matches[$i][2][0] . ' ', $attribs, PREG_SET_ORDER))
-                               {
-                                       for ($j = 0, $total_attribs = count($attribs); $j < $total_attribs; $j++)
-                                       {
-                                               if (count($attribs[$j]) === 2)
-                                               {
-                                                       $attribs[$j][2] = $attribs[$j][1];
-                                               }
-                                               $return[$i]['attribs'][strtolower($attribs[$j][1])]['data'] = SimplePie_Misc::entities_decode(end($attribs[$j]), 'UTF-8');
-                                       }
-                               }
-                       }
-               }
-               return $return;
-       }
-
-       public static function element_implode($element)
-       {
-               $full = "<$element[tag]";
-               foreach ($element['attribs'] as $key => $value)
-               {
-                       $key = strtolower($key);
-                       $full .= " $key=\"" . htmlspecialchars($value['data']) . '"';
-               }
-               if ($element['self_closing'])
-               {
-                       $full .= ' />';
-               }
-               else
-               {
-                       $full .= ">$element[content]</$element[tag]>";
-               }
-               return $full;
-       }
-
-       public static function error($message, $level, $file, $line)
-       {
-               if ((ini_get('error_reporting') & $level) > 0)
-               {
-                       switch ($level)
-                       {
-                               case E_USER_ERROR:
-                                       $note = 'PHP Error';
-                                       break;
-                               case E_USER_WARNING:
-                                       $note = 'PHP Warning';
-                                       break;
-                               case E_USER_NOTICE:
-                                       $note = 'PHP Notice';
-                                       break;
-                               default:
-                                       $note = 'Unknown Error';
-                                       break;
-                       }
-
-                       $log_error = true;
-                       if (!function_exists('error_log'))
-                       {
-                               $log_error = false;
-                       }
-
-                       $log_file = @ini_get('error_log');
-                       if (!empty($log_file) && ('syslog' !== $log_file) && !@is_writable($log_file))
-                       {
-                               $log_error = false;
-                       }
-
-                       if ($log_error)
-                       {
-                               @error_log("$note: $message in $file on line $line", 0);
-                       }
-               }
-
-               return $message;
-       }
-
-       public static function fix_protocol($url, $http = 1)
-       {
-               $url = SimplePie_Misc::normalize_url($url);
-               $parsed = SimplePie_Misc::parse_url($url);
-               if ($parsed['scheme'] !== '' && $parsed['scheme'] !== 'http' && $parsed['scheme'] !== 'https')
-               {
-                       return SimplePie_Misc::fix_protocol(SimplePie_Misc::compress_parse_url('http', $parsed['authority'], $parsed['path'], $parsed['query'], $parsed['fragment']), $http);
-               }
-
-               if ($parsed['scheme'] === '' && $parsed['authority'] === '' && !file_exists($url))
-               {
-                       return SimplePie_Misc::fix_protocol(SimplePie_Misc::compress_parse_url('http', $parsed['path'], '', $parsed['query'], $parsed['fragment']), $http);
-               }
-
-               if ($http === 2 && $parsed['scheme'] !== '')
-               {
-                       return "feed:$url";
-               }
-               elseif ($http === 3 && strtolower($parsed['scheme']) === 'http')
-               {
-                       return substr_replace($url, 'podcast', 0, 4);
-               }
-               elseif ($http === 4 && strtolower($parsed['scheme']) === 'http')
-               {
-                       return substr_replace($url, 'itpc', 0, 4);
-               }
-               else
-               {
-                       return $url;
-               }
-       }
-
-       public static function parse_url($url)
-       {
-               $iri = new SimplePie_IRI($url);
-               return array(
-                       'scheme' => (string) $iri->scheme,
-                       'authority' => (string) $iri->authority,
-                       'path' => (string) $iri->path,
-                       'query' => (string) $iri->query,
-                       'fragment' => (string) $iri->fragment
-               );
-       }
-
-       public static function compress_parse_url($scheme = '', $authority = '', $path = '', $query = '', $fragment = '')
-       {
-               $iri = new SimplePie_IRI('');
-               $iri->scheme = $scheme;
-               $iri->authority = $authority;
-               $iri->path = $path;
-               $iri->query = $query;
-               $iri->fragment = $fragment;
-               return $iri->get_uri();
-       }
-
-       public static function normalize_url($url)
-       {
-               $iri = new SimplePie_IRI($url);
-               return $iri->get_uri();
-       }
-
-       public static function percent_encoding_normalization($match)
-       {
-               $integer = hexdec($match[1]);
-               if ($integer >= 0x41 && $integer <= 0x5A || $integer >= 0x61 && $integer <= 0x7A || $integer >= 0x30 && $integer <= 0x39 || $integer === 0x2D || $integer === 0x2E || $integer === 0x5F || $integer === 0x7E)
-               {
-                       return chr($integer);
-               }
-               else
-               {
-                       return strtoupper($match[0]);
-               }
-       }
-
-       /**
-        * Converts a Windows-1252 encoded string to a UTF-8 encoded string
-        *
-        * @static
-        * @param string $string Windows-1252 encoded string
-        * @return string UTF-8 encoded string
-        */
-       public static function windows_1252_to_utf8($string)
-       {
-               static $convert_table = array("\x80" => "\xE2\x82\xAC", "\x81" => "\xEF\xBF\xBD", "\x82" => "\xE2\x80\x9A", "\x83" => "\xC6\x92", "\x84" => "\xE2\x80\x9E", "\x85" => "\xE2\x80\xA6", "\x86" => "\xE2\x80\xA0", "\x87" => "\xE2\x80\xA1", "\x88" => "\xCB\x86", "\x89" => "\xE2\x80\xB0", "\x8A" => "\xC5\xA0", "\x8B" => "\xE2\x80\xB9", "\x8C" => "\xC5\x92", "\x8D" => "\xEF\xBF\xBD", "\x8E" => "\xC5\xBD", "\x8F" => "\xEF\xBF\xBD", "\x90" => "\xEF\xBF\xBD", "\x91" => "\xE2\x80\x98", "\x92" => "\xE2\x80\x99", "\x93" => "\xE2\x80\x9C", "\x94" => "\xE2\x80\x9D", "\x95" => "\xE2\x80\xA2", "\x96" => "\xE2\x80\x93", "\x97" => "\xE2\x80\x94", "\x98" => "\xCB\x9C", "\x99" => "\xE2\x84\xA2", "\x9A" => "\xC5\xA1", "\x9B" => "\xE2\x80\xBA", "\x9C" => "\xC5\x93", "\x9D" => "\xEF\xBF\xBD", "\x9E" => "\xC5\xBE", "\x9F" => "\xC5\xB8", "\xA0" => "\xC2\xA0", "\xA1" => "\xC2\xA1", "\xA2" => "\xC2\xA2", "\xA3" => "\xC2\xA3", "\xA4" => "\xC2\xA4", "\xA5" => "\xC2\xA5", "\xA6" => "\xC2\xA6", "\xA7" => "\xC2\xA7", "\xA8" => "\xC2\xA8", "\xA9" => "\xC2\xA9", "\xAA" => "\xC2\xAA", "\xAB" => "\xC2\xAB", "\xAC" => "\xC2\xAC", "\xAD" => "\xC2\xAD", "\xAE" => "\xC2\xAE", "\xAF" => "\xC2\xAF", "\xB0" => "\xC2\xB0", "\xB1" => "\xC2\xB1", "\xB2" => "\xC2\xB2", "\xB3" => "\xC2\xB3", "\xB4" => "\xC2\xB4", "\xB5" => "\xC2\xB5", "\xB6" => "\xC2\xB6", "\xB7" => "\xC2\xB7", "\xB8" => "\xC2\xB8", "\xB9" => "\xC2\xB9", "\xBA" => "\xC2\xBA", "\xBB" => "\xC2\xBB", "\xBC" => "\xC2\xBC", "\xBD" => "\xC2\xBD", "\xBE" => "\xC2\xBE", "\xBF" => "\xC2\xBF", "\xC0" => "\xC3\x80", "\xC1" => "\xC3\x81", "\xC2" => "\xC3\x82", "\xC3" => "\xC3\x83", "\xC4" => "\xC3\x84", "\xC5" => "\xC3\x85", "\xC6" => "\xC3\x86", "\xC7" => "\xC3\x87", "\xC8" => "\xC3\x88", "\xC9" => "\xC3\x89", "\xCA" => "\xC3\x8A", "\xCB" => "\xC3\x8B", "\xCC" => "\xC3\x8C", "\xCD" => "\xC3\x8D", "\xCE" => "\xC3\x8E", "\xCF" => "\xC3\x8F", "\xD0" => "\xC3\x90", "\xD1" => "\xC3\x91", "\xD2" => "\xC3\x92", "\xD3" => "\xC3\x93", "\xD4" => "\xC3\x94", "\xD5" => "\xC3\x95", "\xD6" => "\xC3\x96", "\xD7" => "\xC3\x97", "\xD8" => "\xC3\x98", "\xD9" => "\xC3\x99", "\xDA" => "\xC3\x9A", "\xDB" => "\xC3\x9B", "\xDC" => "\xC3\x9C", "\xDD" => "\xC3\x9D", "\xDE" => "\xC3\x9E", "\xDF" => "\xC3\x9F", "\xE0" => "\xC3\xA0", "\xE1" => "\xC3\xA1", "\xE2" => "\xC3\xA2", "\xE3" => "\xC3\xA3", "\xE4" => "\xC3\xA4", "\xE5" => "\xC3\xA5", "\xE6" => "\xC3\xA6", "\xE7" => "\xC3\xA7", "\xE8" => "\xC3\xA8", "\xE9" => "\xC3\xA9", "\xEA" => "\xC3\xAA", "\xEB" => "\xC3\xAB", "\xEC" => "\xC3\xAC", "\xED" => "\xC3\xAD", "\xEE" => "\xC3\xAE", "\xEF" => "\xC3\xAF", "\xF0" => "\xC3\xB0", "\xF1" => "\xC3\xB1", "\xF2" => "\xC3\xB2", "\xF3" => "\xC3\xB3", "\xF4" => "\xC3\xB4", "\xF5" => "\xC3\xB5", "\xF6" => "\xC3\xB6", "\xF7" => "\xC3\xB7", "\xF8" => "\xC3\xB8", "\xF9" => "\xC3\xB9", "\xFA" => "\xC3\xBA", "\xFB" => "\xC3\xBB", "\xFC" => "\xC3\xBC", "\xFD" => "\xC3\xBD", "\xFE" => "\xC3\xBE", "\xFF" => "\xC3\xBF");
-
-               return strtr($string, $convert_table);
-       }
-
-       /**
-        * Change a string from one encoding to another
-        *
-        * @param string $data Raw data in $input encoding
-        * @param string $input Encoding of $data
-        * @param string $output Encoding you want
-        * @return string|boolean False if we can't convert it
-        */
-       public static function change_encoding($data, $input, $output)
-       {
-               $input = SimplePie_Misc::encoding($input);
-               $output = SimplePie_Misc::encoding($output);
-
-               // We fail to fail on non US-ASCII bytes
-               if ($input === 'US-ASCII')
-               {
-                       static $non_ascii_octects = '';
-                       if (!$non_ascii_octects)
-                       {
-                               for ($i = 0x80; $i <= 0xFF; $i++)
-                               {
-                                       $non_ascii_octects .= chr($i);
-                               }
-                       }
-                       $data = substr($data, 0, strcspn($data, $non_ascii_octects));
-               }
-
-               // This is first, as behaviour of this is completely predictable
-               if ($input === 'windows-1252' && $output === 'UTF-8')
-               {
-                       return SimplePie_Misc::windows_1252_to_utf8($data);
-               }
-               // This is second, as behaviour of this varies only with PHP version (the middle part of this expression checks the encoding is supported).
-               elseif (function_exists('mb_convert_encoding') && ($return = SimplePie_Misc::change_encoding_mbstring($data, $input, $output)))
-               {
-                       return $return;
-               }
-               // This is last, as behaviour of this varies with OS userland and PHP version
-               elseif (function_exists('iconv') && ($return = SimplePie_Misc::change_encoding_iconv($data, $input, $output)))
-               {
-                       return $return;
-               }
-               // If we can't do anything, just fail
-               else
-               {
-                       return false;
-               }
-       }
-
-       protected static function change_encoding_mbstring($data, $input, $output)
-       {
-               if ($input === 'windows-949')
-               {
-                       $input = 'EUC-KR';
-               }
-               if ($output === 'windows-949')
-               {
-                       $output = 'EUC-KR';
-               }
-               if ($input === 'Windows-31J')
-               {
-                       $input = 'SJIS';
-               }
-               if ($output === 'Windows-31J')
-               {
-                       $output = 'SJIS';
-               }
-
-               // Check that the encoding is supported
-               if (@mb_convert_encoding("\x80", 'UTF-16BE', $input) === "\x00\x80")
-               {
-                       return false;
-               }
-               if (!in_array($input, mb_list_encodings()))
-               {
-                       return false;
-               }
-
-               // Let's do some conversion
-               if ($return = @mb_convert_encoding($data, $output, $input))
-               {
-                       return $return;
-               }
-
-               return false;
-       }
-
-       protected static function change_encoding_iconv($data, $input, $output)
-       {
-               return @iconv($input, $output, $data);
-       }
-
-       /**
-        * Normalize an encoding name
-        *
-        * This is automatically generated by create.php
-        *
-        * To generate it, run `php create.php` on the command line, and copy the
-        * output to replace this function.
-        *
-        * @param string $charset Character set to standardise
-        * @return string Standardised name
-        */
-       public static function encoding($charset)
-       {
-               // Normalization from UTS #22
-               switch (strtolower(preg_replace('/(?:[^a-zA-Z0-9]+|([^0-9])0+)/', '\1', $charset)))
-               {
-                       case 'adobestandardencoding':
-                       case 'csadobestandardencoding':
-                               return 'Adobe-Standard-Encoding';
-
-                       case 'adobesymbolencoding':
-                       case 'cshppsmath':
-                               return 'Adobe-Symbol-Encoding';
-
-                       case 'ami1251':
-                       case 'amiga1251':
-                               return 'Amiga-1251';
-
-                       case 'ansix31101983':
-                       case 'csat5001983':
-                       case 'csiso99naplps':
-                       case 'isoir99':
-                       case 'naplps':
-                               return 'ANSI_X3.110-1983';
-
-                       case 'arabic7':
-                       case 'asmo449':
-                       case 'csiso89asmo449':
-                       case 'iso9036':
-                       case 'isoir89':
-                               return 'ASMO_449';
-
-                       case 'big5':
-                       case 'csbig5':
-                               return 'Big5';
-
-                       case 'big5hkscs':
-                               return 'Big5-HKSCS';
-
-                       case 'bocu1':
-                       case 'csbocu1':
-                               return 'BOCU-1';
-
-                       case 'brf':
-                       case 'csbrf':
-                               return 'BRF';
-
-                       case 'bs4730':
-                       case 'csiso4unitedkingdom':
-                       case 'gb':
-                       case 'iso646gb':
-                       case 'isoir4':
-                       case 'uk':
-                               return 'BS_4730';
-
-                       case 'bsviewdata':
-                       case 'csiso47bsviewdata':
-                       case 'isoir47':
-                               return 'BS_viewdata';
-
-                       case 'cesu8':
-                       case 'cscesu8':
-                               return 'CESU-8';
-
-                       case 'ca':
-                       case 'csa71':
-                       case 'csaz243419851':
-                       case 'csiso121canadian1':
-                       case 'iso646ca':
-                       case 'isoir121':
-                               return 'CSA_Z243.4-1985-1';
-
-                       case 'csa72':
-                       case 'csaz243419852':
-                       case 'csiso122canadian2':
-                       case 'iso646ca2':
-                       case 'isoir122':
-                               return 'CSA_Z243.4-1985-2';
-
-                       case 'csaz24341985gr':
-                       case 'csiso123csaz24341985gr':
-                       case 'isoir123':
-                               return 'CSA_Z243.4-1985-gr';
-
-                       case 'csiso139csn369103':
-                       case 'csn369103':
-                       case 'isoir139':
-                               return 'CSN_369103';
-
-                       case 'csdecmcs':
-                       case 'dec':
-                       case 'decmcs':
-                               return 'DEC-MCS';
-
-                       case 'csiso21german':
-                       case 'de':
-                       case 'din66003':
-                       case 'iso646de':
-                       case 'isoir21':
-                               return 'DIN_66003';
-
-                       case 'csdkus':
-                       case 'dkus':
-                               return 'dk-us';
-
-                       case 'csiso646danish':
-                       case 'dk':
-                       case 'ds2089':
-                       case 'iso646dk':
-                               return 'DS_2089';
-
-                       case 'csibmebcdicatde':
-                       case 'ebcdicatde':
-                               return 'EBCDIC-AT-DE';
-
-                       case 'csebcdicatdea':
-                       case 'ebcdicatdea':
-                               return 'EBCDIC-AT-DE-A';
-
-                       case 'csebcdiccafr':
-                       case 'ebcdiccafr':
-                               return 'EBCDIC-CA-FR';
-
-                       case 'csebcdicdkno':
-                       case 'ebcdicdkno':
-                               return 'EBCDIC-DK-NO';
-
-                       case 'csebcdicdknoa':
-                       case 'ebcdicdknoa':
-                               return 'EBCDIC-DK-NO-A';
-
-                       case 'csebcdices':
-                       case 'ebcdices':
-                               return 'EBCDIC-ES';
-
-                       case 'csebcdicesa':
-                       case 'ebcdicesa':
-                               return 'EBCDIC-ES-A';
-
-                       case 'csebcdicess':
-                       case 'ebcdicess':
-                               return 'EBCDIC-ES-S';
-
-                       case 'csebcdicfise':
-                       case 'ebcdicfise':
-                               return 'EBCDIC-FI-SE';
-
-                       case 'csebcdicfisea':
-                       case 'ebcdicfisea':
-                               return 'EBCDIC-FI-SE-A';
-
-                       case 'csebcdicfr':
-                       case 'ebcdicfr':
-                               return 'EBCDIC-FR';
-
-                       case 'csebcdicit':
-                       case 'ebcdicit':
-                               return 'EBCDIC-IT';
-
-                       case 'csebcdicpt':
-                       case 'ebcdicpt':
-                               return 'EBCDIC-PT';
-
-                       case 'csebcdicuk':
-                       case 'ebcdicuk':
-                               return 'EBCDIC-UK';
-
-                       case 'csebcdicus':
-                       case 'ebcdicus':
-                               return 'EBCDIC-US';
-
-                       case 'csiso111ecmacyrillic':
-                       case 'ecmacyrillic':
-                       case 'isoir111':
-                       case 'koi8e':
-                               return 'ECMA-cyrillic';
-
-                       case 'csiso17spanish':
-                       case 'es':
-                       case 'iso646es':
-                       case 'isoir17':
-                               return 'ES';
-
-                       case 'csiso85spanish2':
-                       case 'es2':
-                       case 'iso646es2':
-                       case 'isoir85':
-                               return 'ES2';
-
-                       case 'cseucpkdfmtjapanese':
-                       case 'eucjp':
-                       case 'extendedunixcodepackedformatforjapanese':
-                               return 'EUC-JP';
-
-                       case 'cseucfixwidjapanese':
-                       case 'extendedunixcodefixedwidthforjapanese':
-                               return 'Extended_UNIX_Code_Fixed_Width_for_Japanese';
-
-                       case 'gb18030':
-                               return 'GB18030';
-
-                       case 'chinese':
-                       case 'cp936':
-                       case 'csgb2312':
-                       case 'csiso58gb231280':
-                       case 'gb2312':
-                       case 'gb231280':
-                       case 'gbk':
-                       case 'isoir58':
-                       case 'ms936':
-                       case 'windows936':
-                               return 'GBK';
-
-                       case 'cn':
-                       case 'csiso57gb1988':
-                       case 'gb198880':
-                       case 'iso646cn':
-                       case 'isoir57':
-                               return 'GB_1988-80';
-
-                       case 'csiso153gost1976874':
-                       case 'gost1976874':
-                       case 'isoir153':
-                       case 'stsev35888':
-                               return 'GOST_19768-74';
-
-                       case 'csiso150':
-                       case 'csiso150greekccitt':
-                       case 'greekccitt':
-                       case 'isoir150':
-                               return 'greek-ccitt';
-
-                       case 'csiso88greek7':
-                       case 'greek7':
-                       case 'isoir88':
-                               return 'greek7';
-
-                       case 'csiso18greek7old':
-                       case 'greek7old':
-                       case 'isoir18':
-                               return 'greek7-old';
-
-                       case 'cshpdesktop':
-                       case 'hpdesktop':
-                               return 'HP-DeskTop';
-
-                       case 'cshplegal':
-                       case 'hplegal':
-                               return 'HP-Legal';
-
-                       case 'cshpmath8':
-                       case 'hpmath8':
-                               return 'HP-Math8';
-
-                       case 'cshppifont':
-                       case 'hppifont':
-                               return 'HP-Pi-font';
-
-                       case 'cshproman8':
-                       case 'hproman8':
-                       case 'r8':
-                       case 'roman8':
-                               return 'hp-roman8';
-
-                       case 'hzgb2312':
-                               return 'HZ-GB-2312';
-
-                       case 'csibmsymbols':
-                       case 'ibmsymbols':
-                               return 'IBM-Symbols';
-
-                       case 'csibmthai':
-                       case 'ibmthai':
-                               return 'IBM-Thai';
-
-                       case 'cp37':
-                       case 'csibm37':
-                       case 'ebcdiccpca':
-                       case 'ebcdiccpnl':
-                       case 'ebcdiccpus':
-                       case 'ebcdiccpwt':
-                       case 'ibm37':
-                               return 'IBM037';
-
-                       case 'cp38':
-                       case 'csibm38':
-                       case 'ebcdicint':
-                       case 'ibm38':
-                               return 'IBM038';
-
-                       case 'cp273':
-                       case 'csibm273':
-                       case 'ibm273':
-                               return 'IBM273';
-
-                       case 'cp274':
-                       case 'csibm274':
-                       case 'ebcdicbe':
-                       case 'ibm274':
-                               return 'IBM274';
-
-                       case 'cp275':
-                       case 'csibm275':
-                       case 'ebcdicbr':
-                       case 'ibm275':
-                               return 'IBM275';
-
-                       case 'csibm277':
-                       case 'ebcdiccpdk':
-                       case 'ebcdiccpno':
-                       case 'ibm277':
-                               return 'IBM277';
-
-                       case 'cp278':
-                       case 'csibm278':
-                       case 'ebcdiccpfi':
-                       case 'ebcdiccpse':
-                       case 'ibm278':
-                               return 'IBM278';
-
-                       case 'cp280':
-                       case 'csibm280':
-                       case 'ebcdiccpit':
-                       case 'ibm280':
-                               return 'IBM280';
-
-                       case 'cp281':
-                       case 'csibm281':
-                       case 'ebcdicjpe':
-                       case 'ibm281':
-                               return 'IBM281';
-
-                       case 'cp284':
-                       case 'csibm284':
-                       case 'ebcdiccpes':
-                       case 'ibm284':
-                               return 'IBM284';
-
-                       case 'cp285':
-                       case 'csibm285':
-                       case 'ebcdiccpgb':
-                       case 'ibm285':
-                               return 'IBM285';
-
-                       case 'cp290':
-                       case 'csibm290':
-                       case 'ebcdicjpkana':
-                       case 'ibm290':
-                               return 'IBM290';
-
-                       case 'cp297':
-                       case 'csibm297':
-                       case 'ebcdiccpfr':
-                       case 'ibm297':
-                               return 'IBM297';
-
-                       case 'cp420':
-                       case 'csibm420':
-                       case 'ebcdiccpar1':
-                       case 'ibm420':
-                               return 'IBM420';
-
-                       case 'cp423':
-                       case 'csibm423':
-                       case 'ebcdiccpgr':
-                       case 'ibm423':
-                               return 'IBM423';
-
-                       case 'cp424':
-                       case 'csibm424':
-                       case 'ebcdiccphe':
-                       case 'ibm424':
-                               return 'IBM424';
-
-                       case '437':
-                       case 'cp437':
-                       case 'cspc8codepage437':
-                       case 'ibm437':
-                               return 'IBM437';
-
-                       case 'cp500':
-                       case 'csibm500':
-                       case 'ebcdiccpbe':
-                       case 'ebcdiccpch':
-                       case 'ibm500':
-                               return 'IBM500';
-
-                       case 'cp775':
-                       case 'cspc775baltic':
-                       case 'ibm775':
-                               return 'IBM775';
-
-                       case '850':
-                       case 'cp850':
-                       case 'cspc850multilingual':
-                       case 'ibm850':
-                               return 'IBM850';
-
-                       case '851':
-                       case 'cp851':
-                       case 'csibm851':
-                       case 'ibm851':
-                               return 'IBM851';
-
-                       case '852':
-                       case 'cp852':
-                       case 'cspcp852':
-                       case 'ibm852':
-                               return 'IBM852';
-
-                       case '855':
-                       case 'cp855':
-                       case 'csibm855':
-                       case 'ibm855':
-                               return 'IBM855';
-
-                       case '857':
-                       case 'cp857':
-                       case 'csibm857':
-                       case 'ibm857':
-                               return 'IBM857';
-
-                       case 'ccsid858':
-                       case 'cp858':
-                       case 'ibm858':
-                       case 'pcmultilingual850euro':
-                               return 'IBM00858';
-
-                       case '860':
-                       case 'cp860':
-                       case 'csibm860':
-                       case 'ibm860':
-                               return 'IBM860';
-
-                       case '861':
-                       case 'cp861':
-                       case 'cpis':
-                       case 'csibm861':
-                       case 'ibm861':
-                               return 'IBM861';
-
-                       case '862':
-                       case 'cp862':
-                       case 'cspc862latinhebrew':
-                       case 'ibm862':
-                               return 'IBM862';
-
-                       case '863':
-                       case 'cp863':
-                       case 'csibm863':
-                       case 'ibm863':
-                               return 'IBM863';
-
-                       case 'cp864':
-                       case 'csibm864':
-                       case 'ibm864':
-                               return 'IBM864';
-
-                       case '865':
-                       case 'cp865':
-                       case 'csibm865':
-                       case 'ibm865':
-                               return 'IBM865';
-
-                       case '866':
-                       case 'cp866':
-                       case 'csibm866':
-                       case 'ibm866':
-                               return 'IBM866';
-
-                       case 'cp868':
-                       case 'cpar':
-                       case 'csibm868':
-                       case 'ibm868':
-                               return 'IBM868';
-
-                       case '869':
-                       case 'cp869':
-                       case 'cpgr':
-                       case 'csibm869':
-                       case 'ibm869':
-                               return 'IBM869';
-
-                       case 'cp870':
-                       case 'csibm870':
-                       case 'ebcdiccproece':
-                       case 'ebcdiccpyu':
-                       case 'ibm870':
-                               return 'IBM870';
-
-                       case 'cp871':
-                       case 'csibm871':
-                       case 'ebcdiccpis':
-                       case 'ibm871':
-                               return 'IBM871';
-
-                       case 'cp880':
-                       case 'csibm880':
-                       case 'ebcdiccyrillic':
-                       case 'ibm880':
-                               return 'IBM880';
-
-                       case 'cp891':
-                       case 'csibm891':
-                       case 'ibm891':
-                               return 'IBM891';
-
-                       case 'cp903':
-                       case 'csibm903':
-                       case 'ibm903':
-                               return 'IBM903';
-
-                       case '904':
-                       case 'cp904':
-                       case 'csibbm904':
-                       case 'ibm904':
-                               return 'IBM904';
-
-                       case 'cp905':
-                       case 'csibm905':
-                       case 'ebcdiccptr':
-                       case 'ibm905':
-                               return 'IBM905';
-
-                       case 'cp918':
-                       case 'csibm918':
-                       case 'ebcdiccpar2':
-                       case 'ibm918':
-                               return 'IBM918';
-
-                       case 'ccsid924':
-                       case 'cp924':
-                       case 'ebcdiclatin9euro':
-                       case 'ibm924':
-                               return 'IBM00924';
-
-                       case 'cp1026':
-                       case 'csibm1026':
-                       case 'ibm1026':
-                               return 'IBM1026';
-
-                       case 'ibm1047':
-                               return 'IBM1047';
-
-                       case 'ccsid1140':
-                       case 'cp1140':
-                       case 'ebcdicus37euro':
-                       case 'ibm1140':
-                               return 'IBM01140';
-
-                       case 'ccsid1141':
-                       case 'cp1141':
-                       case 'ebcdicde273euro':
-                       case 'ibm1141':
-                               return 'IBM01141';
-
-                       case 'ccsid1142':
-                       case 'cp1142':
-                       case 'ebcdicdk277euro':
-                       case 'ebcdicno277euro':
-                       case 'ibm1142':
-                               return 'IBM01142';
-
-                       case 'ccsid1143':
-                       case 'cp1143':
-                       case 'ebcdicfi278euro':
-                       case 'ebcdicse278euro':
-                       case 'ibm1143':
-                               return 'IBM01143';
-
-                       case 'ccsid1144':
-                       case 'cp1144':
-                       case 'ebcdicit280euro':
-                       case 'ibm1144':
-                               return 'IBM01144';
-
-                       case 'ccsid1145':
-                       case 'cp1145':
-                       case 'ebcdices284euro':
-                       case 'ibm1145':
-                               return 'IBM01145';
-
-                       case 'ccsid1146':
-                       case 'cp1146':
-                       case 'ebcdicgb285euro':
-                       case 'ibm1146':
-                               return 'IBM01146';
-
-                       case 'ccsid1147':
-                       case 'cp1147':
-                       case 'ebcdicfr297euro':
-                       case 'ibm1147':
-                               return 'IBM01147';
-
-                       case 'ccsid1148':
-                       case 'cp1148':
-                       case 'ebcdicinternational500euro':
-                       case 'ibm1148':
-                               return 'IBM01148';
-
-                       case 'ccsid1149':
-                       case 'cp1149':
-                       case 'ebcdicis871euro':
-                       case 'ibm1149':
-                               return 'IBM01149';
-
-                       case 'csiso143iecp271':
-                       case 'iecp271':
-                       case 'isoir143':
-                               return 'IEC_P27-1';
-
-                       case 'csiso49inis':
-                       case 'inis':
-                       case 'isoir49':
-                               return 'INIS';
-
-                       case 'csiso50inis8':
-                       case 'inis8':
-                       case 'isoir50':
-                               return 'INIS-8';
-
-                       case 'csiso51iniscyrillic':
-                       case 'iniscyrillic':
-                       case 'isoir51':
-                               return 'INIS-cyrillic';
-
-                       case 'csinvariant':
-                       case 'invariant':
-                               return 'INVARIANT';
-
-                       case 'iso2022cn':
-                               return 'ISO-2022-CN';
-
-                       case 'iso2022cnext':
-                               return 'ISO-2022-CN-EXT';
-
-                       case 'csiso2022jp':
-                       case 'iso2022jp':
-                               return 'ISO-2022-JP';
-
-                       case 'csiso2022jp2':
-                       case 'iso2022jp2':
-                               return 'ISO-2022-JP-2';
-
-                       case 'csiso2022kr':
-                       case 'iso2022kr':
-                               return 'ISO-2022-KR';
-
-                       case 'cswindows30latin1':
-                       case 'iso88591windows30latin1':
-                               return 'ISO-8859-1-Windows-3.0-Latin-1';
-
-                       case 'cswindows31latin1':
-                       case 'iso88591windows31latin1':
-                               return 'ISO-8859-1-Windows-3.1-Latin-1';
-
-                       case 'csisolatin2':
-                       case 'iso88592':
-                       case 'iso885921987':
-                       case 'isoir101':
-                       case 'l2':
-                       case 'latin2':
-                               return 'ISO-8859-2';
-
-                       case 'cswindows31latin2':
-                       case 'iso88592windowslatin2':
-                               return 'ISO-8859-2-Windows-Latin-2';
-
-                       case 'csisolatin3':
-                       case 'iso88593':
-                       case 'iso885931988':
-                       case 'isoir109':
-                       case 'l3':
-                       case 'latin3':
-                               return 'ISO-8859-3';
-
-                       case 'csisolatin4':
-                       case 'iso88594':
-                       case 'iso885941988':
-                       case 'isoir110':
-                       case 'l4':
-                       case 'latin4':
-                               return 'ISO-8859-4';
-
-                       case 'csisolatincyrillic':
-                       case 'cyrillic':
-                       case 'iso88595':
-                       case 'iso885951988':
-                       case 'isoir144':
-                               return 'ISO-8859-5';
-
-                       case 'arabic':
-                       case 'asmo708':
-                       case 'csisolatinarabic':
-                       case 'ecma114':
-                       case 'iso88596':
-                       case 'iso885961987':
-                       case 'isoir127':
-                               return 'ISO-8859-6';
-
-                       case 'csiso88596e':
-                       case 'iso88596e':
-                               return 'ISO-8859-6-E';
-
-                       case 'csiso88596i':
-                       case 'iso88596i':
-                               return 'ISO-8859-6-I';
-
-                       case 'csisolatingreek':
-                       case 'ecma118':
-                       case 'elot928':
-                       case 'greek':
-                       case 'greek8':
-                       case 'iso88597':
-                       case 'iso885971987':
-                       case 'isoir126':
-                               return 'ISO-8859-7';
-
-                       case 'csisolatinhebrew':
-                       case 'hebrew':
-                       case 'iso88598':
-                       case 'iso885981988':
-                       case 'isoir138':
-                               return 'ISO-8859-8';
-
-                       case 'csiso88598e':
-                       case 'iso88598e':
-                               return 'ISO-8859-8-E';
-
-                       case 'csiso88598i':
-                       case 'iso88598i':
-                               return 'ISO-8859-8-I';
-
-                       case 'cswindows31latin5':
-                       case 'iso88599windowslatin5':
-                               return 'ISO-8859-9-Windows-Latin-5';
-
-                       case 'csisolatin6':
-                       case 'iso885910':
-                       case 'iso8859101992':
-                       case 'isoir157':
-                       case 'l6':
-                       case 'latin6':
-                               return 'ISO-8859-10';
-
-                       case 'iso885913':
-                               return 'ISO-8859-13';
-
-                       case 'iso885914':
-                       case 'iso8859141998':
-                       case 'isoceltic':
-                       case 'isoir199':
-                       case 'l8':
-                       case 'latin8':
-                               return 'ISO-8859-14';
-
-                       case 'iso885915':
-                       case 'latin9':
-                               return 'ISO-8859-15';
-
-                       case 'iso885916':
-                       case 'iso8859162001':
-                       case 'isoir226':
-                       case 'l10':
-                       case 'latin10':
-                               return 'ISO-8859-16';
-
-                       case 'iso10646j1':
-                               return 'ISO-10646-J-1';
-
-                       case 'csunicode':
-                       case 'iso10646ucs2':
-                               return 'ISO-10646-UCS-2';
-
-                       case 'csucs4':
-                       case 'iso10646ucs4':
-                               return 'ISO-10646-UCS-4';
-
-                       case 'csunicodeascii':
-                       case 'iso10646ucsbasic':
-                               return 'ISO-10646-UCS-Basic';
-
-                       case 'csunicodelatin1':
-                       case 'iso10646':
-                       case 'iso10646unicodelatin1':
-                               return 'ISO-10646-Unicode-Latin1';
-
-                       case 'csiso10646utf1':
-                       case 'iso10646utf1':
-                               return 'ISO-10646-UTF-1';
-
-                       case 'csiso115481':
-                       case 'iso115481':
-                       case 'isotr115481':
-                               return 'ISO-11548-1';
-
-                       case 'csiso90':
-                       case 'isoir90':
-                               return 'iso-ir-90';
-
-                       case 'csunicodeibm1261':
-                       case 'isounicodeibm1261':
-                               return 'ISO-Unicode-IBM-1261';
-
-                       case 'csunicodeibm1264':
-                       case 'isounicodeibm1264':
-                               return 'ISO-Unicode-IBM-1264';
-
-                       case 'csunicodeibm1265':
-                       case 'isounicodeibm1265':
-                               return 'ISO-Unicode-IBM-1265';
-
-                       case 'csunicodeibm1268':
-                       case 'isounicodeibm1268':
-                               return 'ISO-Unicode-IBM-1268';
-
-                       case 'csunicodeibm1276':
-                       case 'isounicodeibm1276':
-                               return 'ISO-Unicode-IBM-1276';
-
-                       case 'csiso646basic1983':
-                       case 'iso646basic1983':
-                       case 'ref':
-                               return 'ISO_646.basic:1983';
-
-                       case 'csiso2intlrefversion':
-                       case 'irv':
-                       case 'iso646irv1983':
-                       case 'isoir2':
-                               return 'ISO_646.irv:1983';
-
-                       case 'csiso2033':
-                       case 'e13b':
-                       case 'iso20331983':
-                       case 'isoir98':
-                               return 'ISO_2033-1983';
-
-                       case 'csiso5427cyrillic':
-                       case 'iso5427':
-                       case 'isoir37':
-                               return 'ISO_5427';
-
-                       case 'iso5427cyrillic1981':
-                       case 'iso54271981':
-                       case 'isoir54':
-                               return 'ISO_5427:1981';
-
-                       case 'csiso5428greek':
-                       case 'iso54281980':
-                       case 'isoir55':
-                               return 'ISO_5428:1980';
-
-                       case 'csiso6937add':
-                       case 'iso6937225':
-                       case 'isoir152':
-                               return 'ISO_6937-2-25';
-
-                       case 'csisotextcomm':
-                       case 'iso69372add':
-                       case 'isoir142':
-                               return 'ISO_6937-2-add';
-
-                       case 'csiso8859supp':
-                       case 'iso8859supp':
-                       case 'isoir154':
-                       case 'latin125':
-                               return 'ISO_8859-supp';
-
-                       case 'csiso10367box':
-                       case 'iso10367box':
-                       case 'isoir155':
-                               return 'ISO_10367-box';
-
-                       case 'csiso15italian':
-                       case 'iso646it':
-                       case 'isoir15':
-                       case 'it':
-                               return 'IT';
-
-                       case 'csiso13jisc6220jp':
-                       case 'isoir13':
-                       case 'jisc62201969':
-                       case 'jisc62201969jp':
-                       case 'katakana':
-                       case 'x2017':
-                               return 'JIS_C6220-1969-jp';
-
-                       case 'csiso14jisc6220ro':
-                       case 'iso646jp':
-                       case 'isoir14':
-                       case 'jisc62201969ro':
-                       case 'jp':
-                               return 'JIS_C6220-1969-ro';
-
-                       case 'csiso42jisc62261978':
-                       case 'isoir42':
-                       case 'jisc62261978':
-                               return 'JIS_C6226-1978';
-
-                       case 'csiso87jisx208':
-                       case 'isoir87':
-                       case 'jisc62261983':
-                       case 'jisx2081983':
-                       case 'x208':
-                               return 'JIS_C6226-1983';
-
-                       case 'csiso91jisc62291984a':
-                       case 'isoir91':
-                       case 'jisc62291984a':
-                       case 'jpocra':
-                               return 'JIS_C6229-1984-a';
-
-                       case 'csiso92jisc62991984b':
-                       case 'iso646jpocrb':
-                       case 'isoir92':
-                       case 'jisc62291984b':
-                       case 'jpocrb':
-                               return 'JIS_C6229-1984-b';
-
-                       case 'csiso93jis62291984badd':
-                       case 'isoir93':
-                       case 'jisc62291984badd':
-                       case 'jpocrbadd':
-                               return 'JIS_C6229-1984-b-add';
-
-                       case 'csiso94jis62291984hand':
-                       case 'isoir94':
-                       case 'jisc62291984hand':
-                       case 'jpocrhand':
-                               return 'JIS_C6229-1984-hand';
-
-                       case 'csiso95jis62291984handadd':
-                       case 'isoir95':
-                       case 'jisc62291984handadd':
-                       case 'jpocrhandadd':
-                               return 'JIS_C6229-1984-hand-add';
-
-                       case 'csiso96jisc62291984kana':
-                       case 'isoir96':
-                       case 'jisc62291984kana':
-                               return 'JIS_C6229-1984-kana';
-
-                       case 'csjisencoding':
-                       case 'jisencoding':
-                               return 'JIS_Encoding';
-
-                       case 'cshalfwidthkatakana':
-                       case 'jisx201':
-                       case 'x201':
-                               return 'JIS_X0201';
-
-                       case 'csiso159jisx2121990':
-                       case 'isoir159':
-                       case 'jisx2121990':
-                       case 'x212':
-                               return 'JIS_X0212-1990';
-
-                       case 'csiso141jusib1002':
-                       case 'iso646yu':
-                       case 'isoir141':
-                       case 'js':
-                       case 'jusib1002':
-                       case 'yu':
-                               return 'JUS_I.B1.002';
-
-                       case 'csiso147macedonian':
-                       case 'isoir147':
-                       case 'jusib1003mac':
-                       case 'macedonian':
-                               return 'JUS_I.B1.003-mac';
-
-                       case 'csiso146serbian':
-                       case 'isoir146':
-                       case 'jusib1003serb':
-                       case 'serbian':
-                               return 'JUS_I.B1.003-serb';
-
-                       case 'koi7switched':
-                               return 'KOI7-switched';
-
-                       case 'cskoi8r':
-                       case 'koi8r':
-                               return 'KOI8-R';
-
-                       case 'koi8u':
-                               return 'KOI8-U';
-
-                       case 'csksc5636':
-                       case 'iso646kr':
-                       case 'ksc5636':
-                               return 'KSC5636';
-
-                       case 'cskz1048':
-                       case 'kz1048':
-                       case 'rk1048':
-                       case 'strk10482002':
-                               return 'KZ-1048';
-
-                       case 'csiso19latingreek':
-                       case 'isoir19':
-                       case 'latingreek':
-                               return 'latin-greek';
-
-                       case 'csiso27latingreek1':
-                       case 'isoir27':
-                       case 'latingreek1':
-                               return 'Latin-greek-1';
-
-                       case 'csiso158lap':
-                       case 'isoir158':
-                       case 'lap':
-                       case 'latinlap':
-                               return 'latin-lap';
-
-                       case 'csmacintosh':
-                       case 'mac':
-                       case 'macintosh':
-                               return 'macintosh';
-
-                       case 'csmicrosoftpublishing':
-                       case 'microsoftpublishing':
-                               return 'Microsoft-Publishing';
-
-                       case 'csmnem':
-                       case 'mnem':
-                               return 'MNEM';
-
-                       case 'csmnemonic':
-                       case 'mnemonic':
-                               return 'MNEMONIC';
-
-                       case 'csiso86hungarian':
-                       case 'hu':
-                       case 'iso646hu':
-                       case 'isoir86':
-                       case 'msz77953':
-                               return 'MSZ_7795.3';
-
-                       case 'csnatsdano':
-                       case 'isoir91':
-                       case 'natsdano':
-                               return 'NATS-DANO';
-
-                       case 'csnatsdanoadd':
-                       case 'isoir92':
-                       case 'natsdanoadd':
-                               return 'NATS-DANO-ADD';
-
-                       case 'csnatssefi':
-                       case 'isoir81':
-                       case 'natssefi':
-                               return 'NATS-SEFI';
-
-                       case 'csnatssefiadd':
-                       case 'isoir82':
-                       case 'natssefiadd':
-                               return 'NATS-SEFI-ADD';
-
-                       case 'csiso151cuba':
-                       case 'cuba':
-                       case 'iso646cu':
-                       case 'isoir151':
-                       case 'ncnc1081':
-                               return 'NC_NC00-10:81';
-
-                       case 'csiso69french':
-                       case 'fr':
-                       case 'iso646fr':
-                       case 'isoir69':
-                       case 'nfz62010':
-                               return 'NF_Z_62-010';
-
-                       case 'csiso25french':
-                       case 'iso646fr1':
-                       case 'isoir25':
-                       case 'nfz620101973':
-                               return 'NF_Z_62-010_(1973)';
-
-                       case 'csiso60danishnorwegian':
-                       case 'csiso60norwegian1':
-                       case 'iso646no':
-                       case 'isoir60':
-                       case 'no':
-                       case 'ns45511':
-                               return 'NS_4551-1';
-
-                       case 'csiso61norwegian2':
-                       case 'iso646no2':
-                       case 'isoir61':
-                       case 'no2':
-                       case 'ns45512':
-                               return 'NS_4551-2';
-
-                       case 'osdebcdicdf3irv':
-                               return 'OSD_EBCDIC_DF03_IRV';
-
-                       case 'osdebcdicdf41':
-                               return 'OSD_EBCDIC_DF04_1';
-
-                       case 'osdebcdicdf415':
-                               return 'OSD_EBCDIC_DF04_15';
-
-                       case 'cspc8danishnorwegian':
-                       case 'pc8danishnorwegian':
-                               return 'PC8-Danish-Norwegian';
-
-                       case 'cspc8turkish':
-                       case 'pc8turkish':
-                               return 'PC8-Turkish';
-
-                       case 'csiso16portuguese':
-                       case 'iso646pt':
-                       case 'isoir16':
-                       case 'pt':
-                               return 'PT';
-
-                       case 'csiso84portuguese2':
-                       case 'iso646pt2':
-                       case 'isoir84':
-                       case 'pt2':
-                               return 'PT2';
-
-                       case 'cp154':
-                       case 'csptcp154':
-                       case 'cyrillicasian':
-                       case 'pt154':
-                       case 'ptcp154':
-                               return 'PTCP154';
-
-                       case 'scsu':
-                               return 'SCSU';
-
-                       case 'csiso10swedish':
-                       case 'fi':
-                       case 'iso646fi':
-                       case 'iso646se':
-                       case 'isoir10':
-                       case 'se':
-                       case 'sen850200b':
-                               return 'SEN_850200_B';
-
-                       case 'csiso11swedishfornames':
-                       case 'iso646se2':
-                       case 'isoir11':
-                       case 'se2':
-                       case 'sen850200c':
-                               return 'SEN_850200_C';
-
-                       case 'csiso102t617bit':
-                       case 'isoir102':
-                       case 't617bit':
-                               return 'T.61-7bit';
-
-                       case 'csiso103t618bit':
-                       case 'isoir103':
-                       case 't61':
-                       case 't618bit':
-                               return 'T.61-8bit';
-
-                       case 'csiso128t101g2':
-                       case 'isoir128':
-                       case 't101g2':
-                               return 'T.101-G2';
-
-                       case 'cstscii':
-                       case 'tscii':
-                               return 'TSCII';
-
-                       case 'csunicode11':
-                       case 'unicode11':
-                               return 'UNICODE-1-1';
-
-                       case 'csunicode11utf7':
-                       case 'unicode11utf7':
-                               return 'UNICODE-1-1-UTF-7';
-
-                       case 'csunknown8bit':
-                       case 'unknown8bit':
-                               return 'UNKNOWN-8BIT';
-
-                       case 'ansix341968':
-                       case 'ansix341986':
-                       case 'ascii':
-                       case 'cp367':
-                       case 'csascii':
-                       case 'ibm367':
-                       case 'iso646irv1991':
-                       case 'iso646us':
-                       case 'isoir6':
-                       case 'us':
-                       case 'usascii':
-                               return 'US-ASCII';
-
-                       case 'csusdk':
-                       case 'usdk':
-                               return 'us-dk';
-
-                       case 'utf7':
-                               return 'UTF-7';
-
-                       case 'utf8':
-                               return 'UTF-8';
-
-                       case 'utf16':
-                               return 'UTF-16';
-
-                       case 'utf16be':
-                               return 'UTF-16BE';
-
-                       case 'utf16le':
-                               return 'UTF-16LE';
-
-                       case 'utf32':
-                               return 'UTF-32';
-
-                       case 'utf32be':
-                               return 'UTF-32BE';
-
-                       case 'utf32le':
-                               return 'UTF-32LE';
-
-                       case 'csventurainternational':
-                       case 'venturainternational':
-                               return 'Ventura-International';
-
-                       case 'csventuramath':
-                       case 'venturamath':
-                               return 'Ventura-Math';
-
-                       case 'csventuraus':
-                       case 'venturaus':
-                               return 'Ventura-US';
-
-                       case 'csiso70videotexsupp1':
-                       case 'isoir70':
-                       case 'videotexsuppl':
-                               return 'videotex-suppl';
-
-                       case 'csviqr':
-                       case 'viqr':
-                               return 'VIQR';
-
-                       case 'csviscii':
-                       case 'viscii':
-                               return 'VISCII';
-
-                       case 'csshiftjis':
-                       case 'cswindows31j':
-                       case 'mskanji':
-                       case 'shiftjis':
-                       case 'windows31j':
-                               return 'Windows-31J';
-
-                       case 'iso885911':
-                       case 'tis620':
-                               return 'windows-874';
-
-                       case 'cseuckr':
-                       case 'csksc56011987':
-                       case 'euckr':
-                       case 'isoir149':
-                       case 'korean':
-                       case 'ksc5601':
-                       case 'ksc56011987':
-                       case 'ksc56011989':
-                       case 'windows949':
-                               return 'windows-949';
-
-                       case 'windows1250':
-                               return 'windows-1250';
-
-                       case 'windows1251':
-                               return 'windows-1251';
-
-                       case 'cp819':
-                       case 'csisolatin1':
-                       case 'ibm819':
-                       case 'iso88591':
-                       case 'iso885911987':
-                       case 'isoir100':
-                       case 'l1':
-                       case 'latin1':
-                       case 'windows1252':
-                               return 'windows-1252';
-
-                       case 'windows1253':
-                               return 'windows-1253';
-
-                       case 'csisolatin5':
-                       case 'iso88599':
-                       case 'iso885991989':
-                       case 'isoir148':
-                       case 'l5':
-                       case 'latin5':
-                       case 'windows1254':
-                               return 'windows-1254';
-
-                       case 'windows1255':
-                               return 'windows-1255';
-
-                       case 'windows1256':
-                               return 'windows-1256';
-
-                       case 'windows1257':
-                               return 'windows-1257';
-
-                       case 'windows1258':
-                               return 'windows-1258';
-
-                       default:
-                               return $charset;
-               }
-       }
-
-       public static function get_curl_version()
-       {
-               if (is_array($curl = curl_version()))
-               {
-                       $curl = $curl['version'];
-               }
-               elseif (substr($curl, 0, 5) === 'curl/')
-               {
-                       $curl = substr($curl, 5, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 5));
-               }
-               elseif (substr($curl, 0, 8) === 'libcurl/')
-               {
-                       $curl = substr($curl, 8, strcspn($curl, "\x09\x0A\x0B\x0C\x0D", 8));
-               }
-               else
-               {
-                       $curl = 0;
-               }
-               return $curl;
-       }
-
-       /**
-        * Strip HTML comments
-        *
-        * @param string $data Data to strip comments from
-        * @return string Comment stripped string
-        */
-       public static function strip_comments($data)
-       {
-               $output = '';
-               while (($start = strpos($data, '<!--')) !== false)
-               {
-                       $output .= substr($data, 0, $start);
-                       if (($end = strpos($data, '-->', $start)) !== false)
-                       {
-                               $data = substr_replace($data, '', 0, $end + 3);
-                       }
-                       else
-                       {
-                               $data = '';
-                       }
-               }
-               return $output . $data;
-       }
-
-       public static function parse_date($dt)
-       {
-               $parser = SimplePie_Parse_Date::get();
-               return $parser->parse($dt);
-       }
-
-       /**
-        * Decode HTML entities
-        *
-        * @deprecated Use DOMDocument instead
-        * @param string $data Input data
-        * @return string Output data
-        */
-       public static function entities_decode($data)
-       {
-               $decoder = new SimplePie_Decode_HTML_Entities($data);
-               return $decoder->parse();
-       }
-
-       /**
-        * Remove RFC822 comments
-        *
-        * @param string $data Data to strip comments from
-        * @return string Comment stripped string
-        */
-       public static function uncomment_rfc822($string)
-       {
-               $string = (string) $string;
-               $position = 0;
-               $length = strlen($string);
-               $depth = 0;
-
-               $output = '';
-
-               while ($position < $length && ($pos = strpos($string, '(', $position)) !== false)
-               {
-                       $output .= substr($string, $position, $pos - $position);
-                       $position = $pos + 1;
-                       if ($string[$pos - 1] !== '\\')
-                       {
-                               $depth++;
-                               while ($depth && $position < $length)
-                               {
-                                       $position += strcspn($string, '()', $position);
-                                       if ($string[$position - 1] === '\\')
-                                       {
-                                               $position++;
-                                               continue;
-                                       }
-                                       elseif (isset($string[$position]))
-                                       {
-                                               switch ($string[$position])
-                                               {
-                                                       case '(':
-                                                               $depth++;
-                                                               break;
-
-                                                       case ')':
-                                                               $depth--;
-                                                               break;
-                                               }
-                                               $position++;
-                                       }
-                                       else
-                                       {
-                                               break;
-                                       }
-                               }
-                       }
-                       else
-                       {
-                               $output .= '(';
-                       }
-               }
-               $output .= substr($string, $position);
-
-               return $output;
-       }
-
-       public static function parse_mime($mime)
-       {
-               if (($pos = strpos($mime, ';')) === false)
-               {
-                       return trim($mime);
-               }
-               else
-               {
-                       return trim(substr($mime, 0, $pos));
-               }
-       }
-
-       public static function atom_03_construct_type($attribs)
-       {
-               if (isset($attribs['']['mode']) && strtolower(trim($attribs['']['mode']) === 'base64'))
-               {
-                       $mode = SIMPLEPIE_CONSTRUCT_BASE64;
-               }
-               else
-               {
-                       $mode = SIMPLEPIE_CONSTRUCT_NONE;
-               }
-               if (isset($attribs['']['type']))
-               {
-                       switch (strtolower(trim($attribs['']['type'])))
-                       {
-                               case 'text':
-                               case 'text/plain':
-                                       return SIMPLEPIE_CONSTRUCT_TEXT | $mode;
-
-                               case 'html':
-                               case 'text/html':
-                                       return SIMPLEPIE_CONSTRUCT_HTML | $mode;
-
-                               case 'xhtml':
-                               case 'application/xhtml+xml':
-                                       return SIMPLEPIE_CONSTRUCT_XHTML | $mode;
-
-                               default:
-                                       return SIMPLEPIE_CONSTRUCT_NONE | $mode;
-                       }
-               }
-               else
-               {
-                       return SIMPLEPIE_CONSTRUCT_TEXT | $mode;
-               }
-       }
-
-       public static function atom_10_construct_type($attribs)
-       {
-               if (isset($attribs['']['type']))
-               {
-                       switch (strtolower(trim($attribs['']['type'])))
-                       {
-                               case 'text':
-                                       return SIMPLEPIE_CONSTRUCT_TEXT;
-
-                               case 'html':
-                                       return SIMPLEPIE_CONSTRUCT_HTML;
-
-                               case 'xhtml':
-                                       return SIMPLEPIE_CONSTRUCT_XHTML;
-
-                               default:
-                                       return SIMPLEPIE_CONSTRUCT_NONE;
-                       }
-               }
-               return SIMPLEPIE_CONSTRUCT_TEXT;
-       }
-
-       public static function atom_10_content_construct_type($attribs)
-       {
-               if (isset($attribs['']['type']))
-               {
-                       $type = strtolower(trim($attribs['']['type']));
-                       switch ($type)
-                       {
-                               case 'text':
-                                       return SIMPLEPIE_CONSTRUCT_TEXT;
-
-                               case 'html':
-                                       return SIMPLEPIE_CONSTRUCT_HTML;
-
-                               case 'xhtml':
-                                       return SIMPLEPIE_CONSTRUCT_XHTML;
-                       }
-                       if (in_array(substr($type, -4), array('+xml', '/xml')) || substr($type, 0, 5) === 'text/')
-                       {
-                               return SIMPLEPIE_CONSTRUCT_NONE;
-                       }
-                       else
-                       {
-                               return SIMPLEPIE_CONSTRUCT_BASE64;
-                       }
-               }
-               else
-               {
-                       return SIMPLEPIE_CONSTRUCT_TEXT;
-               }
-       }
-
-       public static function is_isegment_nz_nc($string)
-       {
-               return (bool) preg_match('/^([A-Za-z0-9\-._~\x{A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}\x{10000}-\x{1FFFD}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}\x{40000}-\x{4FFFD}\x{50000}-\x{5FFFD}\x{60000}-\x{6FFFD}\x{70000}-\x{7FFFD}\x{80000}-\x{8FFFD}\x{90000}-\x{9FFFD}\x{A0000}-\x{AFFFD}\x{B0000}-\x{BFFFD}\x{C0000}-\x{CFFFD}\x{D0000}-\x{DFFFD}\x{E1000}-\x{EFFFD}!$&\'()*+,;=@]|(%[0-9ABCDEF]{2}))+$/u', $string);
-       }
-
-       public static function space_seperated_tokens($string)
-       {
-               $space_characters = "\x20\x09\x0A\x0B\x0C\x0D";
-               $string_length = strlen($string);
-
-               $position = strspn($string, $space_characters);
-               $tokens = array();
-
-               while ($position < $string_length)
-               {
-                       $len = strcspn($string, $space_characters, $position);
-                       $tokens[] = substr($string, $position, $len);
-                       $position += $len;
-                       $position += strspn($string, $space_characters, $position);
-               }
-
-               return $tokens;
-       }
-
-       /**
-        * Converts a unicode codepoint to a UTF-8 character
-        *
-        * @static
-        * @param int $codepoint Unicode codepoint
-        * @return string UTF-8 character
-        */
-       public static function codepoint_to_utf8($codepoint)
-       {
-               $codepoint = (int) $codepoint;
-               if ($codepoint < 0)
-               {
-                       return false;
-               }
-               else if ($codepoint <= 0x7f)
-               {
-                       return chr($codepoint);
-               }
-               else if ($codepoint <= 0x7ff)
-               {
-                       return chr(0xc0 | ($codepoint >> 6)) . chr(0x80 | ($codepoint & 0x3f));
-               }
-               else if ($codepoint <= 0xffff)
-               {
-                       return chr(0xe0 | ($codepoint >> 12)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f));
-               }
-               else if ($codepoint <= 0x10ffff)
-               {
-                       return chr(0xf0 | ($codepoint >> 18)) . chr(0x80 | (($codepoint >> 12) & 0x3f)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f));
-               }
-               else
-               {
-                       // U+FFFD REPLACEMENT CHARACTER
-                       return "\xEF\xBF\xBD";
-               }
-       }
-
-       /**
-        * Similar to parse_str()
-        *
-        * Returns an associative array of name/value pairs, where the value is an
-        * array of values that have used the same name
-        *
-        * @static
-        * @param string $str The input string.
-        * @return array
-        */
-       public static function parse_str($str)
-       {
-               $return = array();
-               $str = explode('&', $str);
-
-               foreach ($str as $section)
-               {
-                       if (strpos($section, '=') !== false)
-                       {
-                               list($name, $value) = explode('=', $section, 2);
-                               $return[urldecode($name)][] = urldecode($value);
-                       }
-                       else
-                       {
-                               $return[urldecode($section)][] = null;
-                       }
-               }
-
-               return $return;
-       }
-
-       /**
-        * Detect XML encoding, as per XML 1.0 Appendix F.1
-        *
-        * @todo Add support for EBCDIC
-        * @param string $data XML data
-        * @param SimplePie_Registry $registry Class registry
-        * @return array Possible encodings
-        */
-       public static function xml_encoding($data, $registry)
-       {
-               // UTF-32 Big Endian BOM
-               if (substr($data, 0, 4) === "\x00\x00\xFE\xFF")
-               {
-                       $encoding[] = 'UTF-32BE';
-               }
-               // UTF-32 Little Endian BOM
-               elseif (substr($data, 0, 4) === "\xFF\xFE\x00\x00")
-               {
-                       $encoding[] = 'UTF-32LE';
-               }
-               // UTF-16 Big Endian BOM
-               elseif (substr($data, 0, 2) === "\xFE\xFF")
-               {
-                       $encoding[] = 'UTF-16BE';
-               }
-               // UTF-16 Little Endian BOM
-               elseif (substr($data, 0, 2) === "\xFF\xFE")
-               {
-                       $encoding[] = 'UTF-16LE';
-               }
-               // UTF-8 BOM
-               elseif (substr($data, 0, 3) === "\xEF\xBB\xBF")
-               {
-                       $encoding[] = 'UTF-8';
-               }
-               // UTF-32 Big Endian Without BOM
-               elseif (substr($data, 0, 20) === "\x00\x00\x00\x3C\x00\x00\x00\x3F\x00\x00\x00\x78\x00\x00\x00\x6D\x00\x00\x00\x6C")
-               {
-                       if ($pos = strpos($data, "\x00\x00\x00\x3F\x00\x00\x00\x3E"))
-                       {
-                               $parser = $registry->create('XML_Declaration_Parser', array(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32BE', 'UTF-8')));
-                               if ($parser->parse())
-                               {
-                                       $encoding[] = $parser->encoding;
-                               }
-                       }
-                       $encoding[] = 'UTF-32BE';
-               }
-               // UTF-32 Little Endian Without BOM
-               elseif (substr($data, 0, 20) === "\x3C\x00\x00\x00\x3F\x00\x00\x00\x78\x00\x00\x00\x6D\x00\x00\x00\x6C\x00\x00\x00")
-               {
-                       if ($pos = strpos($data, "\x3F\x00\x00\x00\x3E\x00\x00\x00"))
-                       {
-                               $parser = $registry->create('XML_Declaration_Parser', array(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 20), 'UTF-32LE', 'UTF-8')));
-                               if ($parser->parse())
-                               {
-                                       $encoding[] = $parser->encoding;
-                               }
-                       }
-                       $encoding[] = 'UTF-32LE';
-               }
-               // UTF-16 Big Endian Without BOM
-               elseif (substr($data, 0, 10) === "\x00\x3C\x00\x3F\x00\x78\x00\x6D\x00\x6C")
-               {
-                       if ($pos = strpos($data, "\x00\x3F\x00\x3E"))
-                       {
-                               $parser = $registry->create('XML_Declaration_Parser', array(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16BE', 'UTF-8')));
-                               if ($parser->parse())
-                               {
-                                       $encoding[] = $parser->encoding;
-                               }
-                       }
-                       $encoding[] = 'UTF-16BE';
-               }
-               // UTF-16 Little Endian Without BOM
-               elseif (substr($data, 0, 10) === "\x3C\x00\x3F\x00\x78\x00\x6D\x00\x6C\x00")
-               {
-                       if ($pos = strpos($data, "\x3F\x00\x3E\x00"))
-                       {
-                               $parser = $registry->create('XML_Declaration_Parser', array(SimplePie_Misc::change_encoding(substr($data, 20, $pos - 10), 'UTF-16LE', 'UTF-8')));
-                               if ($parser->parse())
-                               {
-                                       $encoding[] = $parser->encoding;
-                               }
-                       }
-                       $encoding[] = 'UTF-16LE';
-               }
-               // US-ASCII (or superset)
-               elseif (substr($data, 0, 5) === "\x3C\x3F\x78\x6D\x6C")
-               {
-                       if ($pos = strpos($data, "\x3F\x3E"))
-                       {
-                               $parser = $registry->create('XML_Declaration_Parser', array(substr($data, 5, $pos - 5)));
-                               if ($parser->parse())
-                               {
-                                       $encoding[] = $parser->encoding;
-                               }
-                       }
-                       $encoding[] = 'UTF-8';
-               }
-               // Fallback to UTF-8
-               else
-               {
-                       $encoding[] = 'UTF-8';
-               }
-               return $encoding;
-       }
-
-       public static function output_javascript()
-       {
-               if (function_exists('ob_gzhandler'))
-               {
-                       ob_start('ob_gzhandler');
-               }
-               header('Content-type: text/javascript; charset: UTF-8');
-               header('Cache-Control: must-revalidate');
-               header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 604800) . ' GMT'); // 7 days
-               ?>
-function embed_quicktime(type, bgcolor, width, height, link, placeholder, loop) {
-       if (placeholder != '') {
-               document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" href="'+link+'" src="'+placeholder+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="false" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>');
-       }
-       else {
-               document.writeln('<embed type="'+type+'" style="cursor:hand; cursor:pointer;" src="'+link+'" width="'+width+'" height="'+height+'" autoplay="false" target="myself" controller="true" loop="'+loop+'" scale="aspect" bgcolor="'+bgcolor+'" pluginspage="http://www.apple.com/quicktime/download/"></embed>');
-       }
-}
-
-function embed_flash(bgcolor, width, height, link, loop, type) {
-       document.writeln('<embed src="'+link+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="'+type+'" quality="high" width="'+width+'" height="'+height+'" bgcolor="'+bgcolor+'" loop="'+loop+'"></embed>');
-}
-
-function embed_flv(width, height, link, placeholder, loop, player) {
-       document.writeln('<embed src="'+player+'" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" quality="high" width="'+width+'" height="'+height+'" wmode="transparent" flashvars="file='+link+'&autostart=false&repeat='+loop+'&showdigits=true&showfsbutton=false"></embed>');
-}
-
-function embed_wmedia(width, height, link) {
-       document.writeln('<embed type="application/x-mplayer2" src="'+link+'" autosize="1" width="'+width+'" height="'+height+'" showcontrols="1" showstatusbar="0" showdisplay="0" autostart="0"></embed>');
-}
-               <?php
-       }
-
-       /**
-        * Get the SimplePie build timestamp
-        *
-        * Uses the git index if it exists, otherwise uses the modification time
-        * of the newest file.
-        */
-       public static function get_build()
-       {
-               $root = dirname(dirname(__FILE__));
-               if (file_exists($root . '/.git/index'))
-               {
-                       return filemtime($root . '/.git/index');
-               }
-               elseif (file_exists($root . '/SimplePie'))
-               {
-                       $time = 0;
-                       foreach (glob($root . '/SimplePie/*.php') as $file)
-                       {
-                               if (($mtime = filemtime($file)) > $time)
-                               {
-                                       $time = $mtime;
-                               }
-                       }
-                       return $time;
-               }
-               elseif (file_exists(dirname(__FILE__) . '/Core.php'))
-               {
-                       return filemtime(dirname(__FILE__) . '/Core.php');
-               }
-               else
-               {
-                       return filemtime(__FILE__);
-               }
-       }
-
-       /**
-        * Format debugging information
-        */
-       public static function debug(&$sp)
-       {
-               $info = 'SimplePie ' . SIMPLEPIE_VERSION . ' Build ' . SIMPLEPIE_BUILD . "\n";
-               $info .= 'PHP ' . PHP_VERSION . "\n";
-               if ($sp->error() !== null)
-               {
-                       $info .= 'Error occurred: ' . $sp->error() . "\n";
-               }
-               else
-               {
-                       $info .= "No error found.\n";
-               }
-               $info .= "Extensions:\n";
-               $extensions = array('pcre', 'curl', 'zlib', 'mbstring', 'iconv', 'xmlreader', 'xml');
-               foreach ($extensions as $ext)
-               {
-                       if (extension_loaded($ext))
-                       {
-                               $info .= "    $ext loaded\n";
-                               switch ($ext)
-                               {
-                                       case 'pcre':
-                                               $info .= '      Version ' . PCRE_VERSION . "\n";
-                                               break;
-                                       case 'curl':
-                                               $version = curl_version();
-                                               $info .= '      Version ' . $version['version'] . "\n";
-                                               break;
-                                       case 'mbstring':
-                                               $info .= '      Overloading: ' . mb_get_info('func_overload') . "\n";
-                                               break;
-                                       case 'iconv':
-                                               $info .= '      Version ' . ICONV_VERSION . "\n";
-                                               break;
-                                       case 'xml':
-                                               $info .= '      Version ' . LIBXML_DOTTED_VERSION . "\n";
-                                               break;
-                               }
-                       }
-                       else
-                       {
-                               $info .= "    $ext not loaded\n";
-                       }
-               }
-               return $info;
-       }
-
-       public static function silence_errors($num, $str)
-       {
-               // No-op
-       }
-}
-
-/**
- * Class to validate and to work with IPv6 addresses.
- *
- * @package SimplePie
- * @subpackage HTTP
- * @copyright 2003-2005 The PHP Group
- * @license http://www.opensource.org/licenses/bsd-license.php
- * @link http://pear.php.net/package/Net_IPv6
- * @author Alexander Merz <alexander.merz@web.de>
- * @author elfrink at introweb dot nl
- * @author Josh Peck <jmp at joshpeck dot org>
- * @author Geoffrey Sneddon <geoffers@gmail.com>
- */
-class SimplePie_Net_IPv6
-{
-       /**
-        * Uncompresses an IPv6 address
-        *
-        * RFC 4291 allows you to compress concecutive zero pieces in an address to
-        * '::'. This method expects a valid IPv6 address and expands the '::' to
-        * the required number of zero pieces.
-        *
-        * Example:  FF01::101   ->  FF01:0:0:0:0:0:0:101
-        *           ::1         ->  0:0:0:0:0:0:0:1
-        *
-        * @author Alexander Merz <alexander.merz@web.de>
-        * @author elfrink at introweb dot nl
-        * @author Josh Peck <jmp at joshpeck dot org>
-        * @copyright 2003-2005 The PHP Group
-        * @license http://www.opensource.org/licenses/bsd-license.php
-        * @param string $ip An IPv6 address
-        * @return string The uncompressed IPv6 address
-        */
-       public static function uncompress($ip)
-       {
-               $c1 = -1;
-               $c2 = -1;
-               if (substr_count($ip, '::') === 1)
-               {
-                       list($ip1, $ip2) = explode('::', $ip);
-                       if ($ip1 === '')
-                       {
-                               $c1 = -1;
-                       }
-                       else
-                       {
-                               $c1 = substr_count($ip1, ':');
-                       }
-                       if ($ip2 === '')
-                       {
-                               $c2 = -1;
-                       }
-                       else
-                       {
-                               $c2 = substr_count($ip2, ':');
-                       }
-                       if (strpos($ip2, '.') !== false)
-                       {
-                               $c2++;
-                       }
-                       // ::
-                       if ($c1 === -1 && $c2 === -1)
-                       {
-                               $ip = '0:0:0:0:0:0:0:0';
-                       }
-                       // ::xxx
-                       else if ($c1 === -1)
-                       {
-                               $fill = str_repeat('0:', 7 - $c2);
-                               $ip = str_replace('::', $fill, $ip);
-                       }
-                       // xxx::
-                       else if ($c2 === -1)
-                       {
-                               $fill = str_repeat(':0', 7 - $c1);
-                               $ip = str_replace('::', $fill, $ip);
-                       }
-                       // xxx::xxx
-                       else
-                       {
-                               $fill = ':' . str_repeat('0:', 6 - $c2 - $c1);
-                               $ip = str_replace('::', $fill, $ip);
-                       }
-               }
-               return $ip;
-       }
-
-       /**
-        * Compresses an IPv6 address
-        *
-        * RFC 4291 allows you to compress concecutive zero pieces in an address to
-        * '::'. This method expects a valid IPv6 address and compresses consecutive
-        * zero pieces to '::'.
-        *
-        * Example:  FF01:0:0:0:0:0:0:101   ->  FF01::101
-        *           0:0:0:0:0:0:0:1        ->  ::1
-        *
-        * @see uncompress()
-        * @param string $ip An IPv6 address
-        * @return string The compressed IPv6 address
-        */
-       public static function compress($ip)
-       {
-               // Prepare the IP to be compressed
-               $ip = self::uncompress($ip);
-               $ip_parts = self::split_v6_v4($ip);
-
-               // Replace all leading zeros
-               $ip_parts[0] = preg_replace('/(^|:)0+([0-9])/', '\1\2', $ip_parts[0]);
-
-               // Find bunches of zeros
-               if (preg_match_all('/(?:^|:)(?:0(?::|$))+/', $ip_parts[0], $matches, PREG_OFFSET_CAPTURE))
-               {
-                       $max = 0;
-                       $pos = null;
-                       foreach ($matches[0] as $match)
-                       {
-                               if (strlen($match[0]) > $max)
-                               {
-                                       $max = strlen($match[0]);
-                                       $pos = $match[1];
-                               }
-                       }
-
-                       $ip_parts[0] = substr_replace($ip_parts[0], '::', $pos, $max);
-               }
-
-               if ($ip_parts[1] !== '')
-               {
-                       return implode(':', $ip_parts);
-               }
-               else
-               {
-                       return $ip_parts[0];
-               }
-       }
-
-       /**
-        * Splits an IPv6 address into the IPv6 and IPv4 representation parts
-        *
-        * RFC 4291 allows you to represent the last two parts of an IPv6 address
-        * using the standard IPv4 representation
-        *
-        * Example:  0:0:0:0:0:0:13.1.68.3
-        *           0:0:0:0:0:FFFF:129.144.52.38
-        *
-        * @param string $ip An IPv6 address
-        * @return array [0] contains the IPv6 represented part, and [1] the IPv4 represented part
-        */
-       private static function split_v6_v4($ip)
-       {
-               if (strpos($ip, '.') !== false)
-               {
-                       $pos = strrpos($ip, ':');
-                       $ipv6_part = substr($ip, 0, $pos);
-                       $ipv4_part = substr($ip, $pos + 1);
-                       return array($ipv6_part, $ipv4_part);
-               }
-               else
-               {
-                       return array($ip, '');
-               }
-       }
-
-       /**
-        * Checks an IPv6 address
-        *
-        * Checks if the given IP is a valid IPv6 address
-        *
-        * @param string $ip An IPv6 address
-        * @return bool true if $ip is a valid IPv6 address
-        */
-       public static function check_ipv6($ip)
-       {
-               $ip = self::uncompress($ip);
-               list($ipv6, $ipv4) = self::split_v6_v4($ip);
-               $ipv6 = explode(':', $ipv6);
-               $ipv4 = explode('.', $ipv4);
-               if (count($ipv6) === 8 && count($ipv4) === 1 || count($ipv6) === 6 && count($ipv4) === 4)
-               {
-                       foreach ($ipv6 as $ipv6_part)
-                       {
-                               // The section can't be empty
-                               if ($ipv6_part === '')
-                                       return false;
-
-                               // Nor can it be over four characters
-                               if (strlen($ipv6_part) > 4)
-                                       return false;
-
-                               // Remove leading zeros (this is safe because of the above)
-                               $ipv6_part = ltrim($ipv6_part, '0');
-                               if ($ipv6_part === '')
-                                       $ipv6_part = '0';
-
-                               // Check the value is valid
-                               $value = hexdec($ipv6_part);
-                               if (dechex($value) !== strtolower($ipv6_part) || $value < 0 || $value > 0xFFFF)
-                                       return false;
-                       }
-                       if (count($ipv4) === 4)
-                       {
-                               foreach ($ipv4 as $ipv4_part)
-                               {
-                                       $value = (int) $ipv4_part;
-                                       if ((string) $value !== $ipv4_part || $value < 0 || $value > 0xFF)
-                                               return false;
-                               }
-                       }
-                       return true;
-               }
-               else
-               {
-                       return false;
-               }
-       }
-
-       /**
-        * Checks if the given IP is a valid IPv6 address
-        *
-        * @codeCoverageIgnore
-        * @deprecated Use {@see SimplePie_Net_IPv6::check_ipv6()} instead
-        * @see check_ipv6
-        * @param string $ip An IPv6 address
-        * @return bool true if $ip is a valid IPv6 address
-        */
-       public static function checkIPv6($ip)
-       {
-               return self::check_ipv6($ip);
-       }
-}
-
-/**
- * Date Parser
- *
- * @package SimplePie
- * @subpackage Parsing
- */
-class SimplePie_Parse_Date
-{
-       /**
-        * Input data
-        *
-        * @access protected
-        * @var string
-        */
-       var $date;
-
-       /**
-        * List of days, calendar day name => ordinal day number in the week
-        *
-        * @access protected
-        * @var array
-        */
-       var $day = array(
-               // English
-               'mon' => 1,
-               'monday' => 1,
-               'tue' => 2,
-               'tuesday' => 2,
-               'wed' => 3,
-               'wednesday' => 3,
-               'thu' => 4,
-               'thursday' => 4,
-               'fri' => 5,
-               'friday' => 5,
-               'sat' => 6,
-               'saturday' => 6,
-               'sun' => 7,
-               'sunday' => 7,
-               // Dutch
-               'maandag' => 1,
-               'dinsdag' => 2,
-               'woensdag' => 3,
-               'donderdag' => 4,
-               'vrijdag' => 5,
-               'zaterdag' => 6,
-               'zondag' => 7,
-               // French
-               'lundi' => 1,
-               'mardi' => 2,
-               'mercredi' => 3,
-               'jeudi' => 4,
-               'vendredi' => 5,
-               'samedi' => 6,
-               'dimanche' => 7,
-               // German
-               'montag' => 1,
-               'dienstag' => 2,
-               'mittwoch' => 3,
-               'donnerstag' => 4,
-               'freitag' => 5,
-               'samstag' => 6,
-               'sonnabend' => 6,
-               'sonntag' => 7,
-               // Italian
-               'lunedì' => 1,
-               'martedì' => 2,
-               'mercoledì' => 3,
-               'giovedì' => 4,
-               'venerdì' => 5,
-               'sabato' => 6,
-               'domenica' => 7,
-               // Spanish
-               'lunes' => 1,
-               'martes' => 2,
-               'miércoles' => 3,
-               'jueves' => 4,
-               'viernes' => 5,
-               'sábado' => 6,
-               'domingo' => 7,
-               // Finnish
-               'maanantai' => 1,
-               'tiistai' => 2,
-               'keskiviikko' => 3,
-               'torstai' => 4,
-               'perjantai' => 5,
-               'lauantai' => 6,
-               'sunnuntai' => 7,
-               // Hungarian
-               'hétfő' => 1,
-               'kedd' => 2,
-               'szerda' => 3,
-               'csütörtok' => 4,
-               'péntek' => 5,
-               'szombat' => 6,
-               'vasárnap' => 7,
-               // Greek
-               'Δευ' => 1,
-               'Τρι' => 2,
-               'Τετ' => 3,
-               'Πεμ' => 4,
-               'Παρ' => 5,
-               'Σαβ' => 6,
-               'Κυρ' => 7,
-       );
-
-       /**
-        * List of months, calendar month name => calendar month number
-        *
-        * @access protected
-        * @var array
-        */
-       var $month = array(
-               // English
-               'jan' => 1,
-               'january' => 1,
-               'feb' => 2,
-               'february' => 2,
-               'mar' => 3,
-               'march' => 3,
-               'apr' => 4,
-               'april' => 4,
-               'may' => 5,
-               // No long form of May
-               'jun' => 6,
-               'june' => 6,
-               'jul' => 7,
-               'july' => 7,
-               'aug' => 8,
-               'august' => 8,
-               'sep' => 9,
-               'september' => 8,
-               'oct' => 10,
-               'october' => 10,
-               'nov' => 11,
-               'november' => 11,
-               'dec' => 12,
-               'december' => 12,
-               // Dutch
-               'januari' => 1,
-               'februari' => 2,
-               'maart' => 3,
-               'april' => 4,
-               'mei' => 5,
-               'juni' => 6,
-               'juli' => 7,
-               'augustus' => 8,
-               'september' => 9,
-               'oktober' => 10,
-               'november' => 11,
-               'december' => 12,
-               // French
-               'janvier' => 1,
-               'février' => 2,
-               'mars' => 3,
-               'avril' => 4,
-               'mai' => 5,
-               'juin' => 6,
-               'juillet' => 7,
-               'août' => 8,
-               'septembre' => 9,
-               'octobre' => 10,
-               'novembre' => 11,
-               'décembre' => 12,
-               // German
-               'januar' => 1,
-               'februar' => 2,
-               'märz' => 3,
-               'april' => 4,
-               'mai' => 5,
-               'juni' => 6,
-               'juli' => 7,
-               'august' => 8,
-               'september' => 9,
-               'oktober' => 10,
-               'november' => 11,
-               'dezember' => 12,
-               // Italian
-               'gennaio' => 1,
-               'febbraio' => 2,
-               'marzo' => 3,
-               'aprile' => 4,
-               'maggio' => 5,
-               'giugno' => 6,
-               'luglio' => 7,
-               'agosto' => 8,
-               'settembre' => 9,
-               'ottobre' => 10,
-               'novembre' => 11,
-               'dicembre' => 12,
-               // Spanish
-               'enero' => 1,
-               'febrero' => 2,
-               'marzo' => 3,
-               'abril' => 4,
-               'mayo' => 5,
-               'junio' => 6,
-               'julio' => 7,
-               'agosto' => 8,
-               'septiembre' => 9,
-               'setiembre' => 9,
-               'octubre' => 10,
-               'noviembre' => 11,
-               'diciembre' => 12,
-               // Finnish
-               'tammikuu' => 1,
-               'helmikuu' => 2,
-               'maaliskuu' => 3,
-               'huhtikuu' => 4,
-               'toukokuu' => 5,
-               'kesäkuu' => 6,
-               'heinäkuu' => 7,
-               'elokuu' => 8,
-               'suuskuu' => 9,
-               'lokakuu' => 10,
-               'marras' => 11,
-               'joulukuu' => 12,
-               // Hungarian
-               'január' => 1,
-               'február' => 2,
-               'március' => 3,
-               'április' => 4,
-               'május' => 5,
-               'június' => 6,
-               'július' => 7,
-               'augusztus' => 8,
-               'szeptember' => 9,
-               'október' => 10,
-               'november' => 11,
-               'december' => 12,
-               // Greek
-               'Ιαν' => 1,
-               'Φεβ' => 2,
-               'Μάώ' => 3,
-               'Μαώ' => 3,
-               'Απρ' => 4,
-               'Μάι' => 5,
-               'Μαϊ' => 5,
-               'Μαι' => 5,
-               'Ιούν' => 6,
-               'Ιον' => 6,
-               'Ιούλ' => 7,
-               'Ιολ' => 7,
-               'Αύγ' => 8,
-               'Αυγ' => 8,
-               'Σεπ' => 9,
-               'Οκτ' => 10,
-               'Νοέ' => 11,
-               'Δεκ' => 12,
-       );
-
-       /**
-        * List of timezones, abbreviation => offset from UTC
-        *
-        * @access protected
-        * @var array
-        */
-       var $timezone = array(
-               'ACDT' => 37800,
-               'ACIT' => 28800,
-               'ACST' => 34200,
-               'ACT' => -18000,
-               'ACWDT' => 35100,
-               'ACWST' => 31500,
-               'AEDT' => 39600,
-               'AEST' => 36000,
-               'AFT' => 16200,
-               'AKDT' => -28800,
-               'AKST' => -32400,
-               'AMDT' => 18000,
-               'AMT' => -14400,
-               'ANAST' => 46800,
-               'ANAT' => 43200,
-               'ART' => -10800,
-               'AZOST' => -3600,
-               'AZST' => 18000,
-               'AZT' => 14400,
-               'BIOT' => 21600,
-               'BIT' => -43200,
-               'BOT' => -14400,
-               'BRST' => -7200,
-               'BRT' => -10800,
-               'BST' => 3600,
-               'BTT' => 21600,
-               'CAST' => 18000,
-               'CAT' => 7200,
-               'CCT' => 23400,
-               'CDT' => -18000,
-               'CEDT' => 7200,
-               'CET' => 3600,
-               'CGST' => -7200,
-               'CGT' => -10800,
-               'CHADT' => 49500,
-               'CHAST' => 45900,
-               'CIST' => -28800,
-               'CKT' => -36000,
-               'CLDT' => -10800,
-               'CLST' => -14400,
-               'COT' => -18000,
-               'CST' => -21600,
-               'CVT' => -3600,
-               'CXT' => 25200,
-               'DAVT' => 25200,
-               'DTAT' => 36000,
-               'EADT' => -18000,
-               'EAST' => -21600,
-               'EAT' => 10800,
-               'ECT' => -18000,
-               'EDT' => -14400,
-               'EEST' => 10800,
-               'EET' => 7200,
-               'EGT' => -3600,
-               'EKST' => 21600,
-               'EST' => -18000,
-               'FJT' => 43200,
-               'FKDT' => -10800,
-               'FKST' => -14400,
-               'FNT' => -7200,
-               'GALT' => -21600,
-               'GEDT' => 14400,
-               'GEST' => 10800,
-               'GFT' => -10800,
-               'GILT' => 43200,
-               'GIT' => -32400,
-               'GST' => 14400,
-               'GST' => -7200,
-               'GYT' => -14400,
-               'HAA' => -10800,
-               'HAC' => -18000,
-               'HADT' => -32400,
-               'HAE' => -14400,
-               'HAP' => -25200,
-               'HAR' => -21600,
-               'HAST' => -36000,
-               'HAT' => -9000,
-               'HAY' => -28800,
-               'HKST' => 28800,
-               'HMT' => 18000,
-               'HNA' => -14400,
-               'HNC' => -21600,
-               'HNE' => -18000,
-               'HNP' => -28800,
-               'HNR' => -25200,
-               'HNT' => -12600,
-               'HNY' => -32400,
-               'IRDT' => 16200,
-               'IRKST' => 32400,
-               'IRKT' => 28800,
-               'IRST' => 12600,
-               'JFDT' => -10800,
-               'JFST' => -14400,
-               'JST' => 32400,
-               'KGST' => 21600,
-               'KGT' => 18000,
-               'KOST' => 39600,
-               'KOVST' => 28800,
-               'KOVT' => 25200,
-               'KRAST' => 28800,
-               'KRAT' => 25200,
-               'KST' => 32400,
-               'LHDT' => 39600,
-               'LHST' => 37800,
-               'LINT' => 50400,
-               'LKT' => 21600,
-               'MAGST' => 43200,
-               'MAGT' => 39600,
-               'MAWT' => 21600,
-               'MDT' => -21600,
-               'MESZ' => 7200,
-               'MEZ' => 3600,
-               'MHT' => 43200,
-               'MIT' => -34200,
-               'MNST' => 32400,
-               'MSDT' => 14400,
-               'MSST' => 10800,
-               'MST' => -25200,
-               'MUT' => 14400,
-               'MVT' => 18000,
-               'MYT' => 28800,
-               'NCT' => 39600,
-               'NDT' => -9000,
-               'NFT' => 41400,
-               'NMIT' => 36000,
-               'NOVST' => 25200,
-               'NOVT' => 21600,
-               'NPT' => 20700,
-               'NRT' => 43200,
-               'NST' => -12600,
-               'NUT' => -39600,
-               'NZDT' => 46800,
-               'NZST' => 43200,
-               'OMSST' => 25200,
-               'OMST' => 21600,
-               'PDT' => -25200,
-               'PET' => -18000,
-               'PETST' => 46800,
-               'PETT' => 43200,
-               'PGT' => 36000,
-               'PHOT' => 46800,
-               'PHT' => 28800,
-               'PKT' => 18000,
-               'PMDT' => -7200,
-               'PMST' => -10800,
-               'PONT' => 39600,
-               'PST' => -28800,
-               'PWT' => 32400,
-               'PYST' => -10800,
-               'PYT' => -14400,
-               'RET' => 14400,
-               'ROTT' => -10800,
-               'SAMST' => 18000,
-               'SAMT' => 14400,
-               'SAST' => 7200,
-               'SBT' => 39600,
-               'SCDT' => 46800,
-               'SCST' => 43200,
-               'SCT' => 14400,
-               'SEST' => 3600,
-               'SGT' => 28800,
-               'SIT' => 28800,
-               'SRT' => -10800,
-               'SST' => -39600,
-               'SYST' => 10800,
-               'SYT' => 7200,
-               'TFT' => 18000,
-               'THAT' => -36000,
-               'TJT' => 18000,
-               'TKT' => -36000,
-               'TMT' => 18000,
-               'TOT' => 46800,
-               'TPT' => 32400,
-               'TRUT' => 36000,
-               'TVT' => 43200,
-               'TWT' => 28800,
-               'UYST' => -7200,
-               'UYT' => -10800,
-               'UZT' => 18000,
-               'VET' => -14400,
-               'VLAST' => 39600,
-               'VLAT' => 36000,
-               'VOST' => 21600,
-               'VUT' => 39600,
-               'WAST' => 7200,
-               'WAT' => 3600,
-               'WDT' => 32400,
-               'WEST' => 3600,
-               'WFT' => 43200,
-               'WIB' => 25200,
-               'WIT' => 32400,
-               'WITA' => 28800,
-               'WKST' => 18000,
-               'WST' => 28800,
-               'YAKST' => 36000,
-               'YAKT' => 32400,
-               'YAPT' => 36000,
-               'YEKST' => 21600,
-               'YEKT' => 18000,
-       );
-
-       /**
-        * Cached PCRE for SimplePie_Parse_Date::$day
-        *
-        * @access protected
-        * @var string
-        */
-       var $day_pcre;
-
-       /**
-        * Cached PCRE for SimplePie_Parse_Date::$month
-        *
-        * @access protected
-        * @var string
-        */
-       var $month_pcre;
-
-       /**
-        * Array of user-added callback methods
-        *
-        * @access private
-        * @var array
-        */
-       var $built_in = array();
-
-       /**
-        * Array of user-added callback methods
-        *
-        * @access private
-        * @var array
-        */
-       var $user = array();
-
-       /**
-        * Create new SimplePie_Parse_Date object, and set self::day_pcre,
-        * self::month_pcre, and self::built_in
-        *
-        * @access private
-        */
-       public function __construct()
-       {
-               $this->day_pcre = '(' . implode(array_keys($this->day), '|') . ')';
-               $this->month_pcre = '(' . implode(array_keys($this->month), '|') . ')';
-
-               static $cache;
-               if (!isset($cache[get_class($this)]))
-               {
-                       $all_methods = get_class_methods($this);
-
-                       foreach ($all_methods as $method)
-                       {
-                               if (strtolower(substr($method, 0, 5)) === 'date_')
-                               {
-                                       $cache[get_class($this)][] = $method;
-                               }
-                       }
-               }
-
-               foreach ($cache[get_class($this)] as $method)
-               {
-                       $this->built_in[] = $method;
-               }
-       }
-
-       /**
-        * Get the object
-        *
-        * @access public
-        */
-       public static function get()
-       {
-               static $object;
-               if (!$object)
-               {
-                       $object = new SimplePie_Parse_Date;
-               }
-               return $object;
-       }
-
-       /**
-        * Parse a date
-        *
-        * @final
-        * @access public
-        * @param string $date Date to parse
-        * @return int Timestamp corresponding to date string, or false on failure
-        */
-       public function parse($date)
-       {
-               foreach ($this->user as $method)
-               {
-                       if (($returned = call_user_func($method, $date)) !== false)
-                       {
-                               return $returned;
-                       }
-               }
-
-               foreach ($this->built_in as $method)
-               {
-                       if (($returned = call_user_func(array($this, $method), $date)) !== false)
-                       {
-                               return $returned;
-                       }
-               }
-
-               return false;
-       }
-
-       /**
-        * Add a callback method to parse a date
-        *
-        * @final
-        * @access public
-        * @param callback $callback
-        */
-       public function add_callback($callback)
-       {
-               if (is_callable($callback))
-               {
-                       $this->user[] = $callback;
-               }
-               else
-               {
-                       trigger_error('User-supplied function must be a valid callback', E_USER_WARNING);
-               }
-       }
-
-       /**
-        * Parse a superset of W3C-DTF (allows hyphens and colons to be omitted, as
-        * well as allowing any of upper or lower case "T", horizontal tabs, or
-        * spaces to be used as the time seperator (including more than one))
-        *
-        * @access protected
-        * @return int Timestamp
-        */
-       public function date_w3cdtf($date)
-       {
-               static $pcre;
-               if (!$pcre)
-               {
-                       $year = '([0-9]{4})';
-                       $month = $day = $hour = $minute = $second = '([0-9]{2})';
-                       $decimal = '([0-9]*)';
-                       $zone = '(?:(Z)|([+\-])([0-9]{1,2}):?([0-9]{1,2}))';
-                       $pcre = '/^' . $year . '(?:-?' . $month . '(?:-?' . $day . '(?:[Tt\x09\x20]+' . $hour . '(?::?' . $minute . '(?::?' . $second . '(?:.' . $decimal . ')?)?)?' . $zone . ')?)?)?$/';
-               }
-               if (preg_match($pcre, $date, $match))
-               {
-                       /*
-                       Capturing subpatterns:
-                       1: Year
-                       2: Month
-                       3: Day
-                       4: Hour
-                       5: Minute
-                       6: Second
-                       7: Decimal fraction of a second
-                       8: Zulu
-                       9: Timezone ±
-                       10: Timezone hours
-                       11: Timezone minutes
-                       */
-
-                       // Fill in empty matches
-                       for ($i = count($match); $i <= 3; $i++)
-                       {
-                               $match[$i] = '1';
-                       }
-
-                       for ($i = count($match); $i <= 7; $i++)
-                       {
-                               $match[$i] = '0';
-                       }
-
-                       // Numeric timezone
-                       if (isset($match[9]) && $match[9] !== '')
-                       {
-                               $timezone = $match[10] * 3600;
-                               $timezone += $match[11] * 60;
-                               if ($match[9] === '-')
-                               {
-                                       $timezone = 0 - $timezone;
-                               }
-                       }
-                       else
-                       {
-                               $timezone = 0;
-                       }
-
-                       // Convert the number of seconds to an integer, taking decimals into account
-                       $second = round($match[6] + $match[7] / pow(10, strlen($match[7])));
-
-                       return gmmktime($match[4], $match[5], $second, $match[2], $match[3], $match[1]) - $timezone;
-               }
-               else
-               {
-                       return false;
-               }
-       }
-
-       /**
-        * Remove RFC822 comments
-        *
-        * @access protected
-        * @param string $data Data to strip comments from
-        * @return string Comment stripped string
-        */
-       public function remove_rfc2822_comments($string)
-       {
-               $string = (string) $string;
-               $position = 0;
-               $length = strlen($string);
-               $depth = 0;
-
-               $output = '';
-
-               while ($position < $length && ($pos = strpos($string, '(', $position)) !== false)
-               {
-                       $output .= substr($string, $position, $pos - $position);
-                       $position = $pos + 1;
-                       if ($string[$pos - 1] !== '\\')
-                       {
-                               $depth++;
-                               while ($depth && $position < $length)
-                               {
-                                       $position += strcspn($string, '()', $position);
-                                       if ($string[$position - 1] === '\\')
-                                       {
-                                               $position++;
-                                               continue;
-                                       }
-                                       elseif (isset($string[$position]))
-                                       {
-                                               switch ($string[$position])
-                                               {
-                                                       case '(':
-                                                               $depth++;
-                                                               break;
-
-                                                       case ')':
-                                                               $depth--;
-                                                               break;
-                                               }
-                                               $position++;
-                                       }
-                                       else
-                                       {
-                                               break;
-                                       }
-                               }
-                       }
-                       else
-                       {
-                               $output .= '(';
-                       }
-               }
-               $output .= substr($string, $position);
-
-               return $output;
-       }
-
-       /**
-        * Parse RFC2822's date format
-        *
-        * @access protected
-        * @return int Timestamp
-        */
-       public function date_rfc2822($date)
-       {
-               static $pcre;
-               if (!$pcre)
-               {
-                       $wsp = '[\x09\x20]';
-                       $fws = '(?:' . $wsp . '+|' . $wsp . '*(?:\x0D\x0A' . $wsp . '+)+)';
-                       $optional_fws = $fws . '?';
-                       $day_name = $this->day_pcre;
-                       $month = $this->month_pcre;
-                       $day = '([0-9]{1,2})';
-                       $hour = $minute = $second = '([0-9]{2})';
-                       $year = '([0-9]{2,4})';
-                       $num_zone = '([+\-])([0-9]{2})([0-9]{2})';
-                       $character_zone = '([A-Z]{1,5})';
-                       $zone = '(?:' . $num_zone . '|' . $character_zone . ')';
-                       $pcre = '/(?:' . $optional_fws . $day_name . $optional_fws . ',)?' . $optional_fws . $day . $fws . $month . $fws . $year . $fws . $hour . $optional_fws . ':' . $optional_fws . $minute . '(?:' . $optional_fws . ':' . $optional_fws . $second . ')?' . $fws . $zone . '/i';
-               }
-               if (preg_match($pcre, $this->remove_rfc2822_comments($date), $match))
-               {
-                       /*
-                       Capturing subpatterns:
-                       1: Day name
-                       2: Day
-                       3: Month
-                       4: Year
-                       5: Hour
-                       6: Minute
-                       7: Second
-                       8: Timezone ±
-                       9: Timezone hours
-                       10: Timezone minutes
-                       11: Alphabetic timezone
-                       */
-
-                       // Find the month number
-                       $month = $this->month[strtolower($match[3])];
-
-                       // Numeric timezone
-                       if ($match[8] !== '')
-                       {
-                               $timezone = $match[9] * 3600;
-                               $timezone += $match[10] * 60;
-                               if ($match[8] === '-')
-                               {
-                                       $timezone = 0 - $timezone;
-                               }
-                       }
-                       // Character timezone
-                       elseif (isset($this->timezone[strtoupper($match[11])]))
-                       {
-                               $timezone = $this->timezone[strtoupper($match[11])];
-                       }
-                       // Assume everything else to be -0000
-                       else
-                       {
-                               $timezone = 0;
-                       }
-
-                       // Deal with 2/3 digit years
-                       if ($match[4] < 50)
-                       {
-                               $match[4] += 2000;
-                       }
-                       elseif ($match[4] < 1000)
-                       {
-                               $match[4] += 1900;
-                       }
-
-                       // Second is optional, if it is empty set it to zero
-                       if ($match[7] !== '')
-                       {
-                               $second = $match[7];
-                       }
-                       else
-                       {
-                               $second = 0;
-                       }
-
-                       return gmmktime($match[5], $match[6], $second, $month, $match[2], $match[4]) - $timezone;
-               }
-               else
-               {
-                       return false;
-               }
-       }
-
-       /**
-        * Parse RFC850's date format
-        *
-        * @access protected
-        * @return int Timestamp
-        */
-       public function date_rfc850($date)
-       {
-               static $pcre;
-               if (!$pcre)
-               {
-                       $space = '[\x09\x20]+';
-                       $day_name = $this->day_pcre;
-                       $month = $this->month_pcre;
-                       $day = '([0-9]{1,2})';
-                       $year = $hour = $minute = $second = '([0-9]{2})';
-                       $zone = '([A-Z]{1,5})';
-                       $pcre = '/^' . $day_name . ',' . $space . $day . '-' . $month . '-' . $year . $space . $hour . ':' . $minute . ':' . $second . $space . $zone . '$/i';
-               }
-               if (preg_match($pcre, $date, $match))
-               {
-                       /*
-                       Capturing subpatterns:
-                       1: Day name
-                       2: Day
-                       3: Month
-                       4: Year
-                       5: Hour
-                       6: Minute
-                       7: Second
-                       8: Timezone
-                       */
-
-                       // Month
-                       $month = $this->month[strtolower($match[3])];
-
-                       // Character timezone
-                       if (isset($this->timezone[strtoupper($match[8])]))
-                       {
-                               $timezone = $this->timezone[strtoupper($match[8])];
-                       }
-                       // Assume everything else to be -0000
-                       else
-                       {
-                               $timezone = 0;
-                       }
-
-                       // Deal with 2 digit year
-                       if ($match[4] < 50)
-                       {
-                               $match[4] += 2000;
-                       }
-                       else
-                       {
-                               $match[4] += 1900;
-                       }
-
-                       return gmmktime($match[5], $match[6], $match[7], $month, $match[2], $match[4]) - $timezone;
-               }
-               else
-               {
-                       return false;
-               }
-       }
-
-       /**
-        * Parse C99's asctime()'s date format
-        *
-        * @access protected
-        * @return int Timestamp
-        */
-       public function date_asctime($date)
-       {
-               static $pcre;
-               if (!$pcre)
-               {
-                       $space = '[\x09\x20]+';
-                       $wday_name = $this->day_pcre;
-                       $mon_name = $this->month_pcre;
-                       $day = '([0-9]{1,2})';
-                       $hour = $sec = $min = '([0-9]{2})';
-                       $year = '([0-9]{4})';
-                       $terminator = '\x0A?\x00?';
-                       $pcre = '/^' . $wday_name . $space . $mon_name . $space . $day . $space . $hour . ':' . $min . ':' . $sec . $space . $year . $terminator . '$/i';
-               }
-               if (preg_match($pcre, $date, $match))
-               {
-                       /*
-                       Capturing subpatterns:
-                       1: Day name
-                       2: Month
-                       3: Day
-                       4: Hour
-                       5: Minute
-                       6: Second
-                       7: Year
-                       */
-
-                       $month = $this->month[strtolower($match[2])];
-                       return gmmktime($match[4], $match[5], $match[6], $month, $match[3], $match[7]);
-               }
-               else
-               {
-                       return false;
-               }
-       }
-
-       /**
-        * Parse dates using strtotime()
-        *
-        * @access protected
-        * @return int Timestamp
-        */
-       public function date_strtotime($date)
-       {
-               $strtotime = strtotime($date);
-               if ($strtotime === -1 || $strtotime === false)
-               {
-                       return false;
-               }
-               else
-               {
-                       return $strtotime;
-               }
-       }
-}
-
-/**
- * Parses XML into something sane
- *
- *
- * This class can be overloaded with {@see SimplePie::set_parser_class()}
- *
- * @package SimplePie
- * @subpackage Parsing
- */
-class SimplePie_Parser
-{
-       var $error_code;
-       var $error_string;
-       var $current_line;
-       var $current_column;
-       var $current_byte;
-       var $separator = ' ';
-       var $namespace = array('');
-       var $element = array('');
-       var $xml_base = array('');
-       var $xml_base_explicit = array(false);
-       var $xml_lang = array('');
-       var $data = array();
-       var $datas = array(array());
-       var $current_xhtml_construct = -1;
-       var $encoding;
-       protected $registry;
-
-       public function set_registry(SimplePie_Registry $registry)
-       {
-               $this->registry = $registry;
-       }
-
-       public function parse(&$data, $encoding)
-       {
-               // Use UTF-8 if we get passed US-ASCII, as every US-ASCII character is a UTF-8 character
-               if (strtoupper($encoding) === 'US-ASCII')
-               {
-                       $this->encoding = 'UTF-8';
-               }
-               else
-               {
-                       $this->encoding = $encoding;
-               }
-
-               // Strip BOM:
-               // UTF-32 Big Endian BOM
-               if (substr($data, 0, 4) === "\x00\x00\xFE\xFF")
-               {
-                       $data = substr($data, 4);
-               }
-               // UTF-32 Little Endian BOM
-               elseif (substr($data, 0, 4) === "\xFF\xFE\x00\x00")
-               {
-                       $data = substr($data, 4);
-               }
-               // UTF-16 Big Endian BOM
-               elseif (substr($data, 0, 2) === "\xFE\xFF")
-               {
-                       $data = substr($data, 2);
-               }
-               // UTF-16 Little Endian BOM
-               elseif (substr($data, 0, 2) === "\xFF\xFE")
-               {
-                       $data = substr($data, 2);
-               }
-               // UTF-8 BOM
-               elseif (substr($data, 0, 3) === "\xEF\xBB\xBF")
-               {
-                       $data = substr($data, 3);
-               }
-
-               if (substr($data, 0, 5) === '<?xml' && strspn(substr($data, 5, 1), "\x09\x0A\x0D\x20") && ($pos = strpos($data, '?>')) !== false)
-               {
-                       $declaration = $this->registry->create('XML_Declaration_Parser', array(substr($data, 5, $pos - 5)));
-                       if ($declaration->parse())
-                       {
-                               $data = substr($data, $pos + 2);
-                               $data = '<?xml version="' . $declaration->version . '" encoding="' . $encoding . '" standalone="' . (($declaration->standalone) ? 'yes' : 'no') . '"?>' . $data;
-                       }
-                       else
-                       {
-                               $this->error_string = 'SimplePie bug! Please report this!';
-                               return false;
-                       }
-               }
-
-               $return = true;
-
-               static $xml_is_sane = null;
-               if ($xml_is_sane === null)
-               {
-                       $parser_check = xml_parser_create();
-                       xml_parse_into_struct($parser_check, '<foo>&amp;</foo>', $values);
-                       xml_parser_free($parser_check);
-                       $xml_is_sane = isset($values[0]['value']);
-               }
-
-               // Create the parser
-               if ($xml_is_sane)
-               {
-                       $xml = xml_parser_create_ns($this->encoding, $this->separator);
-                       xml_parser_set_option($xml, XML_OPTION_SKIP_WHITE, 1);
-                       xml_parser_set_option($xml, XML_OPTION_CASE_FOLDING, 0);
-                       xml_set_object($xml, $this);
-                       xml_set_character_data_handler($xml, 'cdata');
-                       xml_set_element_handler($xml, 'tag_open', 'tag_close');
-
-                       // Parse!
-                       if (!xml_parse($xml, $data, true))
-                       {
-                               $this->error_code = xml_get_error_code($xml);
-                               $this->error_string = xml_error_string($this->error_code);
-                               $return = false;
-                       }
-                       $this->current_line = xml_get_current_line_number($xml);
-                       $this->current_column = xml_get_current_column_number($xml);
-                       $this->current_byte = xml_get_current_byte_index($xml);
-                       xml_parser_free($xml);
-                       return $return;
-               }
-               else
-               {
-                       libxml_clear_errors();
-                       $xml = new XMLReader();
-                       $xml->xml($data);
-                       while (@$xml->read())
-                       {
-                               switch ($xml->nodeType)
-                               {
-
-                                       case constant('XMLReader::END_ELEMENT'):
-                                               if ($xml->namespaceURI !== '')
-                                               {
-                                                       $tagName = $xml->namespaceURI . $this->separator . $xml->localName;
-                                               }
-                                               else
-                                               {
-                                                       $tagName = $xml->localName;
-                                               }
-                                               $this->tag_close(null, $tagName);
-                                               break;
-                                       case constant('XMLReader::ELEMENT'):
-                                               $empty = $xml->isEmptyElement;
-                                               if ($xml->namespaceURI !== '')
-                                               {
-                                                       $tagName = $xml->namespaceURI . $this->separator . $xml->localName;
-                                               }
-                                               else
-                                               {
-                                                       $tagName = $xml->localName;
-                                               }
-                                               $attributes = array();
-                                               while ($xml->moveToNextAttribute())
-                                               {
-                                                       if ($xml->namespaceURI !== '')
-                                                       {
-                                                               $attrName = $xml->namespaceURI . $this->separator . $xml->localName;
-                                                       }
-                                                       else
-                                                       {
-                                                               $attrName = $xml->localName;
-                                                       }
-                                                       $attributes[$attrName] = $xml->value;
-                                               }
-                                               $this->tag_open(null, $tagName, $attributes);
-                                               if ($empty)
-                                               {
-                                                       $this->tag_close(null, $tagName);
-                                               }
-                                               break;
-                                       case constant('XMLReader::TEXT'):
-
-                                       case constant('XMLReader::CDATA'):
-                                               $this->cdata(null, $xml->value);
-                                               break;
-                               }
-                       }
-                       if ($error = libxml_get_last_error())
-                       {
-                               $this->error_code = $error->code;
-                               $this->error_string = $error->message;
-                               $this->current_line = $error->line;
-                               $this->current_column = $error->column;
-                               return false;
-                       }
-                       else
-                       {
-                               return true;
-                       }
-               }
-       }
-
-       public function get_error_code()
-       {
-               return $this->error_code;
-       }
-
-       public function get_error_string()
-       {
-               return $this->error_string;
-       }
-
-       public function get_current_line()
-       {
-               return $this->current_line;
-       }
-
-       public function get_current_column()
-       {
-               return $this->current_column;
-       }
-
-       public function get_current_byte()
-       {
-               return $this->current_byte;
-       }
-
-       public function get_data()
-       {
-               return $this->data;
-       }
-
-       public function tag_open($parser, $tag, $attributes)
-       {
-               list($this->namespace[], $this->element[]) = $this->split_ns($tag);
-
-               $attribs = array();
-               foreach ($attributes as $name => $value)
-               {
-                       list($attrib_namespace, $attribute) = $this->split_ns($name);
-                       $attribs[$attrib_namespace][$attribute] = $value;
-               }
-
-               if (isset($attribs[SIMPLEPIE_NAMESPACE_XML]['base']))
-               {
-                       $base = $this->registry->call('Misc', 'absolutize_url', array($attribs[SIMPLEPIE_NAMESPACE_XML]['base'], end($this->xml_base)));
-                       if ($base !== false)
-                       {
-                               $this->xml_base[] = $base;
-                               $this->xml_base_explicit[] = true;
-                       }
-               }
-               else
-               {
-                       $this->xml_base[] = end($this->xml_base);
-                       $this->xml_base_explicit[] = end($this->xml_base_explicit);
-               }
-
-               if (isset($attribs[SIMPLEPIE_NAMESPACE_XML]['lang']))
-               {
-                       $this->xml_lang[] = $attribs[SIMPLEPIE_NAMESPACE_XML]['lang'];
-               }
-               else
-               {
-                       $this->xml_lang[] = end($this->xml_lang);
-               }
-
-               if ($this->current_xhtml_construct >= 0)
-               {
-                       $this->current_xhtml_construct++;
-                       if (end($this->namespace) === SIMPLEPIE_NAMESPACE_XHTML)
-                       {
-                               $this->data['data'] .= '<' . end($this->element);
-                               if (isset($attribs['']))
-                               {
-                                       foreach ($attribs[''] as $name => $value)
-                                       {
-                                               $this->data['data'] .= ' ' . $name . '="' . htmlspecialchars($value, ENT_COMPAT, $this->encoding) . '"';
-                                       }
-                               }
-                               $this->data['data'] .= '>';
-                       }
-               }
-               else
-               {
-                       $this->datas[] =& $this->data;
-                       $this->data =& $this->data['child'][end($this->namespace)][end($this->element)][];
-                       $this->data = array('data' => '', 'attribs' => $attribs, 'xml_base' => end($this->xml_base), 'xml_base_explicit' => end($this->xml_base_explicit), 'xml_lang' => end($this->xml_lang));
-                       if ((end($this->namespace) === SIMPLEPIE_NAMESPACE_ATOM_03 && in_array(end($this->element), array('title', 'tagline', 'copyright', 'info', 'summary', 'content')) && isset($attribs['']['mode']) && $attribs['']['mode'] === 'xml')
-                       || (end($this->namespace) === SIMPLEPIE_NAMESPACE_ATOM_10 && in_array(end($this->element), array('rights', 'subtitle', 'summary', 'info', 'title', 'content')) && isset($attribs['']['type']) && $attribs['']['type'] === 'xhtml')
-                       || (end($this->namespace) === SIMPLEPIE_NAMESPACE_RSS_20 && in_array(end($this->element), array('title')))
-                       || (end($this->namespace) === SIMPLEPIE_NAMESPACE_RSS_090 && in_array(end($this->element), array('title')))
-                       || (end($this->namespace) === SIMPLEPIE_NAMESPACE_RSS_10 && in_array(end($this->element), array('title'))))
-                       {
-                               $this->current_xhtml_construct = 0;
-                       }
-               }
-       }
-
-       public function cdata($parser, $cdata)
-       {
-               if ($this->current_xhtml_construct >= 0)
-               {
-                       $this->data['data'] .= htmlspecialchars($cdata, ENT_QUOTES, $this->encoding);
-               }
-               else
-               {
-                       $this->data['data'] .= $cdata;
-               }
-       }
-
-       public function tag_close($parser, $tag)
-       {
-               if ($this->current_xhtml_construct >= 0)
-               {
-                       $this->current_xhtml_construct--;
-                       if (end($this->namespace) === SIMPLEPIE_NAMESPACE_XHTML && !in_array(end($this->element), array('area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', 'img', 'input', 'isindex', 'link', 'meta', 'param')))
-                       {
-                               $this->data['data'] .= '</' . end($this->element) . '>';
-                       }
-               }
-               if ($this->current_xhtml_construct === -1)
-               {
-                       $this->data =& $this->datas[count($this->datas) - 1];
-                       array_pop($this->datas);
-               }
-
-               array_pop($this->element);
-               array_pop($this->namespace);
-               array_pop($this->xml_base);
-               array_pop($this->xml_base_explicit);
-               array_pop($this->xml_lang);
-       }
-
-       public function split_ns($string)
-       {
-               static $cache = array();
-               if (!isset($cache[$string]))
-               {
-                       if ($pos = strpos($string, $this->separator))
-                       {
-                               static $separator_length;
-                               if (!$separator_length)
-                               {
-                                       $separator_length = strlen($this->separator);
-                               }
-                               $namespace = substr($string, 0, $pos);
-                               $local_name = substr($string, $pos + $separator_length);
-                               if (strtolower($namespace) === SIMPLEPIE_NAMESPACE_ITUNES)
-                               {
-                                       $namespace = SIMPLEPIE_NAMESPACE_ITUNES;
-                               }
-
-                               // Normalize the Media RSS namespaces
-                               if ($namespace === SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG ||
-                                       $namespace === SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG2 ||
-                                       $namespace === SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG3 ||
-                                       $namespace === SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG4 ||
-                                       $namespace === SIMPLEPIE_NAMESPACE_MEDIARSS_WRONG5 )
-                               {
-                                       $namespace = SIMPLEPIE_NAMESPACE_MEDIARSS;
-                               }
-                               $cache[$string] = array($namespace, $local_name);
-                       }
-                       else
-                       {
-                               $cache[$string] = array('', $string);
-                       }
-               }
-               return $cache[$string];
-       }
-}
-
-/**
- * Handles `<media:rating>` or `<itunes:explicit>` tags as defined in Media RSS and iTunes RSS respectively
- *
- * Used by {@see SimplePie_Enclosure::get_rating()} and {@see SimplePie_Enclosure::get_ratings()}
- *
- * This class can be overloaded with {@see SimplePie::set_rating_class()}
- *
- * @package SimplePie
- * @subpackage API
- */
-class SimplePie_Rating
-{
-       /**
-        * Rating scheme
-        *
-        * @var string
-        * @see get_scheme()
-        */
-       var $scheme;
-
-       /**
-        * Rating value
-        *
-        * @var string
-        * @see get_value()
-        */
-       var $value;
-
-       /**
-        * Constructor, used to input the data
-        *
-        * For documentation on all the parameters, see the corresponding
-        * properties and their accessors
-        */
-       public function __construct($scheme = null, $value = null)
-       {
-               $this->scheme = $scheme;
-               $this->value = $value;
-       }
-
-       /**
-        * String-ified version
-        *
-        * @return string
-        */
-       public function __toString()
-       {
-               // There is no $this->data here
-               return md5(serialize($this));
-       }
-
-       /**
-        * Get the organizational scheme for the rating
-        *
-        * @return string|null
-        */
-       public function get_scheme()
-       {
-               if ($this->scheme !== null)
-               {
-                       return $this->scheme;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the value of the rating
-        *
-        * @return string|null
-        */
-       public function get_value()
-       {
-               if ($this->value !== null)
-               {
-                       return $this->value;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-}
-
-/**
- * Handles creating objects and calling methods
- *
- * Access this via {@see SimplePie::get_registry()}
- *
- * @package SimplePie
- */
-class SimplePie_Registry
-{
-       /**
-        * Default class mapping
-        *
-        * Overriding classes *must* subclass these.
-        *
-        * @var array
-        */
-       protected $default = array(
-               'Cache' => 'SimplePie_Cache',
-               'Locator' => 'SimplePie_Locator',
-               'Parser' => 'SimplePie_Parser',
-               'File' => 'SimplePie_File',
-               'Sanitize' => 'SimplePie_Sanitize',
-               'Item' => 'SimplePie_Item',
-               'Author' => 'SimplePie_Author',
-               'Category' => 'SimplePie_Category',
-               'Enclosure' => 'SimplePie_Enclosure',
-               'Caption' => 'SimplePie_Caption',
-               'Copyright' => 'SimplePie_Copyright',
-               'Credit' => 'SimplePie_Credit',
-               'Rating' => 'SimplePie_Rating',
-               'Restriction' => 'SimplePie_Restriction',
-               'Content_Type_Sniffer' => 'SimplePie_Content_Type_Sniffer',
-               'Source' => 'SimplePie_Source',
-               'Misc' => 'SimplePie_Misc',
-               'XML_Declaration_Parser' => 'SimplePie_XML_Declaration_Parser',
-               'Parse_Date' => 'SimplePie_Parse_Date',
-       );
-
-       /**
-        * Class mapping
-        *
-        * @see register()
-        * @var array
-        */
-       protected $classes = array();
-
-       /**
-        * Legacy classes
-        *
-        * @see register()
-        * @var array
-        */
-       protected $legacy = array();
-
-       /**
-        * Constructor
-        *
-        * No-op
-        */
-       public function __construct() { }
-
-       /**
-        * Register a class
-        *
-        * @param string $type See {@see $default} for names
-        * @param string $class Class name, must subclass the corresponding default
-        * @param bool $legacy Whether to enable legacy support for this class
-        * @return bool Successfulness
-        */
-       public function register($type, $class, $legacy = false)
-       {
-               if (!is_subclass_of($class, $this->default[$type]))
-               {
-                       return false;
-               }
-
-               $this->classes[$type] = $class;
-
-               if ($legacy)
-               {
-                       $this->legacy[] = $class;
-               }
-
-               return true;
-       }
-
-       /**
-        * Get the class registered for a type
-        *
-        * Where possible, use {@see create()} or {@see call()} instead
-        *
-        * @param string $type
-        * @return string|null
-        */
-       public function get_class($type)
-       {
-               if (!empty($this->classes[$type]))
-               {
-                       return $this->classes[$type];
-               }
-               if (!empty($this->default[$type]))
-               {
-                       return $this->default[$type];
-               }
-
-               return null;
-       }
-
-       /**
-        * Create a new instance of a given type
-        *
-        * @param string $type
-        * @param array $parameters Parameters to pass to the constructor
-        * @return object Instance of class
-        */
-       public function &create($type, $parameters = array())
-       {
-               $class = $this->get_class($type);
-
-               if (in_array($class, $this->legacy))
-               {
-                       switch ($type)
-                       {
-                               case 'locator':
-                                       // Legacy: file, timeout, useragent, file_class, max_checked_feeds, content_type_sniffer_class
-                                       // Specified: file, timeout, useragent, max_checked_feeds
-                                       $replacement = array($this->get_class('file'), $parameters[3], $this->get_class('content_type_sniffer'));
-                                       array_splice($parameters, 3, 1, $replacement);
-                                       break;
-                       }
-               }
-
-               if (!method_exists($class, '__construct'))
-               {
-                       $instance = new $class;
-               }
-               else
-               {
-                       $reflector = new ReflectionClass($class);
-                       $instance = $reflector->newInstanceArgs($parameters);
-               }
-
-               if (method_exists($instance, 'set_registry'))
-               {
-                       $instance->set_registry($this);
-               }
-               return $instance;
-       }
-
-       /**
-        * Call a static method for a type
-        *
-        * @param string $type
-        * @param string $method
-        * @param array $parameters
-        * @return mixed
-        */
-       public function &call($type, $method, $parameters = array())
-       {
-               $class = $this->get_class($type);
-
-               if (in_array($class, $this->legacy))
-               {
-                       switch ($type)
-                       {
-                               case 'Cache':
-                                       // For backwards compatibility with old non-static
-                                       // Cache::create() methods
-                                       if ($method === 'get_handler')
-                                       {
-                                               $result = @call_user_func_array(array($class, 'create'), $parameters);
-                                               return $result;
-                                       }
-                                       break;
-                       }
-               }
-
-               $result = call_user_func_array(array($class, $method), $parameters);
-               return $result;
-       }
-}
-
-/**
- * Handles `<media:restriction>` as defined in Media RSS
- *
- * Used by {@see SimplePie_Enclosure::get_restriction()} and {@see SimplePie_Enclosure::get_restrictions()}
- *
- * This class can be overloaded with {@see SimplePie::set_restriction_class()}
- *
- * @package SimplePie
- * @subpackage API
- */
-class SimplePie_Restriction
-{
-       /**
-        * Relationship ('allow'/'deny')
-        *
-        * @var string
-        * @see get_relationship()
-        */
-       var $relationship;
-
-       /**
-        * Type of restriction
-        *
-        * @var string
-        * @see get_type()
-        */
-       var $type;
-
-       /**
-        * Restricted values
-        *
-        * @var string
-        * @see get_value()
-        */
-       var $value;
-
-       /**
-        * Constructor, used to input the data
-        *
-        * For documentation on all the parameters, see the corresponding
-        * properties and their accessors
-        */
-       public function __construct($relationship = null, $type = null, $value = null)
-       {
-               $this->relationship = $relationship;
-               $this->type = $type;
-               $this->value = $value;
-       }
-
-       /**
-        * String-ified version
-        *
-        * @return string
-        */
-       public function __toString()
-       {
-               // There is no $this->data here
-               return md5(serialize($this));
-       }
-
-       /**
-        * Get the relationship
-        *
-        * @return string|null Either 'allow' or 'deny'
-        */
-       public function get_relationship()
-       {
-               if ($this->relationship !== null)
-               {
-                       return $this->relationship;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the type
-        *
-        * @return string|null
-        */
-       public function get_type()
-       {
-               if ($this->type !== null)
-               {
-                       return $this->type;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Get the list of restricted things
-        *
-        * @return string|null
-        */
-       public function get_value()
-       {
-               if ($this->value !== null)
-               {
-                       return $this->value;
-               }
-               else
-               {
-                       return null;
-               }
-       }
-}
-
-/**
- * Used for data cleanup and post-processing
- *
- *
- * This class can be overloaded with {@see SimplePie::set_sanitize_class()}
- *
- * @package SimplePie
- * @todo Move to using an actual HTML parser (this will allow tags to be properly stripped, and to switch between HTML and XHTML), this will also make it easier to shorten a string while preserving HTML tags
- */
-class SimplePie_Sanitize
-{
-       // Private vars
-       var $base;
-
-       // Options
-       var $remove_div = true;
-       var $image_handler = '';
-       var $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style');
-       var $encode_instead_of_strip = false;
-       var $strip_attributes = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc');
-       var $strip_comments = false;
-       var $output_encoding = 'UTF-8';
-       var $enable_cache = true;
-       var $cache_location = './cache';
-       var $cache_name_function = 'md5';
-       var $timeout = 10;
-       var $useragent = '';
-       var $force_fsockopen = false;
-       var $replace_url_attributes = null;
-
-       public function __construct()
-       {
-               // Set defaults
-               $this->set_url_replacements(null);
-       }
-
-       public function remove_div($enable = true)
-       {
-               $this->remove_div = (bool) $enable;
-       }
-
-       public function set_image_handler($page = false)
-       {
-               if ($page)
-               {
-                       $this->image_handler = (string) $page;
-               }
-               else
-               {
-                       $this->image_handler = false;
-               }
-       }
-
-       public function set_registry(SimplePie_Registry $registry)
-       {
-               $this->registry = $registry;
-       }
-
-       public function pass_cache_data($enable_cache = true, $cache_location = './cache', $cache_name_function = 'md5', $cache_class = 'SimplePie_Cache')
-       {
-               if (isset($enable_cache))
-               {
-                       $this->enable_cache = (bool) $enable_cache;
-               }
-
-               if ($cache_location)
-               {
-                       $this->cache_location = (string) $cache_location;
-               }
-
-               if ($cache_name_function)
-               {
-                       $this->cache_name_function = (string) $cache_name_function;
-               }
-       }
-
-       public function pass_file_data($file_class = 'SimplePie_File', $timeout = 10, $useragent = '', $force_fsockopen = false)
-       {
-               if ($timeout)
-               {
-                       $this->timeout = (string) $timeout;
-               }
-
-               if ($useragent)
-               {
-                       $this->useragent = (string) $useragent;
-               }
-
-               if ($force_fsockopen)
-               {
-                       $this->force_fsockopen = (string) $force_fsockopen;
-               }
-       }
-
-       public function strip_htmltags($tags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style'))
-       {
-               if ($tags)
-               {
-                       if (is_array($tags))
-                       {
-                               $this->strip_htmltags = $tags;
-                       }
-                       else
-                       {
-                               $this->strip_htmltags = explode(',', $tags);
-                       }
-               }
-               else
-               {
-                       $this->strip_htmltags = false;
-               }
-       }
-
-       public function encode_instead_of_strip($encode = false)
-       {
-               $this->encode_instead_of_strip = (bool) $encode;
-       }
-
-       public function strip_attributes($attribs = array('bgsound', 'class', 'expr', 'id', 'style', 'onclick', 'onerror', 'onfinish', 'onmouseover', 'onmouseout', 'onfocus', 'onblur', 'lowsrc', 'dynsrc'))
-       {
-               if ($attribs)
-               {
-                       if (is_array($attribs))
-                       {
-                               $this->strip_attributes = $attribs;
-                       }
-                       else
-                       {
-                               $this->strip_attributes = explode(',', $attribs);
-                       }
-               }
-               else
-               {
-                       $this->strip_attributes = false;
-               }
-       }
-
-       public function strip_comments($strip = false)
-       {
-               $this->strip_comments = (bool) $strip;
-       }
-
-       public function set_output_encoding($encoding = 'UTF-8')
-       {
-               $this->output_encoding = (string) $encoding;
-       }
-
-       /**
-        * Set element/attribute key/value pairs of HTML attributes
-        * containing URLs that need to be resolved relative to the feed
-        *
-        * Defaults to |a|@href, |area|@href, |blockquote|@cite, |del|@cite,
-        * |form|@action, |img|@longdesc, |img|@src, |input|@src, |ins|@cite,
-        * |q|@cite
-        *
-        * @since 1.0
-        * @param array|null $element_attribute Element/attribute key/value pairs, null for default
-        */
-       public function set_url_replacements($element_attribute = null)
-       {
-               if ($element_attribute === null)
-               {
-                       $element_attribute = array(
-                               'a' => 'href',
-                               'area' => 'href',
-                               'blockquote' => 'cite',
-                               'del' => 'cite',
-                               'form' => 'action',
-                               'img' => array(
-                                       'longdesc',
-                                       'src'
-                               ),
-                               'input' => 'src',
-                               'ins' => 'cite',
-                               'q' => 'cite'
-                       );
-               }
-               $this->replace_url_attributes = (array) $element_attribute;
-       }
-
-       public function sanitize($data, $type, $base = '')
-       {
-               $data = trim($data);
-               if ($data !== '' || $type & SIMPLEPIE_CONSTRUCT_IRI)
-               {
-                       if ($type & SIMPLEPIE_CONSTRUCT_MAYBE_HTML)
-                       {
-                               if (preg_match('/(&(#(x[0-9a-fA-F]+|[0-9]+)|[a-zA-Z0-9]+)|<\/[A-Za-z][^\x09\x0A\x0B\x0C\x0D\x20\x2F\x3E]*' . SIMPLEPIE_PCRE_HTML_ATTRIBUTE . '>)/', $data))
-                               {
-                                       $type |= SIMPLEPIE_CONSTRUCT_HTML;
-                               }
-                               else
-                               {
-                                       $type |= SIMPLEPIE_CONSTRUCT_TEXT;
-                               }
-                       }
-
-                       if ($type & SIMPLEPIE_CONSTRUCT_BASE64)
-                       {
-                               $data = base64_decode($data);
-                       }
-
-                       if ($type & (SIMPLEPIE_CONSTRUCT_HTML | SIMPLEPIE_CONSTRUCT_XHTML))
-                       {
-
-                               $document = new DOMDocument();
-                               $document->encoding = 'UTF-8';
-                               $data = $this->preprocess($data, $type);
-
-                               set_error_handler(array('SimplePie_Misc', 'silence_errors'));
-                               $document->loadHTML($data);
-                               restore_error_handler();
-
-                               // Strip comments
-                               if ($this->strip_comments)
-                               {
-                                       $xpath = new DOMXPath($document);
-                                       $comments = $xpath->query('//comment()');
-
-                                       foreach ($comments as $comment)
-                                       {
-                                               $comment->parentNode->removeChild($comment);
-                                       }
-                               }
-
-                               // Strip out HTML tags and attributes that might cause various security problems.
-                               // Based on recommendations by Mark Pilgrim at:
-                               // http://diveintomark.org/archives/2003/06/12/how_to_consume_rss_safely
-                               if ($this->strip_htmltags)
-                               {
-                                       foreach ($this->strip_htmltags as $tag)
-                                       {
-                                               $this->strip_tag($tag, $document, $type);
-                                       }
-                               }
-
-                               if ($this->strip_attributes)
-                               {
-                                       foreach ($this->strip_attributes as $attrib)
-                                       {
-                                               $this->strip_attr($attrib, $document);
-                                       }
-                               }
-
-                               // Replace relative URLs
-                               $this->base = $base;
-                               foreach ($this->replace_url_attributes as $element => $attributes)
-                               {
-                                       $this->replace_urls($document, $element, $attributes);
-                               }
-
-                               // If image handling (caching, etc.) is enabled, cache and rewrite all the image tags.
-                               if (isset($this->image_handler) && ((string) $this->image_handler) !== '' && $this->enable_cache)
-                               {
-                                       $images = $document->getElementsByTagName('img');
-                                       foreach ($images as $img)
-                                       {
-                                               if ($img->hasAttribute('src'))
-                                               {
-                                                       $image_url = call_user_func($this->cache_name_function, $img->getAttribute('src'));
-                                                       $cache = $this->registry->call('Cache', 'get_handler', array($this->cache_location, $image_url, 'spi'));
-
-                                                       if ($cache->load())
-                                                       {
-                                                               $img->setAttribute('src', $this->image_handler . $image_url);
-                                                       }
-                                                       else
-                                                       {
-                                                               $file = $this->registry->create('File', array($img['attribs']['src']['data'], $this->timeout, 5, array('X-FORWARDED-FOR' => $_SERVER['REMOTE_ADDR']), $this->useragent, $this->force_fsockopen));
-                                                               $headers = $file->headers;
-
-                                                               if ($file->success && ($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($file->status_code === 200 || $file->status_code > 206 && $file->status_code < 300)))
-                                                               {
-                                                                       if ($cache->save(array('headers' => $file->headers, 'body' => $file->body)))
-                                                                       {
-                                                                               $img->setAttribute('src', $this->image_handler . $image_url);
-                                                                       }
-                                                                       else
-                                                                       {
-                                                                               trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
-                                                                       }
-                                                               }
-                                                       }
-                                               }
-                                       }
-                               }
-
-                               // Remove the DOCTYPE
-                               // Seems to cause segfaulting if we don't do this
-                               if ($document->firstChild instanceof DOMDocumentType)
-                               {
-                                       $document->removeChild($document->firstChild);
-                               }
-
-                               // Move everything from the body to the root
-                               $real_body = $document->getElementsByTagName('body')->item(0)->childNodes->item(0);
-                               $document->replaceChild($real_body, $document->firstChild);
-
-                               // Finally, convert to a HTML string
-                               $data = trim($document->saveHTML());
-
-                               if ($this->remove_div)
-                               {
-                                       $data = preg_replace('/^<div' . SIMPLEPIE_PCRE_XML_ATTRIBUTE . '>/', '', $data);
-                                       $data = preg_replace('/<\/div>$/', '', $data);
-                               }
-                               else
-                               {
-                                       $data = preg_replace('/^<div' . SIMPLEPIE_PCRE_XML_ATTRIBUTE . '>/', '<div>', $data);
-                               }
-                       }
-
-                       if ($type & SIMPLEPIE_CONSTRUCT_IRI)
-                       {
-                               $absolute = $this->registry->call('Misc', 'absolutize_url', array($data, $base));
-                               if ($absolute !== false)
-                               {
-                                       $data = $absolute;
-                               }
-                       }
-
-                       if ($type & (SIMPLEPIE_CONSTRUCT_TEXT | SIMPLEPIE_CONSTRUCT_IRI))
-                       {
-                               $data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8');
-                       }
-
-                       if ($this->output_encoding !== 'UTF-8')
-                       {
-                               $data = $this->registry->call('Misc', 'change_encoding', array($data, 'UTF-8', $this->output_encoding));
-                       }
-               }
-               return $data;
-       }
-
-       protected function preprocess($html, $type)
-       {
-               $ret = '';
-               if ($type & ~SIMPLEPIE_CONSTRUCT_XHTML)
-               {
-                       // Atom XHTML constructs are wrapped with a div by default
-                       // Note: No protection if $html contains a stray </div>!
-                       $html = '<div>' . $html . '</div>';
-                       $ret .= '<!DOCTYPE html>';
-                       $content_type = 'text/html';
-               }
-               else
-               {
-                       $ret .= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">';
-                       $content_type = 'application/xhtml+xml';
-               }
-
-               $ret .= '<html><head>';
-               $ret .= '<meta http-equiv="Content-Type" content="' . $content_type . '; charset=utf-8" />';
-               $ret .= '</head><body>' . $html . '</body></html>';
-               return $ret;
-       }
-
-       public function replace_urls($document, $tag, $attributes)
-       {
-               if (!is_array($attributes))
-               {
-                       $attributes = array($attributes);
-               }
-
-               if (!is_array($this->strip_htmltags) || !in_array($tag, $this->strip_htmltags))
-               {
-                       $elements = $document->getElementsByTagName($tag);
-                       foreach ($elements as $element)
-                       {
-                               foreach ($attributes as $attribute)
-                               {
-                                       if ($element->hasAttribute($attribute))
-                                       {
-                                               $value = $this->registry->call('Misc', 'absolutize_url', array($element->getAttribute($attribute), $this->base));
-                                               if ($value !== false)
-                                               {
-                                                       $element->setAttribute($attribute, $value);
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
-
-       public function do_strip_htmltags($match)
-       {
-               if ($this->encode_instead_of_strip)
-               {
-                       if (isset($match[4]) && !in_array(strtolower($match[1]), array('script', 'style')))
-                       {
-                               $match[1] = htmlspecialchars($match[1], ENT_COMPAT, 'UTF-8');
-                               $match[2] = htmlspecialchars($match[2], ENT_COMPAT, 'UTF-8');
-                               return "&lt;$match[1]$match[2]&gt;$match[3]&lt;/$match[1]&gt;";
-                       }
-                       else
-                       {
-                               return htmlspecialchars($match[0], ENT_COMPAT, 'UTF-8');
-                       }
-               }
-               elseif (isset($match[4]) && !in_array(strtolower($match[1]), array('script', 'style')))
-               {
-                       return $match[4];
-               }
-               else
-               {
-                       return '';
-               }
-       }
-
-       protected function strip_tag($tag, $document, $type)
-       {
-               $xpath = new DOMXPath($document);
-               $elements = $xpath->query('body//' . $tag);
-               if ($this->encode_instead_of_strip)
-               {
-                       foreach ($elements as $element)
-                       {
-                               $fragment = $document->createDocumentFragment();
-
-                               // For elements which aren't script or style, include the tag itself
-                               if (!in_array($tag, array('script', 'style')))
-                               {
-                                       $text = '<' . $tag;
-                                       if ($element->hasAttributes())
-                                       {
-                                               $attrs = array();
-                                               foreach ($element->attributes as $name => $attr)
-                                               {
-                                                       $value = $attr->value;
-
-                                                       // In XHTML, empty values should never exist, so we repeat the value
-                                                       if (empty($value) && ($type & SIMPLEPIE_CONSTRUCT_XHTML))
-                                                       {
-                                                               $value = $name;
-                                                       }
-                                                       // For HTML, empty is fine
-                                                       elseif (empty($value) && ($type & SIMPLEPIE_CONSTRUCT_HTML))
-                                                       {
-                                                               $attrs[] = $name;
-                                                               continue;
-                                                       }
-
-                                                       // Standard attribute text
-                                                       $attrs[] = $name . '="' . $attr->value . '"';
-                                               }
-                                               $text .= ' ' . implode(' ', $attrs);
-                                       }
-                                       $text .= '>';
-                                       $fragment->appendChild(new DOMText($text));
-                               }
-
-                               $number = $element->childNodes->length;
-                               for ($i = $number; $i > 0; $i--)
-                               {
-                                       $child = $element->childNodes->item(0);
-                                       $fragment->appendChild($child);
-                               }
-
-                               if (!in_array($tag, array('script', 'style')))
-                               {
-                                       $fragment->appendChild(new DOMText('</' . $tag . '>'));
-                               }
-
-                               $element->parentNode->replaceChild($fragment, $element);
-                       }
-
-                       return;
-               }
-               elseif (in_array($tag, array('script', 'style')))
-               {
-                       foreach ($elements as $element)
-                       {
-                               $element->parentNode->removeChild($element);
-                       }
-
-                       return;
-               }
-               else
-               {
-                       foreach ($elements as $element)
-                       {
-                               $fragment = $document->createDocumentFragment();
-                               $number = $element->childNodes->length;
-                               for ($i = $number; $i > 0; $i--)
-                               {
-                                       $child = $element->childNodes->item(0);
-                                       $fragment->appendChild($child);
-                               }
-
-                               $element->parentNode->replaceChild($fragment, $element);
-                       }
-               }
-       }
-
-       protected function strip_attr($attrib, $document)
-       {
-               $xpath = new DOMXPath($document);
-               $elements = $xpath->query('//*[@' . $attrib . ']');
-
-               foreach ($elements as $element)
-               {
-                       $element->removeAttribute($attrib);
-               }
-       }
-}
-
-/**
- * Handles `<atom:source>`
- *
- * Used by {@see SimplePie_Item::get_source()}
- *
- * This class can be overloaded with {@see SimplePie::set_source_class()}
- *
- * @package SimplePie
- * @subpackage API
- */
-class SimplePie_Source
-{
-       var $item;
-       var $data = array();
-       protected $registry;
-
-       public function __construct($item, $data)
-       {
-               $this->item = $item;
-               $this->data = $data;
-       }
-
-       public function set_registry(SimplePie_Registry $registry)
-       {
-               $this->registry = $registry;
-       }
-
-       public function __toString()
-       {
-               return md5(serialize($this->data));
-       }
-
-       public function get_source_tags($namespace, $tag)
-       {
-               if (isset($this->data['child'][$namespace][$tag]))
-               {
-                       return $this->data['child'][$namespace][$tag];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       public function get_base($element = array())
-       {
-               return $this->item->get_base($element);
-       }
-
-       public function sanitize($data, $type, $base = '')
-       {
-               return $this->item->sanitize($data, $type, $base);
-       }
-
-       public function get_item()
-       {
-               return $this->item;
-       }
-
-       public function get_title()
-       {
-               if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'title'))
-               {
-                       return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'title'))
-               {
-                       return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'title'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'title'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'title'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'title'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'title'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       public function get_category($key = 0)
-       {
-               $categories = $this->get_categories();
-               if (isset($categories[$key]))
-               {
-                       return $categories[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       public function get_categories()
-       {
-               $categories = array();
-
-               foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category)
-               {
-                       $term = null;
-                       $scheme = null;
-                       $label = null;
-                       if (isset($category['attribs']['']['term']))
-                       {
-                               $term = $this->sanitize($category['attribs']['']['term'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($category['attribs']['']['scheme']))
-                       {
-                               $scheme = $this->sanitize($category['attribs']['']['scheme'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($category['attribs']['']['label']))
-                       {
-                               $label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       $categories[] = $this->registry->create('Category', array($term, $scheme, $label));
-               }
-               foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category)
-               {
-                       // This is really the label, but keep this as the term also for BC.
-                       // Label will also work on retrieving because that falls back to term.
-                       $term = $this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       if (isset($category['attribs']['']['domain']))
-                       {
-                               $scheme = $this->sanitize($category['attribs']['']['domain'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       else
-                       {
-                               $scheme = null;
-                       }
-                       $categories[] = $this->registry->create('Category', array($term, $scheme, null));
-               }
-               foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category)
-               {
-                       $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
-               }
-               foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category)
-               {
-                       $categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
-               }
-
-               if (!empty($categories))
-               {
-                       return array_unique($categories);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       public function get_author($key = 0)
-       {
-               $authors = $this->get_authors();
-               if (isset($authors[$key]))
-               {
-                       return $authors[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       public function get_authors()
-       {
-               $authors = array();
-               foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'author') as $author)
-               {
-                       $name = null;
-                       $uri = null;
-                       $email = null;
-                       if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
-                       {
-                               $name = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
-                       {
-                               $uri = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]));
-                       }
-                       if (isset($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data']))
-                       {
-                               $email = $this->sanitize($author['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if ($name !== null || $email !== null || $uri !== null)
-                       {
-                               $authors[] = $this->registry->create('Author', array($name, $uri, $email));
-                       }
-               }
-               if ($author = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'author'))
-               {
-                       $name = null;
-                       $url = null;
-                       $email = null;
-                       if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data']))
-                       {
-                               $name = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data']))
-                       {
-                               $url = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]));
-                       }
-                       if (isset($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data']))
-                       {
-                               $email = $this->sanitize($author[0]['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if ($name !== null || $email !== null || $url !== null)
-                       {
-                               $authors[] = $this->registry->create('Author', array($name, $url, $email));
-                       }
-               }
-               foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'creator') as $author)
-               {
-                       $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
-               }
-               foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'creator') as $author)
-               {
-                       $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
-               }
-               foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'author') as $author)
-               {
-                       $authors[] = $this->registry->create('Author', array($this->sanitize($author['data'], SIMPLEPIE_CONSTRUCT_TEXT), null, null));
-               }
-
-               if (!empty($authors))
-               {
-                       return array_unique($authors);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       public function get_contributor($key = 0)
-       {
-               $contributors = $this->get_contributors();
-               if (isset($contributors[$key]))
-               {
-                       return $contributors[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       public function get_contributors()
-       {
-               $contributors = array();
-               foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'contributor') as $contributor)
-               {
-                       $name = null;
-                       $uri = null;
-                       $email = null;
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data']))
-                       {
-                               $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data']))
-                       {
-                               $uri = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['uri'][0]));
-                       }
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data']))
-                       {
-                               $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_10]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if ($name !== null || $email !== null || $uri !== null)
-                       {
-                               $contributors[] = $this->registry->create('Author', array($name, $uri, $email));
-                       }
-               }
-               foreach ((array) $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'contributor') as $contributor)
-               {
-                       $name = null;
-                       $url = null;
-                       $email = null;
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data']))
-                       {
-                               $name = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['name'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data']))
-                       {
-                               $url = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['url'][0]));
-                       }
-                       if (isset($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data']))
-                       {
-                               $email = $this->sanitize($contributor['child'][SIMPLEPIE_NAMESPACE_ATOM_03]['email'][0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-                       }
-                       if ($name !== null || $email !== null || $url !== null)
-                       {
-                               $contributors[] = $this->registry->create('Author', array($name, $url, $email));
-                       }
-               }
-
-               if (!empty($contributors))
-               {
-                       return array_unique($contributors);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       public function get_link($key = 0, $rel = 'alternate')
-       {
-               $links = $this->get_links($rel);
-               if (isset($links[$key]))
-               {
-                       return $links[$key];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       /**
-        * Added for parity between the parent-level and the item/entry-level.
-        */
-       public function get_permalink()
-       {
-               return $this->get_link(0);
-       }
-
-       public function get_links($rel = 'alternate')
-       {
-               if (!isset($this->data['links']))
-               {
-                       $this->data['links'] = array();
-                       if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'link'))
-                       {
-                               foreach ($links as $link)
-                               {
-                                       if (isset($link['attribs']['']['href']))
-                                       {
-                                               $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
-                                               $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
-                                       }
-                               }
-                       }
-                       if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'link'))
-                       {
-                               foreach ($links as $link)
-                               {
-                                       if (isset($link['attribs']['']['href']))
-                                       {
-                                               $link_rel = (isset($link['attribs']['']['rel'])) ? $link['attribs']['']['rel'] : 'alternate';
-                                               $this->data['links'][$link_rel][] = $this->sanitize($link['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($link));
-
-                                       }
-                               }
-                       }
-                       if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'link'))
-                       {
-                               $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
-                       }
-                       if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'link'))
-                       {
-                               $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
-                       }
-                       if ($links = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'link'))
-                       {
-                               $this->data['links']['alternate'][] = $this->sanitize($links[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($links[0]));
-                       }
-
-                       $keys = array_keys($this->data['links']);
-                       foreach ($keys as $key)
-                       {
-                               if ($this->registry->call('Misc', 'is_isegment_nz_nc', array($key)))
-                               {
-                                       if (isset($this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]))
-                                       {
-                                               $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] = array_merge($this->data['links'][$key], $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key]);
-                                               $this->data['links'][$key] =& $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key];
-                                       }
-                                       else
-                                       {
-                                               $this->data['links'][SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY . $key] =& $this->data['links'][$key];
-                                       }
-                               }
-                               elseif (substr($key, 0, 41) === SIMPLEPIE_IANA_LINK_RELATIONS_REGISTRY)
-                               {
-                                       $this->data['links'][substr($key, 41)] =& $this->data['links'][$key];
-                               }
-                               $this->data['links'][$key] = array_unique($this->data['links'][$key]);
-                       }
-               }
-
-               if (isset($this->data['links'][$rel]))
-               {
-                       return $this->data['links'][$rel];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       public function get_description()
-       {
-               if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'subtitle'))
-               {
-                       return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'tagline'))
-               {
-                       return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       public function get_copyright()
-       {
-               if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'rights'))
-               {
-                       return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'copyright'))
-               {
-                       return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'copyright'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'rights'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'rights'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       public function get_language()
-       {
-               if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'language'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_11, 'language'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_DC_10, 'language'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               elseif (isset($this->data['xml_lang']))
-               {
-                       return $this->sanitize($this->data['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT);
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       public function get_latitude()
-       {
-               if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lat'))
-               {
-                       return (float) $return[0]['data'];
-               }
-               elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
-               {
-                       return (float) $match[1];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       public function get_longitude()
-       {
-               if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'long'))
-               {
-                       return (float) $return[0]['data'];
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_W3C_BASIC_GEO, 'lon'))
-               {
-                       return (float) $return[0]['data'];
-               }
-               elseif (($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_GEORSS, 'point')) && preg_match('/^((?:-)?[0-9]+(?:\.[0-9]+)) ((?:-)?[0-9]+(?:\.[0-9]+))$/', trim($return[0]['data']), $match))
-               {
-                       return (float) $match[2];
-               }
-               else
-               {
-                       return null;
-               }
-       }
-
-       public function get_image_url()
-       {
-               if ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'image'))
-               {
-                       return $this->sanitize($return[0]['attribs']['']['href'], SIMPLEPIE_CONSTRUCT_IRI);
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'logo'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
-               }
-               elseif ($return = $this->get_source_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'icon'))
-               {
-                       return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
-               }
-               else
-               {
-                       return null;
-               }
-       }
-}
-
-/**
- * Parses the XML Declaration
- *
- * @package SimplePie
- * @subpackage Parsing
- */
-class SimplePie_XML_Declaration_Parser
-{
-       /**
-        * XML Version
-        *
-        * @access public
-        * @var string
-        */
-       var $version = '1.0';
-
-       /**
-        * Encoding
-        *
-        * @access public
-        * @var string
-        */
-       var $encoding = 'UTF-8';
-
-       /**
-        * Standalone
-        *
-        * @access public
-        * @var bool
-        */
-       var $standalone = false;
-
-       /**
-        * Current state of the state machine
-        *
-        * @access private
-        * @var string
-        */
-       var $state = 'before_version_name';
-
-       /**
-        * Input data
-        *
-        * @access private
-        * @var string
-        */
-       var $data = '';
-
-       /**
-        * Input data length (to avoid calling strlen() everytime this is needed)
-        *
-        * @access private
-        * @var int
-        */
-       var $data_length = 0;
-
-       /**
-        * Current position of the pointer
-        *
-        * @var int
-        * @access private
-        */
-       var $position = 0;
-
-       /**
-        * Create an instance of the class with the input data
-        *
-        * @access public
-        * @param string $data Input data
-        */
-       public function __construct($data)
-       {
-               $this->data = $data;
-               $this->data_length = strlen($this->data);
-       }
-
-       /**
-        * Parse the input data
-        *
-        * @access public
-        * @return bool true on success, false on failure
-        */
-       public function parse()
-       {
-               while ($this->state && $this->state !== 'emit' && $this->has_data())
-               {
-                       $state = $this->state;
-                       $this->$state();
-               }
-               $this->data = '';
-               if ($this->state === 'emit')
-               {
-                       return true;
-               }
-               else
-               {
-                       $this->version = '';
-                       $this->encoding = '';
-                       $this->standalone = '';
-                       return false;
-               }
-       }
-
-       /**
-        * Check whether there is data beyond the pointer
-        *
-        * @access private
-        * @return bool true if there is further data, false if not
-        */
-       public function has_data()
-       {
-               return (bool) ($this->position < $this->data_length);
-       }
-
-       /**
-        * Advance past any whitespace
-        *
-        * @return int Number of whitespace characters passed
-        */
-       public function skip_whitespace()
-       {
-               $whitespace = strspn($this->data, "\x09\x0A\x0D\x20", $this->position);
-               $this->position += $whitespace;
-               return $whitespace;
-       }
-
-       /**
-        * Read value
-        */
-       public function get_value()
-       {
-               $quote = substr($this->data, $this->position, 1);
-               if ($quote === '"' || $quote === "'")
-               {
-                       $this->position++;
-                       $len = strcspn($this->data, $quote, $this->position);
-                       if ($this->has_data())
-                       {
-                               $value = substr($this->data, $this->position, $len);
-                               $this->position += $len + 1;
-                               return $value;
-                       }
-               }
-               return false;
-       }
-
-       public function before_version_name()
-       {
-               if ($this->skip_whitespace())
-               {
-                       $this->state = 'version_name';
-               }
-               else
-               {
-                       $this->state = false;
-               }
-       }
-
-       public function version_name()
-       {
-               if (substr($this->data, $this->position, 7) === 'version')
-               {
-                       $this->position += 7;
-                       $this->skip_whitespace();
-                       $this->state = 'version_equals';
-               }
-               else
-               {
-                       $this->state = false;
-               }
-       }
-
-       public function version_equals()
-       {
-               if (substr($this->data, $this->position, 1) === '=')
-               {
-                       $this->position++;
-                       $this->skip_whitespace();
-                       $this->state = 'version_value';
-               }
-               else
-               {
-                       $this->state = false;
-               }
-       }
-
-       public function version_value()
-       {
-               if ($this->version = $this->get_value())
-               {
-                       $this->skip_whitespace();
-                       if ($this->has_data())
-                       {
-                               $this->state = 'encoding_name';
-                       }
-                       else
-                       {
-                               $this->state = 'emit';
-                       }
-               }
-               else
-               {
-                       $this->state = false;
-               }
-       }
-
-       public function encoding_name()
-       {
-               if (substr($this->data, $this->position, 8) === 'encoding')
-               {
-                       $this->position += 8;
-                       $this->skip_whitespace();
-                       $this->state = 'encoding_equals';
-               }
-               else
-               {
-                       $this->state = 'standalone_name';
-               }
-       }
-
-       public function encoding_equals()
-       {
-               if (substr($this->data, $this->position, 1) === '=')
-               {
-                       $this->position++;
-                       $this->skip_whitespace();
-                       $this->state = 'encoding_value';
-               }
-               else
-               {
-                       $this->state = false;
-               }
-       }
-
-       public function encoding_value()
-       {
-               if ($this->encoding = $this->get_value())
-               {
-                       $this->skip_whitespace();
-                       if ($this->has_data())
-                       {
-                               $this->state = 'standalone_name';
-                       }
-                       else
-                       {
-                               $this->state = 'emit';
-                       }
-               }
-               else
-               {
-                       $this->state = false;
-               }
-       }
-
-       public function standalone_name()
-       {
-               if (substr($this->data, $this->position, 10) === 'standalone')
-               {
-                       $this->position += 10;
-                       $this->skip_whitespace();
-                       $this->state = 'standalone_equals';
-               }
-               else
-               {
-                       $this->state = false;
-               }
-       }
-
-       public function standalone_equals()
-       {
-               if (substr($this->data, $this->position, 1) === '=')
-               {
-                       $this->position++;
-                       $this->skip_whitespace();
-                       $this->state = 'standalone_value';
-               }
-               else
-               {
-                       $this->state = false;
-               }
-       }
-
-       public function standalone_value()
-       {
-               if ($standalone = $this->get_value())
-               {
-                       switch ($standalone)
-                       {
-                               case 'yes':
-                                       $this->standalone = true;
-                                       break;
-
-                               case 'no':
-                                       $this->standalone = false;
-                                       break;
-
-                               default:
-                                       $this->state = false;
-                                       return;
-                       }
-
-                       $this->skip_whitespace();
-                       if ($this->has_data())
-                       {
-                               $this->state = false;
-                       }
-                       else
-                       {
-                               $this->state = 'emit';
-                       }
-               }
-               else
-               {
-                       $this->state = false;
-               }
-       }
-}
-
index 40447152dec162940719a2df611263f71ddd3f30..16d4523d0cc9a1007ab7c7f44ee5983346d130f0 100644 (file)
Binary files a/locale/cs_CZ/LC_MESSAGES/messages.mo and b/locale/cs_CZ/LC_MESSAGES/messages.mo differ
index b136b237610359988b95e193fd0b7fce3f482891..2a47efcc70263b1fccc852e96f42e208bb2bdea4 100644 (file)
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-04-29 15:58+0400\n"
-"PO-Revision-Date: 2013-04-27 12:04+0200\n"
+"POT-Creation-Date: 2013-05-13 18:42+0200\n"
+"PO-Revision-Date: 2013-05-13 18:50+0200\n"
 "Last-Translator: Tomáš Chvátal <tomas.chvatal@gmail.com>\n"
 "Language-Team: Czech <kde-i18n-doc@kde.org>\n"
 "Language: cs\n"
@@ -91,8 +91,8 @@ msgid "Weekly"
 msgstr "Týdně"
 
 #: backend.php:103
-#: classes/pref/users.php:123
-#: classes/pref/system.php:44
+#: classes/pref/system.php:51
+#: classes/pref/users.php:119
 msgid "User"
 msgstr "Uživatel"
 
@@ -105,12 +105,20 @@ msgid "Administrator"
 msgstr "Administrátor"
 
 #: errors.php:9
-msgid "This program requires XmlHttpRequest to function properly. Your browser doesn't seem to support it."
-msgstr "Program vyžaduje pro správnou funkci XmlHttpRequest. Váš prohlížeč ji zřejmě nepodporuje."
+msgid ""
+"This program requires XmlHttpRequest to function properly. Your browser "
+"doesn't seem to support it."
+msgstr ""
+"Program vyžaduje pro správnou funkci XmlHttpRequest. Váš prohlížeč ji zřejmě "
+"nepodporuje."
 
 #: errors.php:12
-msgid "This program requires cookies to function properly. Your browser doesn't seem to support them."
-msgstr "Program vyžaduje pro správnou funkci povolené cookies. Váš prohlížeč je zřejmě nepodporuje."
+msgid ""
+"This program requires cookies to function properly. Your browser doesn't seem "
+"to support them."
+msgstr ""
+"Program vyžaduje pro správnou funkci povolené cookies. Váš prohlížeč je "
+"zřejmě nepodporuje."
 
 #: errors.php:15
 msgid "Backend sanity check failed."
@@ -121,8 +129,12 @@ msgid "Frontend sanity check failed."
 msgstr "Kontrola rozhraní selhala."
 
 #: errors.php:19
-msgid "Incorrect database schema version. &lt;a href='db-updater.php'&gt;Please update&lt;/a&gt;."
-msgstr "Nesprávná verze schématu databáze. &lt;a href='db-updater.php'&gt;Aktualizujte jej prosím&lt;/a&gt;."
+msgid ""
+"Incorrect database schema version. &lt;a href='db-updater.php'&gt;Please "
+"update&lt;/a&gt;."
+msgstr ""
+"Nesprávná verze schématu databáze. &lt;a "
+"href='db-updater.php'&gt;Aktualizujte jej prosím&lt;/a&gt;."
 
 #: errors.php:21
 msgid "Request not authorized."
@@ -133,8 +145,12 @@ msgid "No operation to perform."
 msgstr "Nic k provedení."
 
 #: errors.php:25
-msgid "Could not display feed: query failed. Please check label match syntax or local configuration."
-msgstr "Nelze zobrazit kanál: dotaz selhal. Zkontrolujte syntaxi detekce schody štítků a místní nastavení."
+msgid ""
+"Could not display feed: query failed. Please check label match syntax or "
+"local configuration."
+msgstr ""
+"Nelze zobrazit kanál: dotaz selhal. Zkontrolujte syntaxi detekce schody "
+"štítků a místní nastavení."
 
 #: errors.php:27
 msgid "Denied. Your access level is insufficient to access this page."
@@ -145,24 +161,29 @@ msgid "Configuration check failed"
 msgstr "Kontrola nastavení selhala"
 
 #: errors.php:31
-msgid "Your version of MySQL is not currently supported. Please see official site for more information."
-msgstr "Vaše verze MySQL není podporována. Více informací najdete na oficiálních stránkách."
+msgid ""
+"Your version of MySQL is not currently supported. Please see official site "
+"for more information."
+msgstr ""
+"Vaše verze MySQL není podporována. Více informací najdete na oficiálních "
+"stránkách."
 
 #: errors.php:35
 msgid "SQL escaping test failed, check your database and PHP configuration"
-msgstr "Test ochrany proti podvratným SQL dotazům (SQL Injection) selhal, zkontrolujte nastavení databáze a PHP"
+msgstr ""
+"Test ochrany proti podvratným SQL dotazům (SQL Injection) selhal, "
+"zkontrolujte nastavení databáze a PHP"
 
 #: index.php:128
 #: index.php:145
 #: index.php:265
 #: prefs.php:98
-#: classes/backend.php:5
 #: classes/pref/labels.php:296
-#: classes/pref/filters.php:680
-#: classes/pref/feeds.php:1388
-#: plugins/digest/digest_body.php:61
+#: classes/pref/feeds.php:1372
+#: classes/pref/filters.php:678
+#: classes/backend.php:5
 #: js/feedlist.js:128
-#: js/feedlist.js:439
+#: js/feedlist.js:441
 #: js/functions.js:446
 #: js/functions.js:784
 #: js/functions.js:1194
@@ -177,14 +198,14 @@ msgstr "Test ochrany proti podvratným SQL dotazům (SQL Injection) selhal, zkon
 #: js/prefs.js:1566
 #: js/prefs.js:1583
 #: js/prefs.js:1599
-#: js/prefs.js:1615
-#: js/prefs.js:1634
-#: js/prefs.js:1807
-#: js/prefs.js:1823
-#: js/tt-rss.js:506
-#: js/tt-rss.js:523
-#: js/viewfeed.js:820
-#: js/viewfeed.js:1249
+#: js/prefs.js:1619
+#: js/prefs.js:1792
+#: js/prefs.js:1808
+#: js/prefs.js:1826
+#: js/tt-rss.js:507
+#: js/tt-rss.js:524
+#: js/viewfeed.js:816
+#: js/viewfeed.js:1245
 #: plugins/import_export/import_export.js:17
 #: plugins/updater/updater.js:17
 msgid "Loading, please wait..."
@@ -207,13 +228,13 @@ msgid "All Articles"
 msgstr "Všechny články"
 
 #: index.php:167
-#: include/functions.php:2007
+#: include/functions.php:2008
 #: classes/feeds.php:98
 msgid "Starred"
 msgstr "S hvězdičkou"
 
 #: index.php:168
-#: include/functions.php:2008
+#: include/functions.php:2009
 #: classes/feeds.php:99
 msgid "Published"
 msgstr "Publikováno"
@@ -258,12 +279,11 @@ msgstr "Název"
 
 #: index.php:185
 #: index.php:233
-#: include/functions.php:1997
+#: include/functions.php:1998
 #: classes/feeds.php:103
-#: classes/feeds.php:441
+#: classes/feeds.php:424
 #: js/FeedTree.js:128
 #: js/FeedTree.js:156
-#: plugins/digest/digest.js:647
 msgid "Mark as read"
 msgstr "Označit jako přečtené"
 
@@ -304,7 +324,7 @@ msgid "Feed actions:"
 msgstr "Činnosti kanálů:"
 
 #: index.php:228
-#: classes/handler/public.php:559
+#: classes/handler/public.php:562
 msgid "Subscribe to feed..."
 msgstr "Přihlásit se k odběru..."
 
@@ -317,8 +337,8 @@ msgid "Rescore feed"
 msgstr "Přehodnotit kanál"
 
 #: index.php:231
-#: classes/pref/feeds.php:759
-#: classes/pref/feeds.php:1340
+#: classes/pref/feeds.php:746
+#: classes/pref/feeds.php:1327
 #: js/PrefFeedTree.js:73
 msgid "Unsubscribe"
 msgstr "Zrušit odběr"
@@ -336,7 +356,7 @@ msgid "Other actions:"
 msgstr "Ostatní činnosti:"
 
 #: index.php:236
-#: include/functions.php:1983
+#: include/functions.php:1984
 msgid "Toggle widescreen mode"
 msgstr "Přepnout širokoúhlý režim"
 
@@ -357,15 +377,12 @@ msgid "Keyboard shortcuts help"
 msgstr "Nápověda ke klávesovým zkratkám"
 
 #: index.php:249
-#: plugins/digest/digest_body.php:75
-#: plugins/mobile/mobile-functions.php:65
-#: plugins/mobile/mobile-functions.php:240
 msgid "Logout"
 msgstr "Odhlásit se"
 
 #: prefs.php:33
 #: prefs.php:116
-#: include/functions.php:2010
+#: include/functions.php:2011
 #: classes/pref/prefs.php:440
 msgid "Preferences"
 msgstr "Nastavení"
@@ -379,22 +396,21 @@ msgid "Exit preferences"
 msgstr "Opustit nastavení"
 
 #: prefs.php:119
-#: classes/pref/feeds.php:107
-#: classes/pref/feeds.php:1266
-#: classes/pref/feeds.php:1329
+#: classes/pref/feeds.php:106
+#: classes/pref/feeds.php:1253
+#: classes/pref/feeds.php:1316
 msgid "Feeds"
 msgstr "Kanály"
 
 #: prefs.php:122
-#: classes/pref/filters.php:156
+#: classes/pref/filters.php:154
 msgid "Filters"
 msgstr "Filtry"
 
 #: prefs.php:125
 #: include/functions.php:1176
-#: include/functions.php:1831
+#: include/functions.php:1832
 #: classes/pref/labels.php:90
-#: plugins/mobile/mobile-functions.php:201
 msgid "Labels"
 msgstr "Štítky"
 
@@ -403,9 +419,8 @@ msgid "Users"
 msgstr "Uživatelé"
 
 #: prefs.php:132
-#, fuzzy
 msgid "System"
-msgstr "Systémové moduly"
+msgstr "Systém"
 
 #: register.php:184
 #: include/login_form.php:238
@@ -424,19 +439,24 @@ msgstr "Registrace nových uživatelů jsou zakázány správcem."
 #: register.php:334
 #: register.php:344
 #: register.php:356
-#: classes/handler/public.php:629
-#: classes/handler/public.php:717
-#: classes/handler/public.php:799
-#: classes/handler/public.php:874
-#: classes/handler/public.php:888
-#: classes/handler/public.php:895
-#: classes/handler/public.php:920
+#: classes/handler/public.php:632
+#: classes/handler/public.php:723
+#: classes/handler/public.php:805
+#: classes/handler/public.php:880
+#: classes/handler/public.php:894
+#: classes/handler/public.php:901
+#: classes/handler/public.php:926
 msgid "Return to Tiny Tiny RSS"
 msgstr "Zpět do Tiny Tiny RSS"
 
 #: register.php:215
-msgid "Your temporary password will be sent to the specified email. Accounts, which were not logged in once, are erased automatically 24 hours after temporary password is sent."
-msgstr "Vaše dočasné heslo bude odesláno na zadaný e-mail. Účet, který se do 24 hodin od odeslání dočasného hesla nepřihlásí, bude smazán."
+msgid ""
+"Your temporary password will be sent to the specified email. Accounts, which "
+"were not logged in once, are erased automatically 24 hours after temporary "
+"password is sent."
+msgstr ""
+"Vaše dočasné heslo bude odesláno na zadaný e-mail. Účet, který se do 24 hodin "
+"od odeslání dočasného hesla nepřihlásí, bude smazán."
 
 #: register.php:221
 msgid "Desired login:"
@@ -447,12 +467,12 @@ msgid "Check availability"
 msgstr "Ověřit dostupnost"
 
 #: register.php:226
-#: classes/handler/public.php:757
+#: classes/handler/public.php:763
 msgid "Email:"
 msgstr "E-mail:"
 
 #: register.php:229
-#: classes/handler/public.php:762
+#: classes/handler/public.php:768
 msgid "How much is two plus two:"
 msgstr "Kolik je dva plus dva:"
 
@@ -486,11 +506,11 @@ msgstr "Skript aktualizace dat Tiny Tiny RSS."
 
 #: include/digest.php:109
 #: include/functions.php:1185
-#: include/functions.php:1732
-#: include/functions.php:1817
-#: include/functions.php:1839
+#: include/functions.php:1733
+#: include/functions.php:1818
+#: include/functions.php:1840
+#: classes/pref/feeds.php:218
 #: classes/opml.php:416
-#: classes/pref/feeds.php:220
 msgid "Uncategorized"
 msgstr "Bez zařazení"
 
@@ -507,301 +527,308 @@ msgid "No feeds found."
 msgstr "Nenalezeny žádné kanály."
 
 #: include/functions.php:1174
-#: include/functions.php:1829
-#: plugins/mobile/mobile-functions.php:174
+#: include/functions.php:1830
 msgid "Special"
 msgstr "Speciální"
 
 #: include/functions.php:1681
-#: classes/feeds.php:1110
-#: classes/pref/filters.php:427
+#: classes/pref/filters.php:425
+#: classes/feeds.php:1097
 msgid "All feeds"
 msgstr "Všechny kanály"
 
-#: include/functions.php:1884
+#: include/functions.php:1885
 msgid "Starred articles"
 msgstr "Články s hvězdičkou"
 
-#: include/functions.php:1886
+#: include/functions.php:1887
 msgid "Published articles"
 msgstr "Publikované články"
 
-#: include/functions.php:1888
+#: include/functions.php:1889
 msgid "Fresh articles"
 msgstr "Nové články"
 
-#: include/functions.php:1890
-#: include/functions.php:2005
+#: include/functions.php:1891
+#: include/functions.php:2006
 msgid "All articles"
 msgstr "Všechny články"
 
-#: include/functions.php:1892
+#: include/functions.php:1893
 msgid "Archived articles"
 msgstr "Archivované články"
 
-#: include/functions.php:1894
+#: include/functions.php:1895
 msgid "Recently read"
 msgstr "Nedávno přečtené"
 
-#: include/functions.php:1957
+#: include/functions.php:1958
 msgid "Navigation"
 msgstr "Navigace"
 
-#: include/functions.php:1958
+#: include/functions.php:1959
 msgid "Open next feed"
 msgstr "Otevřít následující kanál"
 
-#: include/functions.php:1959
+#: include/functions.php:1960
 msgid "Open previous feed"
 msgstr "Otevřít předchozí kanál"
 
-#: include/functions.php:1960
+#: include/functions.php:1961
 msgid "Open next article"
 msgstr "Otevřít následující článek"
 
-#: include/functions.php:1961
+#: include/functions.php:1962
 msgid "Open previous article"
 msgstr "Otevřít předchozí článek"
 
-#: include/functions.php:1962
+#: include/functions.php:1963
 msgid "Open next article (don't scroll long articles)"
 msgstr "Otevřít následující článek (neposouvat dlouhé články)"
 
-#: include/functions.php:1963
+#: include/functions.php:1964
 msgid "Open previous article (don't scroll long articles)"
 msgstr "Otevřít předchozí článek (neposouvat dlouhé články)"
 
-#: include/functions.php:1964
+#: include/functions.php:1965
 msgid "Move to next article (don't expand or mark read)"
-msgstr "Přejít na následující článek (nerozbalovat ani neoznačovat jako přečtené)"
+msgstr ""
+"Přejít na následující článek (nerozbalovat ani neoznačovat jako přečtené)"
 
-#: include/functions.php:1965
+#: include/functions.php:1966
 msgid "Move to previous article (don't expand or mark read)"
-msgstr "Přejít na předchozí článek (nerozbalovat ani neoznačovat jako přečtené)"
+msgstr ""
+"Přejít na předchozí článek (nerozbalovat ani neoznačovat jako přečtené)"
 
-#: include/functions.php:1966
+#: include/functions.php:1967
 msgid "Show search dialog"
 msgstr "Zobrazit dialog hledání"
 
-#: include/functions.php:1967
+#: include/functions.php:1968
 msgid "Article"
 msgstr "Článek"
 
-#: include/functions.php:1968
+#: include/functions.php:1969
 msgid "Toggle starred"
 msgstr "Přepnout hvězdičku"
 
-#: include/functions.php:1969
-#: js/viewfeed.js:1931
+#: include/functions.php:1970
+#: js/viewfeed.js:1906
 msgid "Toggle published"
 msgstr "Přepnout publikováno"
 
-#: include/functions.php:1970
-#: js/viewfeed.js:1909
+#: include/functions.php:1971
+#: js/viewfeed.js:1884
 msgid "Toggle unread"
 msgstr "Přepnout přečteno"
 
-#: include/functions.php:1971
+#: include/functions.php:1972
 msgid "Edit tags"
 msgstr "Upravit značky"
 
-#: include/functions.php:1972
+#: include/functions.php:1973
 msgid "Dismiss selected"
 msgstr ""
 
-#: include/functions.php:1973
+#: include/functions.php:1974
 msgid "Dismiss read"
 msgstr ""
 
-#: include/functions.php:1974
+#: include/functions.php:1975
 msgid "Open in new window"
 msgstr "Otevřít v novém okně"
 
-#: include/functions.php:1975
-#: js/viewfeed.js:1950
+#: include/functions.php:1976
+#: js/viewfeed.js:1925
 msgid "Mark below as read"
 msgstr "Označit níže jako přečtené"
 
-#: include/functions.php:1976
-#: js/viewfeed.js:1944
+#: include/functions.php:1977
+#: js/viewfeed.js:1919
 msgid "Mark above as read"
 msgstr "Označit výše jako přečtené"
 
-#: include/functions.php:1977
+#: include/functions.php:1978
 msgid "Scroll down"
 msgstr "Posunout dolů"
 
-#: include/functions.php:1978
+#: include/functions.php:1979
 msgid "Scroll up"
 msgstr "Posunout nahoru"
 
-#: include/functions.php:1979
+#: include/functions.php:1980
 msgid "Select article under cursor"
 msgstr "Vybrat článek pod kurzorem"
 
-#: include/functions.php:1980
+#: include/functions.php:1981
 msgid "Email article"
 msgstr "Odeslat článek e-mailem"
 
-#: include/functions.php:1981
+#: include/functions.php:1982
 msgid "Close/collapse article"
 msgstr "Zavřít/sbalit článek"
 
-#: include/functions.php:1982
+#: include/functions.php:1983
 msgid "Toggle article expansion (combined mode)"
 msgstr "Přepnout automatické rozbalení článku (kombinovaný režim)"
 
-#: include/functions.php:1984
+#: include/functions.php:1985
 #: plugins/embed_original/init.php:31
 msgid "Toggle embed original"
 msgstr "Přepnout vložený originál"
 
-#: include/functions.php:1985
+#: include/functions.php:1986
 msgid "Article selection"
 msgstr "Výběr článků"
 
-#: include/functions.php:1986
+#: include/functions.php:1987
 msgid "Select all articles"
 msgstr "Vybrat všechny články"
 
-#: include/functions.php:1987
+#: include/functions.php:1988
 msgid "Select unread"
 msgstr "Vybrat nepřečtené"
 
-#: include/functions.php:1988
+#: include/functions.php:1989
 msgid "Select starred"
 msgstr "Vybrat s hvězdičkou"
 
-#: include/functions.php:1989
+#: include/functions.php:1990
 msgid "Select published"
 msgstr "Vybrat publikované"
 
-#: include/functions.php:1990
+#: include/functions.php:1991
 msgid "Invert selection"
 msgstr "Obrátit výběr"
 
-#: include/functions.php:1991
+#: include/functions.php:1992
 msgid "Deselect everything"
 msgstr "Zrušit výběr"
 
-#: include/functions.php:1992
-#: classes/pref/feeds.php:553
-#: classes/pref/feeds.php:796
+#: include/functions.php:1993
+#: classes/pref/feeds.php:540
+#: classes/pref/feeds.php:783
 msgid "Feed"
 msgstr "Kanál"
 
-#: include/functions.php:1993
+#: include/functions.php:1994
 msgid "Refresh current feed"
 msgstr "Obnovit současný kanál"
 
-#: include/functions.php:1994
+#: include/functions.php:1995
 msgid "Un/hide read feeds"
 msgstr "Zobrazit/Skrýt přečtené kanály"
 
-#: include/functions.php:1995
-#: classes/pref/feeds.php:1332
+#: include/functions.php:1996
+#: classes/pref/feeds.php:1319
 msgid "Subscribe to feed"
 msgstr "Přihlásit se k odběru"
 
-#: include/functions.php:1996
+#: include/functions.php:1997
 #: js/FeedTree.js:135
 #: js/PrefFeedTree.js:67
 msgid "Edit feed"
 msgstr "Upravit kanál"
 
-#: include/functions.php:1998
+#: include/functions.php:1999
 msgid "Reverse headlines"
 msgstr "Obrácené řazení nadpisů "
 
-#: include/functions.php:1999
+#: include/functions.php:2000
 msgid "Debug feed update"
 msgstr "Ladit aktualizaci kanálů"
 
-#: include/functions.php:2000
+#: include/functions.php:2001
 #: js/FeedTree.js:178
 msgid "Mark all feeds as read"
 msgstr "Označit všechny kanály za přečtené"
 
-#: include/functions.php:2001
+#: include/functions.php:2002
 msgid "Un/collapse current category"
 msgstr "Rozbalit/sbalit aktuální kategorii"
 
-#: include/functions.php:2002
+#: include/functions.php:2003
 msgid "Toggle combined mode"
 msgstr "Přepnout kombinovaný režim"
 
-#: include/functions.php:2003
+#: include/functions.php:2004
 msgid "Toggle auto expand in combined mode"
 msgstr "Přepnout automatické rozbalení kombinovaném režimu"
 
-#: include/functions.php:2004
+#: include/functions.php:2005
 msgid "Go to"
 msgstr "Přejít na"
 
-#: include/functions.php:2006
+#: include/functions.php:2007
 msgid "Fresh"
 msgstr "Nové"
 
-#: include/functions.php:2009
-#: js/tt-rss.js:456
-#: js/tt-rss.js:615
+#: include/functions.php:2010
+#: js/tt-rss.js:457
+#: js/tt-rss.js:642
 msgid "Tag cloud"
 msgstr "Seznam značek"
 
-#: include/functions.php:2011
+#: include/functions.php:2012
 msgid "Other"
 msgstr "Ostatní"
 
-#: include/functions.php:2012
+#: include/functions.php:2013
 #: classes/pref/labels.php:281
 msgid "Create label"
 msgstr "Vytvořit štítek"
 
-#: include/functions.php:2013
-#: classes/pref/filters.php:654
+#: include/functions.php:2014
+#: classes/pref/filters.php:652
 msgid "Create filter"
 msgstr "Vytvořit filtr"
 
-#: include/functions.php:2014
+#: include/functions.php:2015
 msgid "Un/collapse sidebar"
 msgstr "Rozbalit/sbalit postranní lištu"
 
-#: include/functions.php:2015
+#: include/functions.php:2016
 msgid "Show help dialog"
 msgstr "Zobrazit nápovědu"
 
-#: include/functions.php:2536
+#: include/functions.php:2537
 #, php-format
 msgid "Search results: %s"
 msgstr "Výsledky hledání: %s"
 
-#: include/functions.php:3133
+#: include/functions.php:3132
 msgid " - "
 msgstr " - "
 
-#: include/functions.php:3155
-#: include/functions.php:3431
+#: include/functions.php:3154
+#: include/functions.php:3395
 #: classes/article.php:281
 msgid "no tags"
 msgstr "žádné značky"
 
-#: include/functions.php:3165
-#: classes/feeds.php:689
+#: include/functions.php:3164
+#: classes/feeds.php:676
 msgid "Edit tags for this article"
 msgstr "Upravit značky pro článek"
 
-#: include/functions.php:3197
-#: classes/feeds.php:641
+#: include/functions.php:3196
+#: classes/feeds.php:628
 msgid "Originally from:"
 msgstr "Původně z:"
 
-#: include/functions.php:3210
-#: classes/feeds.php:654
-#: classes/pref/feeds.php:572
+#: include/functions.php:3209
+#: classes/pref/feeds.php:559
+#: classes/feeds.php:641
 msgid "Feed URL"
 msgstr "URL kanálu"
 
-#: include/functions.php:3242
+#: include/functions.php:3241
+#: classes/pref/feeds.php:1626
+#: classes/pref/feeds.php:1694
+#: classes/pref/filters.php:145
+#: classes/pref/prefs.php:1096
+#: classes/pref/users.php:95
+#: classes/backend.php:105
 #: classes/dlg.php:37
 #: classes/dlg.php:60
 #: classes/dlg.php:93
@@ -810,47 +837,39 @@ msgstr "URL kanálu"
 #: classes/dlg.php:217
 #: classes/dlg.php:250
 #: classes/dlg.php:262
-#: classes/backend.php:105
-#: classes/pref/users.php:99
-#: classes/pref/filters.php:147
-#: classes/pref/prefs.php:1100
-#: classes/pref/feeds.php:1641
-#: classes/pref/feeds.php:1713
-#: plugins/import_export/init.php:405
-#: plugins/import_export/init.php:450
 #: plugins/googlereaderimport/init.php:193
+#: plugins/import_export/init.php:407
+#: plugins/import_export/init.php:452
 #: plugins/share/init.php:65
 #: plugins/updater/init.php:368
 msgid "Close this window"
 msgstr "Zavřít toto okno"
 
-#: include/functions.php:3458
+#: include/functions.php:3432
 msgid "(edit note)"
 msgstr "(upravit poznámku)"
 
-#: include/functions.php:3693
+#: include/functions.php:3667
 msgid "unknown type"
 msgstr "neznámý typ"
 
-#: include/functions.php:3749
+#: include/functions.php:3723
 msgid "Attachments"
 msgstr "Přílohy"
 
-#: include/functions.php:4248
+#: include/functions.php:4222
 #, php-format
 msgid "LibXML error %s at line %d (column %d): %s"
-msgstr ""
+msgstr "Chyba LibXML %s na řádku %d (sloupec %d): %s"
 
 #: include/login_form.php:183
 #: classes/handler/public.php:475
-#: classes/handler/public.php:752
-#: plugins/mobile/login_form.php:40
+#: classes/handler/public.php:758
 msgid "Login:"
 msgstr "Přihlášení:"
 
 #: include/login_form.php:194
 #: classes/handler/public.php:478
-#: plugins/mobile/login_form.php:45
 msgid "Password:"
 msgstr "Heslo:"
 
@@ -864,8 +883,8 @@ msgstr "Profil:"
 
 #: include/login_form.php:209
 #: classes/handler/public.php:233
+#: classes/pref/prefs.php:1034
 #: classes/rpc.php:63
-#: classes/pref/prefs.php:1036
 msgid "Default profile"
 msgstr "Výchozí profil"
 
@@ -876,6 +895,7 @@ msgstr "Generovat méně provozu"
 #: include/login_form.php:221
 msgid "Does not display images in articles, reduces automatic refreshes."
 msgstr ""
+"Nezobrazuje obrázky v článcích a tak snižuje potřebu pro automatické obnovení."
 
 #: include/login_form.php:229
 msgid "Remember me"
@@ -883,7 +903,6 @@ msgstr "Zapamatovat"
 
 #: include/login_form.php:235
 #: classes/handler/public.php:483
-#: plugins/mobile/login_form.php:28
 msgid "Log in"
 msgstr "Přihlásit"
 
@@ -891,52 +910,8 @@ msgstr "Přihlásit"
 msgid "Session failed to validate (incorrect IP)"
 msgstr "Nezdařilo se ověřit sezení (neplatné IP)"
 
-#: classes/article.php:25
-msgid "Article not found."
-msgstr "Článek nenalezen"
-
-#: classes/article.php:179
-msgid "Tags for this article (separated by commas):"
-msgstr "Značky článku (oddělené čárkami):"
-
-#: classes/article.php:204
-#: classes/pref/users.php:176
-#: classes/pref/labels.php:79
-#: classes/pref/filters.php:405
-#: classes/pref/prefs.php:982
-#: classes/pref/feeds.php:775
-#: classes/pref/feeds.php:923
-#: plugins/nsfw/init.php:83
-#: plugins/note/init.php:51
-#: plugins/instances/init.php:245
-msgid "Save"
-msgstr "Uložit"
-
-#: classes/article.php:206
-#: classes/handler/public.php:452
-#: classes/handler/public.php:486
-#: classes/feeds.php:1037
-#: classes/feeds.php:1089
-#: classes/feeds.php:1149
-#: classes/pref/users.php:178
-#: classes/pref/labels.php:81
-#: classes/pref/filters.php:408
-#: classes/pref/filters.php:803
-#: classes/pref/filters.php:879
-#: classes/pref/filters.php:946
-#: classes/pref/prefs.php:984
-#: classes/pref/feeds.php:776
-#: classes/pref/feeds.php:926
-#: classes/pref/feeds.php:1853
-#: plugins/mail/init.php:124
-#: plugins/note/init.php:53
-#: plugins/instances/init.php:248
-#: plugins/instances/init.php:436
-msgid "Cancel"
-msgstr "Zrušit"
-
 #: classes/handler/public.php:416
-#: plugins/bookmarklets/init.php:36
+#: plugins/bookmarklets/init.php:40
 msgid "Share with Tiny Tiny RSS"
 msgstr "Sdílet s Tiny Tiny RSS"
 
@@ -945,8 +920,8 @@ msgid "Title:"
 msgstr "Název:"
 
 #: classes/handler/public.php:426
-#: classes/pref/feeds.php:570
-#: classes/pref/feeds.php:811
+#: classes/pref/feeds.php:557
+#: classes/pref/feeds.php:798
 #: plugins/instances/init.php:212
 #: plugins/instances/init.php:401
 msgid "URL:"
@@ -968,788 +943,661 @@ msgstr "Sdílený článek se objeví v kanálu \"Publikováno\"."
 msgid "Share"
 msgstr "Sdílet"
 
+#: classes/handler/public.php:452
+#: classes/handler/public.php:486
+#: classes/pref/labels.php:81
+#: classes/pref/feeds.php:763
+#: classes/pref/feeds.php:913
+#: classes/pref/feeds.php:1834
+#: classes/pref/filters.php:406
+#: classes/pref/filters.php:801
+#: classes/pref/filters.php:877
+#: classes/pref/filters.php:944
+#: classes/pref/prefs.php:982
+#: classes/pref/users.php:174
+#: classes/article.php:206
+#: classes/feeds.php:1024
+#: classes/feeds.php:1076
+#: classes/feeds.php:1136
+#: plugins/instances/init.php:248
+#: plugins/instances/init.php:436
+#: plugins/mail/init.php:124
+#: plugins/note/init.php:53
+msgid "Cancel"
+msgstr "Zrušit"
+
 #: classes/handler/public.php:473
 msgid "Not logged in"
 msgstr "Nepřihlášený"
 
-#: classes/handler/public.php:529
+#: classes/handler/public.php:532
 msgid "Incorrect username or password"
 msgstr "Neplatné uživatelské jméno nebo heslo"
 
-#: classes/handler/public.php:565
-#: classes/handler/public.php:662
+#: classes/handler/public.php:568
+#: classes/handler/public.php:666
 #, php-format
 msgid "Already subscribed to <b>%s</b>."
 msgstr "Již odebíráte <b>%s</b>."
 
-#: classes/handler/public.php:568
-#: classes/handler/public.php:653
+#: classes/handler/public.php:571
+#: classes/handler/public.php:657
 #, php-format
 msgid "Subscribed to <b>%s</b>."
 msgstr "Zahájen odběr <b>%s</b>."
 
-#: classes/handler/public.php:571
-#: classes/handler/public.php:656
+#: classes/handler/public.php:574
+#: classes/handler/public.php:660
 #, php-format
 msgid "Could not subscribe to <b>%s</b>."
 msgstr "Nelze zahájit odběr <b>%s</b>."
 
-#: classes/handler/public.php:574
-#: classes/handler/public.php:659
+#: classes/handler/public.php:577
+#: classes/handler/public.php:663
 #, php-format
 msgid "No feeds found in <b>%s</b>."
 msgstr "Nenalezeny žádné kanály v <b>%s</b>."
 
-#: classes/handler/public.php:577
-#: classes/handler/public.php:665
+#: classes/handler/public.php:580
+#: classes/handler/public.php:669
 msgid "Multiple feed URLs found."
 msgstr "Nalezeno více URL kanálů."
 
-#: classes/handler/public.php:581
-#: classes/handler/public.php:670
+#: classes/handler/public.php:584
+#: classes/handler/public.php:676
 #, php-format
 msgid "Could not subscribe to <b>%s</b>.<br>Can't download the Feed URL."
 msgstr "Nelze zahájit odběr <b>%s</b>.<br>Nelze stáhnout URL kanálu."
 
-#: classes/handler/public.php:599
-#: classes/handler/public.php:688
+#: classes/handler/public.php:602
+#: classes/handler/public.php:694
 msgid "Subscribe to selected feed"
 msgstr "Zahájit odběr vybraných kanálů"
 
-#: classes/handler/public.php:624
-#: classes/handler/public.php:712
+#: classes/handler/public.php:627
+#: classes/handler/public.php:718
 msgid "Edit subscription options"
 msgstr "Upravit možnosti odebírání"
 
-#: classes/handler/public.php:739
+#: classes/handler/public.php:745
 msgid "Password recovery"
 msgstr "Obnova hesla"
 
-#: classes/handler/public.php:745
-msgid "You will need to provide valid account name and email. New password will be sent on your email address."
-msgstr "Musíte zadat platný název účtu a e-mailovou adresu. Nové heslo bude zasláno na vaši e-mailovou adresu."
+#: classes/handler/public.php:751
+msgid ""
+"You will need to provide valid account name and email. New password will be "
+"sent on your email address."
+msgstr ""
+"Musíte zadat platný název účtu a e-mailovou adresu. Nové heslo bude zasláno "
+"na vaši e-mailovou adresu."
 
-#: classes/handler/public.php:767
-#: classes/pref/users.php:360
+#: classes/handler/public.php:773
+#: classes/pref/users.php:356
 msgid "Reset password"
 msgstr "Obnovit heslo"
 
-#: classes/handler/public.php:777
+#: classes/handler/public.php:783
 msgid "Some of the required form parameters are missing or incorrect."
 msgstr "Některý z požadovaných parametrů chybí nebo je neplatný."
 
-#: classes/handler/public.php:781
-#: classes/handler/public.php:807
-#: plugins/digest/digest_body.php:67
+#: classes/handler/public.php:787
+#: classes/handler/public.php:813
 msgid "Go back"
 msgstr "Jít zpět"
 
-#: classes/handler/public.php:803
+#: classes/handler/public.php:809
 msgid "Sorry, login and email combination not found."
 msgstr "Lituji, kombinace e-mailové adresy a přihlašovacího jména nenalezena."
 
-#: classes/handler/public.php:823
+#: classes/handler/public.php:829
 msgid "Your access level is insufficient to run this script."
 msgstr "Vaše přístupová práva nejsou dostatečná pro spuštění skriptu."
 
-#: classes/handler/public.php:847
+#: classes/handler/public.php:853
 msgid "Database Updater"
 msgstr "Aktualizační nástroj databáze"
 
-#: classes/handler/public.php:912
+#: classes/handler/public.php:918
 msgid "Perform updates"
 msgstr "Provést aktualizace"
 
-#: classes/dlg.php:16
-msgid "If you have imported labels and/or filters, you might need to reload preferences to see your new data."
-msgstr "Pokud jste importovali štítky, či filtry, budete možná muset znovu načíst nastavení pro zobrazení nových dat."
+#: classes/pref/labels.php:22
+#: classes/pref/filters.php:266
+#: classes/pref/filters.php:722
+msgid "Caption"
+msgstr "Titulek"
 
-#: classes/dlg.php:48
-msgid "Your Public OPML URL is:"
-msgstr "Vaše veřejná URL OPML je:"
+#: classes/pref/labels.php:37
+msgid "Colors"
+msgstr "Barvy"
 
-#: classes/dlg.php:57
-#: classes/dlg.php:214
-msgid "Generate new URL"
-msgstr "Generovat novou URL"
+#: classes/pref/labels.php:42
+msgid "Foreground:"
+msgstr "Popředí:"
 
-#: classes/dlg.php:71
-msgid "Update daemon is enabled in configuration, but daemon process is not running, which prevents all feeds from updating. Please start the daemon process or contact instance owner."
-msgstr ""
+#: classes/pref/labels.php:42
+msgid "Background:"
+msgstr "Pozadí:"
 
-#: classes/dlg.php:75
-#: classes/dlg.php:84
-msgid "Last update:"
-msgstr "Poslední aktualizace:"
+#: classes/pref/labels.php:79
+#: classes/pref/feeds.php:762
+#: classes/pref/feeds.php:910
+#: classes/pref/filters.php:403
+#: classes/pref/prefs.php:980
+#: classes/pref/users.php:172
+#: classes/article.php:204
+#: plugins/instances/init.php:245
+#: plugins/note/init.php:51
+#: plugins/nsfw/init.php:83
+msgid "Save"
+msgstr "Uložit"
 
-#: classes/dlg.php:80
-msgid "Update daemon is taking too long to perform a feed update. This could indicate a problem like crash or a hang. Please check the daemon process or contact instance owner."
-msgstr "Démonu aktualizací trvá příliš dlouho aktualizace kanálu. Existuje možnost že se zasekl a nebo spadl. Zkontrolujte, prosím, stav procesu a nebo kontaktujte správce instance."
+#: classes/pref/labels.php:232
+#, php-format
+msgid "Created label <b>%s</b>"
+msgstr "Vytvořen štítek <b>%s</b>"
 
-#: classes/dlg.php:166
-msgid "Match:"
-msgstr "Odpovídá:"
+#: classes/pref/labels.php:272
+#: classes/pref/feeds.php:1307
+#: classes/pref/feeds.php:1572
+#: classes/pref/feeds.php:1638
+#: classes/pref/filters.php:277
+#: classes/pref/filters.php:325
+#: classes/pref/filters.php:643
+#: classes/pref/filters.php:731
+#: classes/pref/filters.php:758
+#: classes/pref/prefs.php:991
+#: classes/pref/users.php:338
+#: plugins/instances/init.php:284
+msgid "Select"
+msgstr "Vybrat"
 
-#: classes/dlg.php:168
-msgid "Any"
-msgstr "Cokoliv"
+#: classes/pref/labels.php:275
+#: classes/pref/feeds.php:1310
+#: classes/pref/feeds.php:1575
+#: classes/pref/feeds.php:1641
+#: classes/pref/filters.php:280
+#: classes/pref/filters.php:328
+#: classes/pref/filters.php:646
+#: classes/pref/filters.php:734
+#: classes/pref/filters.php:761
+#: classes/pref/prefs.php:994
+#: classes/pref/users.php:341
+#: classes/feeds.php:84
+#: plugins/instances/init.php:287
+msgid "All"
+msgstr "Vše"
 
-#: classes/dlg.php:171
-msgid "All tags."
-msgstr "Všechny značky."
-
-#: classes/dlg.php:173
-msgid "Which Tags?"
-msgstr "Jaké značky?"
-
-#: classes/dlg.php:186
-msgid "Display entries"
-msgstr "Zobrazit položky"
-
-#: classes/dlg.php:205
-msgid "You can view this feed as RSS using the following URL:"
-msgstr "Můžete zobrazit kanál jako RSS pomocí následující URL:"
-
-#: classes/dlg.php:233
-#: plugins/updater/init.php:331
-#, php-format
-msgid "New version of Tiny Tiny RSS is available (%s)."
-msgstr "Je dostupná nová verze Tiny Tiny RSS (%s)."
-
-#: classes/dlg.php:241
-msgid "You can update using built-in updater in the Preferences or by using update.php"
-msgstr "Aktualizovat můžete pomocí zabudovaného nástroje v Nastavení, nebo pomocí update.php"
-
-#: classes/dlg.php:245
-#: plugins/updater/init.php:335
-msgid "See the release notes"
-msgstr "Zobrazit poznámky k vydání"
-
-#: classes/dlg.php:247
-msgid "Download"
-msgstr "Stáhnout"
-
-#: classes/dlg.php:255
-msgid "Error receiving version information or no new version available."
-msgstr "Chyba při získávání informací o verzi, nebo není dostupná novější verze."
-
-#: classes/feeds.php:56
-#, fuzzy, php-format
-msgid "Last updated: %s"
-msgstr "Poslední aktualizace:"
-
-#: classes/feeds.php:75
-msgid "View as RSS feed"
-msgstr "Zobrazit jako kanál RSS"
-
-#: classes/feeds.php:76
-#: classes/feeds.php:128
-#: classes/pref/feeds.php:1496
-msgid "View as RSS"
-msgstr "Zobrazit jako RSS"
-
-#: classes/feeds.php:83
-msgid "Select:"
-msgstr "Vybrat:"
-
-#: classes/feeds.php:84
-#: classes/pref/users.php:345
-#: classes/pref/labels.php:275
+#: classes/pref/labels.php:277
+#: classes/pref/feeds.php:1312
+#: classes/pref/feeds.php:1577
+#: classes/pref/feeds.php:1643
 #: classes/pref/filters.php:282
 #: classes/pref/filters.php:330
 #: classes/pref/filters.php:648
 #: classes/pref/filters.php:736
 #: classes/pref/filters.php:763
 #: classes/pref/prefs.php:996
-#: classes/pref/feeds.php:1323
-#: classes/pref/feeds.php:1589
-#: classes/pref/feeds.php:1659
-#: plugins/instances/init.php:287
-msgid "All"
-msgstr "Vše"
-
-#: classes/feeds.php:86
-msgid "Invert"
-msgstr "Invertovat"
-
+#: classes/pref/users.php:343
 #: classes/feeds.php:87
-#: classes/pref/users.php:347
-#: classes/pref/labels.php:277
-#: classes/pref/filters.php:284
-#: classes/pref/filters.php:332
-#: classes/pref/filters.php:650
-#: classes/pref/filters.php:738
-#: classes/pref/filters.php:765
-#: classes/pref/prefs.php:998
-#: classes/pref/feeds.php:1325
-#: classes/pref/feeds.php:1591
-#: classes/pref/feeds.php:1661
 #: plugins/instances/init.php:289
 msgid "None"
 msgstr "Žádný"
 
-#: classes/feeds.php:93
-msgid "More..."
-msgstr "Více..."
-
-#: classes/feeds.php:95
-msgid "Selection toggle:"
-msgstr "Přepínač výběru:"
-
-#: classes/feeds.php:101
-msgid "Selection:"
-msgstr "Výběr:"
-
-#: classes/feeds.php:104
-msgid "Set score"
-msgstr "Zadat hodnocení"
-
-#: classes/feeds.php:107
-msgid "Archive"
-msgstr "Archivovat"
-
-#: classes/feeds.php:109
-msgid "Move back"
-msgstr "Zpět"
-
-#: classes/feeds.php:110
-#: classes/pref/filters.php:291
-#: classes/pref/filters.php:339
-#: classes/pref/filters.php:745
-#: classes/pref/filters.php:772
-msgid "Delete"
-msgstr "Smazat"
-
-#: classes/feeds.php:115
-#: classes/feeds.php:120
-#: plugins/mailto/init.php:25
-#: plugins/mail/init.php:26
-msgid "Forward by email"
-msgstr "Přeposlat e-mailem"
-
-#: classes/feeds.php:124
-msgid "Feed:"
-msgstr "Kanál:"
-
-#: classes/feeds.php:197
-#: classes/feeds.php:837
-msgid "Feed not found."
-msgstr "Kanál nenalezen."
-
-#: classes/feeds.php:254
-#, fuzzy
-msgid "Never"
-msgstr "Nikdy nečistit"
-
-#: classes/feeds.php:360
-#, php-format
-msgid "Imported at %s"
-msgstr "Importováno v %s"
-
-#: classes/feeds.php:535
-msgid "mark as read"
-msgstr "označit jako přečtené"
-
-#: classes/feeds.php:585
-msgid "Collapse article"
-msgstr "Sbalit článek"
-
-#: classes/feeds.php:738
-msgid "No unread articles found to display."
-msgstr "Nenalezeny žádné nepřečtené články k zobrazení."
-
-#: classes/feeds.php:741
-msgid "No updated articles found to display."
-msgstr "Nenalezeny žádné aktualizované články k zobrazení."
-
-#: classes/feeds.php:744
-msgid "No starred articles found to display."
-msgstr "Nenalezeny žádné články s hvězdičkou k zobrazení."
-
-#: classes/feeds.php:748
-msgid "No articles found to display. You can assign articles to labels manually from article header context menu (applies to all selected articles) or use a filter."
-msgstr "Žádné zobrazitelné články. Můžete článkům přiřadit štítky ručně z kontextové nabídky v hlavičce článku (platí pro všechny vybrané články) a nebo použít filtr."
-
-#: classes/feeds.php:750
-msgid "No articles found to display."
-msgstr "Nenalezeny žádné články ke zobrazení."
-
-#: classes/feeds.php:765
-#: classes/feeds.php:932
-#, php-format
-msgid "Feeds last updated at %s"
-msgstr "Kanál naposledy aktualizován v %s"
+#: classes/pref/labels.php:284
+#: classes/pref/feeds.php:733
+#: classes/pref/filters.php:396
+#: classes/pref/filters.php:665
+#: classes/pref/users.php:354
+#: classes/feeds.php:1075
+#: plugins/instances/init.php:294
+msgid "Remove"
+msgstr "Odstranit"
 
-#: classes/feeds.php:775
-#: classes/feeds.php:942
-msgid "Some feeds have update errors (click for details)"
-msgstr "Některé kanály měly problémy při aktualizaci (klikněte pro podrobnosti)"
+#: classes/pref/labels.php:287
+msgid "Clear colors"
+msgstr "Vymazat barvy"
 
-#: classes/feeds.php:922
-msgid "No feed selected."
-msgstr "Není vybrán žádný kanál."
+#: classes/pref/feeds.php:13
+msgid "Check to enable field"
+msgstr "Zaškrtněte pro povolení pole"
 
-#: classes/feeds.php:975
-#: classes/feeds.php:983
-msgid "Feed or site URL"
-msgstr "Kanál nebo URL stránky"
+#: classes/pref/feeds.php:546
+msgid "Feed Title"
+msgstr "Název kanálu"
 
-#: classes/feeds.php:989
-#: classes/pref/feeds.php:592
-#: classes/pref/feeds.php:824
-#: classes/pref/feeds.php:1817
+#: classes/pref/feeds.php:579
+#: classes/pref/feeds.php:811
+#: classes/pref/feeds.php:1798
+#: classes/feeds.php:976
 msgid "Place in category:"
 msgstr "Umístit v kategorii:"
 
-#: classes/feeds.php:997
-msgid "Available feeds"
-msgstr "Dostupné kanály"
+#: classes/pref/feeds.php:587
+#: classes/pref/feeds.php:822
+msgid "Update"
+msgstr "Aktualizovat"
 
-#: classes/feeds.php:1009
-#: classes/pref/users.php:139
-#: classes/pref/feeds.php:622
-#: classes/pref/feeds.php:860
+#: classes/pref/feeds.php:602
+#: classes/pref/feeds.php:838
+msgid "Article purging:"
+msgstr "Čištění článků:"
+
+#: classes/pref/feeds.php:609
+#: classes/pref/feeds.php:847
+#: classes/pref/users.php:135
+#: classes/feeds.php:996
 msgid "Authentication"
 msgstr "Ověření"
 
-#: classes/feeds.php:1013
-#: classes/pref/users.php:402
-#: classes/pref/feeds.php:628
-#: classes/pref/feeds.php:864
-#: classes/pref/feeds.php:1831
+#: classes/pref/feeds.php:615
+#: classes/pref/feeds.php:851
+#: classes/pref/feeds.php:1812
+#: classes/pref/users.php:398
+#: classes/feeds.php:1000
 msgid "Login"
 msgstr "Přihlášení"
 
-#: classes/feeds.php:1016
+#: classes/pref/feeds.php:628
+#: classes/pref/feeds.php:857
+#: classes/pref/feeds.php:1815
 #: classes/pref/prefs.php:260
-#: classes/pref/feeds.php:641
-#: classes/pref/feeds.php:870
-#: classes/pref/feeds.php:1834
+#: classes/feeds.php:1003
 msgid "Password"
 msgstr "Heslo"
 
-#: classes/feeds.php:1026
-msgid "This feed requires authentication."
-msgstr "Tento kanál vyžaduje ověření."
-
-#: classes/feeds.php:1031
-#: classes/feeds.php:1087
-#: classes/pref/feeds.php:1852
-msgid "Subscribe"
-msgstr "Odebírat"
-
-#: classes/feeds.php:1034
-msgid "More feeds"
-msgstr "Více kanálů"
-
-#: classes/feeds.php:1057
-#: classes/feeds.php:1148
-#: classes/pref/users.php:332
-#: classes/pref/filters.php:641
-#: classes/pref/feeds.php:1316
-#: js/tt-rss.js:173
-msgid "Search"
-msgstr "Hledat"
-
-#: classes/feeds.php:1061
-msgid "Popular feeds"
-msgstr "Oblíbené kanály"
-
-#: classes/feeds.php:1062
-msgid "Feed archive"
-msgstr "Archív kanálů"
-
-#: classes/feeds.php:1065
-msgid "limit:"
-msgstr "omezení:"
-
-#: classes/feeds.php:1088
-#: classes/pref/users.php:358
-#: classes/pref/labels.php:284
-#: classes/pref/filters.php:398
-#: classes/pref/filters.php:667
-#: classes/pref/feeds.php:746
-#: plugins/instances/init.php:294
-msgid "Remove"
-msgstr "Odstranit"
-
-#: classes/feeds.php:1099
-msgid "Look for"
-msgstr "Hledat"
-
-#: classes/feeds.php:1107
-msgid "Limit search to:"
-msgstr "Omezit hledání na:"
+#: classes/pref/feeds.php:632
+msgid ""
+"<b>Hint:</b> you need to fill in your login information if your feed requires "
+"authentication, except for Twitter feeds."
+msgstr ""
+"<b>Rada:</b> pokud váš kanál vyžaduje ověření, musíte zadat přihlašovací "
+"údaje, s výjimkou pro kanály Twitter."
 
-#: classes/feeds.php:1123
-msgid "This feed"
-msgstr "Tento kanál"
+#: classes/pref/feeds.php:636
+#: classes/pref/feeds.php:863
+#: classes/pref/users.php:157
+msgid "Options"
+msgstr "Možnosti"
 
-#: classes/backend.php:33
-msgid "Other interface tips are available in the Tiny Tiny RSS wiki."
-msgstr "Další tipy k používání rozhraní jsou dostupné ve wiki Tiny Tiny RSS."
+#: classes/pref/feeds.php:648
+#: classes/pref/feeds.php:867
+msgid "Hide from Popular feeds"
+msgstr "Skrýt před populárními kanály"
 
-#: classes/backend.php:38
-msgid "Keyboard Shortcuts"
-msgstr "Klávesové zkratky"
+#: classes/pref/feeds.php:660
+#: classes/pref/feeds.php:873
+msgid "Include in e-mail digest"
+msgstr "Začlenit do e-mailových souhrnů"
 
-#: classes/backend.php:61
-msgid "Shift"
-msgstr "Shift"
+#: classes/pref/feeds.php:673
+#: classes/pref/feeds.php:879
+msgid "Always display image attachments"
+msgstr "Vždy zobrazovat obrázkové přílohy"
 
-#: classes/backend.php:64
-msgid "Ctrl"
-msgstr "Ctrl"
+#: classes/pref/feeds.php:686
+#: classes/pref/feeds.php:887
+msgid "Do not embed images"
+msgstr "Nevkládat obrázky"
 
-#: classes/backend.php:99
-msgid "Help topic not found."
-msgstr "Téma nápovědy nenalezeno."
+#: classes/pref/feeds.php:699
+#: classes/pref/feeds.php:895
+msgid "Cache images locally"
+msgstr "Uchovávat obrázky na serveru"
 
-#: classes/opml.php:28
-#: classes/opml.php:33
-msgid "OPML Utility"
-msgstr "Nástroj OPML"
+#: classes/pref/feeds.php:711
+#: classes/pref/feeds.php:901
+msgid "Mark updated articles as unread"
+msgstr "Označit aktualizované články jako nepřečtené"
 
-#: classes/opml.php:37
-msgid "Importing OPML..."
-msgstr "Importuji OPML..."
+#: classes/pref/feeds.php:717
+msgid "Icon"
+msgstr "Ikona"
 
-#: classes/opml.php:41
-msgid "Return to preferences"
-msgstr "Zpět do nastavení"
+#: classes/pref/feeds.php:731
+msgid "Replace"
+msgstr "Nahradit"
 
-#: classes/opml.php:270
-#, php-format
-msgid "Adding feed: %s"
-msgstr "Přidávám kanál: %s"
+#: classes/pref/feeds.php:753
+msgid "Resubscribe to push updates"
+msgstr ""
 
-#: classes/opml.php:281
-#, php-format
-msgid "Duplicate feed: %s"
-msgstr "Duplicitní kanál: %s"
+#: classes/pref/feeds.php:760
+msgid "Resets PubSubHubbub subscription status for push-enabled feeds."
+msgstr ""
 
-#: classes/opml.php:295
-#, php-format
-msgid "Adding label %s"
-msgstr "Přidávám štítek %s"
+#: classes/pref/feeds.php:1156
+#: classes/pref/feeds.php:1209
+msgid "All done."
+msgstr "Vše hotovo."
 
-#: classes/opml.php:298
-#, php-format
-msgid "Duplicate label: %s"
-msgstr "Duplicitní štítek: %s"
+#: classes/pref/feeds.php:1264
+msgid "Feeds with errors"
+msgstr "Kanály s chybami"
 
-#: classes/opml.php:310
-#, php-format
-msgid "Setting preference key %s to %s"
-msgstr "Nastavuji klíč předvoleb %s na %s"
+#: classes/pref/feeds.php:1284
+msgid "Inactive feeds"
+msgstr "Neaktivní kanály"
 
-#: classes/opml.php:339
-msgid "Adding filter..."
-msgstr "Přidávám filtr..."
+#: classes/pref/feeds.php:1303
+#: classes/pref/filters.php:639
+#: classes/pref/users.php:328
+#: classes/feeds.php:1044
+#: classes/feeds.php:1135
+#: js/tt-rss.js:174
+msgid "Search"
+msgstr "Hledat"
 
-#: classes/opml.php:416
-#, php-format
-msgid "Processing category: %s"
-msgstr "Zpracovávám kategorii: %s"
+#: classes/pref/feeds.php:1321
+msgid "Edit selected feeds"
+msgstr "Upravit vybrané kanály"
 
-#: classes/opml.php:465
-#: plugins/import_export/init.php:418
-#: plugins/googlereaderimport/init.php:66
-#, php-format
-msgid "Upload failed with error code %d"
-msgstr "Odesílání selhalo s chybovým kódem %d"
+#: classes/pref/feeds.php:1323
+#: classes/pref/feeds.php:1337
+#: classes/pref/filters.php:661
+msgid "Reset sort order"
+msgstr "Zrušit pořadí řazení"
 
-#: classes/opml.php:479
-#: plugins/import_export/init.php:432
-#: plugins/googlereaderimport/init.php:80
-msgid "Unable to move uploaded file."
-msgstr "Nelze přesunout odeslaný soubor."
+#: classes/pref/feeds.php:1325
+#: js/prefs.js:1764
+msgid "Batch subscribe"
+msgstr "Dávkové zahájení odběru"
 
-#: classes/opml.php:483
-#: plugins/import_export/init.php:436
-#: plugins/googlereaderimport/init.php:84
-msgid "Error: please upload OPML file."
-msgstr "Chyba: nahrajte prosím soubor OPML."
+#: classes/pref/feeds.php:1332
+msgid "Categories"
+msgstr "Kategorie"
 
-#: classes/opml.php:492
-msgid "Error: unable to find moved OPML file."
-msgstr "Chyba: nelze nalézt přesunutý soubor OPML."
+#: classes/pref/feeds.php:1335
+msgid "Add category"
+msgstr "Přidat kategorii"
 
-#: classes/opml.php:499
-#: plugins/googlereaderimport/init.php:186
-msgid "Error while parsing document."
-msgstr "Chyba při zpracování dokumentu."
+#: classes/pref/feeds.php:1339
+msgid "Remove selected"
+msgstr "Odstranit vybrané"
 
-#: classes/pref/users.php:6
-#: classes/pref/system.php:8
-#: plugins/instances/init.php:154
-msgid "Your access level is insufficient to open this tab."
-msgstr "Nemáte dostatečná oprávnění pro zobrazení této záložky."
+#: classes/pref/feeds.php:1350
+msgid "More actions..."
+msgstr "Další činnost..."
 
-#: classes/pref/users.php:34
-msgid "User not found"
-msgstr "Uživatel nebyl nalezen"
+#: classes/pref/feeds.php:1354
+msgid "Manual purge"
+msgstr "Ruční čištění"
 
-#: classes/pref/users.php:53
-#: classes/pref/users.php:404
-msgid "Registered"
-msgstr "Registrován"
+#: classes/pref/feeds.php:1358
+msgid "Clear feed data"
+msgstr "Vyčistit data kanálu"
 
-#: classes/pref/users.php:54
-msgid "Last logged in"
-msgstr "Naposledy přihlášen"
+#: classes/pref/feeds.php:1359
+#: classes/pref/filters.php:669
+msgid "Rescore articles"
+msgstr "Přehodnotit články"
 
-#: classes/pref/users.php:61
-msgid "Subscribed feeds count"
-msgstr "Počet odebíraných kanálů"
+#: classes/pref/feeds.php:1409
+msgid "OPML"
+msgstr "OPML"
 
-#: classes/pref/users.php:65
-msgid "Subscribed feeds"
-msgstr "Odebírané kanály"
+#: classes/pref/feeds.php:1411
+msgid ""
+"Using OPML you can export and import your feeds, filters, labels and Tiny "
+"Tiny RSS settings."
+msgstr ""
+"Pomocí OPML můžete exportovat a importovat své kanály, filtry, štítky a "
+"nastavení Tiny Tiny RSS."
 
-#: classes/pref/users.php:142
-msgid "Access level: "
-msgstr "Úroveň přístupu: "
+#: classes/pref/feeds.php:1411
+msgid "Only main settings profile can be migrated using OPML."
+msgstr "Pomocí OPML může být migrován pouze profil hlavního nastavení."
 
-#: classes/pref/users.php:155
-msgid "Change password to"
-msgstr "Změnit heslo na"
+#: classes/pref/feeds.php:1424
+msgid "Import my OPML"
+msgstr "Importovat moji OPML"
 
-#: classes/pref/users.php:161
-#: classes/pref/feeds.php:649
-#: classes/pref/feeds.php:876
-msgid "Options"
-msgstr "Možnosti"
+#: classes/pref/feeds.php:1428
+msgid "Filename:"
+msgstr "Název souboru:"
 
-#: classes/pref/users.php:164
-msgid "E-mail: "
-msgstr "E-mail: "
+#: classes/pref/feeds.php:1430
+msgid "Include settings"
+msgstr ""
 
-#: classes/pref/users.php:240
-#, php-format
-msgid "Added user <b>%s</b> with password <b>%s</b>"
-msgstr "Přidán uživatel <b>%s</b> s heslem <b>%s</b>"
+#: classes/pref/feeds.php:1434
+msgid "Export OPML"
+msgstr "Exportovat OPML"
 
-#: classes/pref/users.php:247
-#, php-format
-msgid "Could not create user <b>%s</b>"
-msgstr "Nelze vytvořit uživatele <b>%s</b>"
+#: classes/pref/feeds.php:1438
+msgid ""
+"Your OPML can be published publicly and can be subscribed by anyone who knows "
+"the URL below."
+msgstr ""
+"Vaše OPML může být publikováno a použito kýmkoliv kdo zná následující URL."
 
-#: classes/pref/users.php:251
-#, php-format
-msgid "User <b>%s</b> already exists."
-msgstr "Uživatel <b>%s</b> již existuje."
+#: classes/pref/feeds.php:1440
+msgid ""
+"Published OPML does not include your Tiny Tiny RSS settings, feeds that "
+"require authentication or feeds hidden from Popular feeds."
+msgstr ""
+"Publikovaná OPML neobsahují vaše nastavení Tiny Tiny RSS a kanály které "
+"vyžadují ověření, nebo jsou skryty před Oblíbenými kanály."
 
-#: classes/pref/users.php:273
-#, php-format
-msgid "Changed password of user <b>%s</b> to <b>%s</b>"
-msgstr "Změněno heslo uživatele <b>%s</b> na <b>%s</b>"
+#: classes/pref/feeds.php:1442
+msgid "Public OPML URL"
+msgstr "Veřejná URL OPML"
 
-#: classes/pref/users.php:275
-#, php-format
-msgid "Sending new password of user <b>%s</b> to <b>%s</b>"
-msgstr "Zasílám nové heslo uživatele <b>%s</b> na <b>%s</b>"
+#: classes/pref/feeds.php:1443
+msgid "Display published OPML URL"
+msgstr "Zobrazit URL publikovaných OPML"
 
-#: classes/pref/users.php:299
-msgid "[tt-rss] Password change notification"
-msgstr "[tt-rss] Oznámení o změně hesla"
+#: classes/pref/feeds.php:1452
+msgid "Firefox integration"
+msgstr "Integrace s Firefoxem"
 
-#: classes/pref/users.php:342
-#: classes/pref/labels.php:272
-#: classes/pref/filters.php:279
-#: classes/pref/filters.php:327
-#: classes/pref/filters.php:645
-#: classes/pref/filters.php:733
-#: classes/pref/filters.php:760
-#: classes/pref/prefs.php:993
-#: classes/pref/feeds.php:1320
-#: classes/pref/feeds.php:1586
-#: classes/pref/feeds.php:1656
-#: plugins/instances/init.php:284
-msgid "Select"
-msgstr "Vybrat"
+#: classes/pref/feeds.php:1454
+msgid ""
+"This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the "
+"link below."
+msgstr ""
+"Stránka Tiny Tiny RSS může být použita jako Čtečka kanálů Firefox "
+"následujícím odkazem."
 
-#: classes/pref/users.php:350
-msgid "Create user"
-msgstr "Vytvořit uživatele"
+#: classes/pref/feeds.php:1461
+msgid "Click here to register this site as a feed reader."
+msgstr "Klikněte pro registraci této stránky jako čtečky kanálů."
 
-#: classes/pref/users.php:354
-msgid "Details"
-msgstr "Podrobnosti"
+#: classes/pref/feeds.php:1469
+msgid "Published & shared articles / Generated feeds"
+msgstr "Publikované a sdílené články / Generované kanály"
 
-#: classes/pref/users.php:356
-#: classes/pref/filters.php:660
-#: plugins/instances/init.php:293
-msgid "Edit"
-msgstr "Upravit"
+#: classes/pref/feeds.php:1471
+msgid ""
+"Published articles are exported as a public RSS feed and can be subscribed by "
+"anyone who knows the URL specified below."
+msgstr ""
+"Publikované články jsou exportované jako veřejný kanál RSS, který může "
+"odebírat kdokoliv kdo zná následující URL."
 
-#: classes/pref/users.php:403
-msgid "Access Level"
-msgstr "Úroveň přístupu"
+#: classes/pref/feeds.php:1478
+#: classes/feeds.php:76
+#: classes/feeds.php:128
+msgid "View as RSS"
+msgstr "Zobrazit jako RSS"
 
-#: classes/pref/users.php:405
-msgid "Last login"
-msgstr "Poslední přihlášení"
+#: classes/pref/feeds.php:1479
+msgid "Display URL"
+msgstr "Zobrazit URL"
 
-#: classes/pref/users.php:426
-#: plugins/instances/init.php:334
-msgid "Click to edit"
-msgstr "Klikněte pro úpravy"
+#: classes/pref/feeds.php:1482
+msgid "Clear all generated URLs"
+msgstr "Vyčistit všechny vygenerované URL"
 
-#: classes/pref/users.php:446
-msgid "No users defined."
-msgstr "Není definován žádný uživatel."
+#: classes/pref/feeds.php:1486
+msgid "You can disable all articles shared by unique URLs here."
+msgstr "Zde můžete zakázat sdílení článků pomocí unikátních URL."
 
-#: classes/pref/users.php:448
-msgid "No matching users found."
-msgstr "Nebyl nalezen žádný odpovídající uživatel."
+#: classes/pref/feeds.php:1491
+msgid "Unshare all articles"
+msgstr "Zrušit sdílení všech článků"
 
-#: classes/pref/labels.php:22
-#: classes/pref/filters.php:268
-#: classes/pref/filters.php:724
-msgid "Caption"
-msgstr "Titulek"
+#: classes/pref/feeds.php:1568
+msgid ""
+"These feeds have not been updated with new content for 3 months (oldest "
+"first):"
+msgstr ""
+"Tyto kanály nebyly aktualizovány s novým obsahem po tři měsíce (nejprve "
+"nejstarší):"
 
-#: classes/pref/labels.php:37
-msgid "Colors"
-msgstr "Barvy"
+#: classes/pref/feeds.php:1604
+#: classes/pref/feeds.php:1670
+msgid "Click to edit feed"
+msgstr "Klikněte pro úpravu kanálu"
 
-#: classes/pref/labels.php:42
-msgid "Foreground:"
-msgstr "Popředí:"
+#: classes/pref/feeds.php:1622
+#: classes/pref/feeds.php:1690
+msgid "Unsubscribe from selected feeds"
+msgstr "Zrušit odběr vybraných kanálů"
 
-#: classes/pref/labels.php:42
-msgid "Background:"
-msgstr "Pozadí:"
+#: classes/pref/feeds.php:1795
+msgid "Add one valid RSS feed per line (no feed detection is done)"
+msgstr "Přidávejte jeden platný RSS kanál na řádku (neprobíhá detekce kanálu)"
 
-#: classes/pref/labels.php:232
-#, php-format
-msgid "Created label <b>%s</b>"
-msgstr "Vytvořen štítek <b>%s</b>"
+#: classes/pref/feeds.php:1804
+msgid "Feeds to subscribe, One per line"
+msgstr "Kanály k odebírání, jeden na řádku"
 
-#: classes/pref/labels.php:287
-msgid "Clear colors"
-msgstr "Vymazat barvy"
+#: classes/pref/feeds.php:1826
+msgid "Feeds require authentication."
+msgstr "Kanály vyžadují ověření."
 
-#: classes/pref/filters.php:96
+#: classes/pref/feeds.php:1833
+#: classes/feeds.php:1018
+#: classes/feeds.php:1074
+msgid "Subscribe"
+msgstr "Odebírat"
+
+#: classes/pref/filters.php:94
 msgid "Articles matching this filter:"
 msgstr "Články odpovídající filtru:"
 
-#: classes/pref/filters.php:133
+#: classes/pref/filters.php:131
 msgid "No recent articles matching this filter have been found."
 msgstr "Nebyly nalezeny žádné nedávné články odpovídající filtru."
 
-#: classes/pref/filters.php:137
-msgid "Complex expressions might not give results while testing due to issues with database server regexp implementation."
-msgstr "Komplexní výrazy nemusejí navrátit výsledky při testování kvůli problémům s implementací regulárních výrazů databázového serveru."
+#: classes/pref/filters.php:135
+msgid ""
+"Complex expressions might not give results while testing due to issues with "
+"database server regexp implementation."
+msgstr ""
+"Komplexní výrazy nemusejí navrátit výsledky při testování kvůli problémům s "
+"implementací regulárních výrazů databázového serveru."
 
-#: classes/pref/filters.php:274
-#: classes/pref/filters.php:728
-#: classes/pref/filters.php:843
+#: classes/pref/filters.php:272
+#: classes/pref/filters.php:726
+#: classes/pref/filters.php:841
 msgid "Match"
 msgstr "Odpovídá"
 
-#: classes/pref/filters.php:288
-#: classes/pref/filters.php:336
-#: classes/pref/filters.php:742
-#: classes/pref/filters.php:769
+#: classes/pref/filters.php:286
+#: classes/pref/filters.php:334
+#: classes/pref/filters.php:740
+#: classes/pref/filters.php:767
 msgid "Add"
 msgstr "Přidat"
 
-#: classes/pref/filters.php:322
-#: classes/pref/filters.php:755
+#: classes/pref/filters.php:289
+#: classes/pref/filters.php:337
+#: classes/pref/filters.php:743
+#: classes/pref/filters.php:770
+#: classes/feeds.php:110
+msgid "Delete"
+msgstr "Smazat"
+
+#: classes/pref/filters.php:320
+#: classes/pref/filters.php:753
 msgid "Apply actions"
 msgstr "Vykonat činnosti"
 
-#: classes/pref/filters.php:372
-#: classes/pref/filters.php:784
+#: classes/pref/filters.php:370
+#: classes/pref/filters.php:782
 msgid "Enabled"
 msgstr "Povoleno"
 
-#: classes/pref/filters.php:381
-#: classes/pref/filters.php:787
+#: classes/pref/filters.php:379
+#: classes/pref/filters.php:785
 msgid "Match any rule"
 msgstr "Odpovídá kterémukoliv pravidlu"
 
-#: classes/pref/filters.php:390
-#: classes/pref/filters.php:790
+#: classes/pref/filters.php:388
+#: classes/pref/filters.php:788
 msgid "Inverse matching"
 msgstr ""
 
-#: classes/pref/filters.php:402
-#: classes/pref/filters.php:797
+#: classes/pref/filters.php:400
+#: classes/pref/filters.php:795
 msgid "Test"
 msgstr "Test"
 
-#: classes/pref/filters.php:435
+#: classes/pref/filters.php:433
 msgid "(inverse)"
 msgstr "(inverzní)"
 
-#: classes/pref/filters.php:434
+#: classes/pref/filters.php:432
 #, php-format
 msgid "%s on %s in %s %s"
 msgstr "%s na %s v %s %s"
 
-#: classes/pref/filters.php:657
+#: classes/pref/filters.php:655
 msgid "Combine"
 msgstr "Kombinovat"
 
-#: classes/pref/filters.php:663
-#: classes/pref/feeds.php:1336
-#: classes/pref/feeds.php:1350
-msgid "Reset sort order"
-msgstr "Zrušit pořadí řazení"
-
-#: classes/pref/filters.php:671
-#: classes/pref/feeds.php:1375
-msgid "Rescore articles"
-msgstr "Přehodnotit články"
+#: classes/pref/filters.php:658
+#: classes/pref/users.php:352
+#: plugins/instances/init.php:293
+msgid "Edit"
+msgstr "Upravit"
 
-#: classes/pref/filters.php:800
+#: classes/pref/filters.php:798
 msgid "Create"
 msgstr "Vytvořit"
 
-#: classes/pref/filters.php:855
+#: classes/pref/filters.php:853
 msgid "Inverse regular expression matching"
 msgstr ""
 
-#: classes/pref/filters.php:857
+#: classes/pref/filters.php:855
 msgid "on field"
 msgstr "pole"
 
-#: classes/pref/filters.php:863
+#: classes/pref/filters.php:861
 #: js/PrefFilterTree.js:45
-#: plugins/digest/digest.js:242
 msgid "in"
 msgstr "v"
 
-#: classes/pref/filters.php:876
+#: classes/pref/filters.php:874
 msgid "Save rule"
 msgstr "Uložit pravidlo"
 
-#: classes/pref/filters.php:876
+#: classes/pref/filters.php:874
 #: js/functions.js:1013
 msgid "Add rule"
 msgstr "Přidat pravidlo"
 
-#: classes/pref/filters.php:899
+#: classes/pref/filters.php:897
 msgid "Perform Action"
 msgstr "Provést činnost"
 
-#: classes/pref/filters.php:925
+#: classes/pref/filters.php:923
 msgid "with parameters:"
 msgstr "s parametry:"
 
-#: classes/pref/filters.php:943
+#: classes/pref/filters.php:941
 msgid "Save action"
 msgstr "Uložit činnost"
 
-#: classes/pref/filters.php:943
+#: classes/pref/filters.php:941
 #: js/functions.js:1039
 msgid "Add action"
 msgstr "Přidat činnost"
 
-#: classes/pref/filters.php:966
+#: classes/pref/filters.php:964
 msgid "[No caption]"
 msgstr "[Bez titulku]"
 
@@ -1782,16 +1630,24 @@ msgid "Blacklisted tags"
 msgstr "Zakázané značky"
 
 #: classes/pref/prefs.php:27
-msgid "When auto-detecting tags in articles these tags will not be applied (comma-separated list)."
-msgstr "Při detekci značek v článcích nebudou použity tyto značky (seznam oddělený čárkami)."
+msgid ""
+"When auto-detecting tags in articles these tags will not be applied "
+"(comma-separated list)."
+msgstr ""
+"Při detekci značek v článcích nebudou použity tyto značky (seznam oddělený "
+"čárkami)."
 
 #: classes/pref/prefs.php:28
 msgid "Automatically mark articles as read"
 msgstr "Automaticky označit články jako přečtené"
 
 #: classes/pref/prefs.php:28
-msgid "This option enables marking articles as read automatically while you scroll article list."
-msgstr "Volba umožňující automatické označování článků jako přečtených při jejich procházení v seznamu článků."
+msgid ""
+"This option enables marking articles as read automatically while you scroll "
+"article list."
+msgstr ""
+"Volba umožňující automatické označování článků jako přečtených při jejich "
+"procházení v seznamu článků."
 
 #: classes/pref/prefs.php:29
 msgid "Automatically expand articles in combined mode"
@@ -1802,8 +1658,12 @@ msgid "Combined feed display"
 msgstr "Zobrazení v kombinovaném režimu"
 
 #: classes/pref/prefs.php:30
-msgid "Display expanded list of feed articles, instead of separate displays for headlines and article content"
-msgstr "Zobrazit rozbalený seznam článků z kanálu, místo odděleného zobrazení nadpisů a obsahů článku"
+msgid ""
+"Display expanded list of feed articles, instead of separate displays for "
+"headlines and article content"
+msgstr ""
+"Zobrazit rozbalený seznam článků z kanálu, místo odděleného zobrazení nadpisů "
+"a obsahů článku"
 
 #: classes/pref/prefs.php:31
 msgid "Confirm marking feed as read"
@@ -1818,8 +1678,12 @@ msgid "Default feed update interval"
 msgstr "Výchozí interval aktualizace kanálů"
 
 #: classes/pref/prefs.php:33
-msgid "Shortest interval at which a feed will be checked for updates regardless of update method"
-msgstr "Nejkratší interval kontroly aktualizací kanálu bez ohledu na metodu aktualizace"
+msgid ""
+"Shortest interval at which a feed will be checked for updates regardless of "
+"update method"
+msgstr ""
+"Nejkratší interval kontroly aktualizací kanálu bez ohledu na metodu "
+"aktualizace"
 
 #: classes/pref/prefs.php:34
 msgid "Mark articles in e-mail digest as read"
@@ -1830,8 +1694,12 @@ msgid "Enable e-mail digest"
 msgstr "Povolit e-mailový souhrn"
 
 #: classes/pref/prefs.php:35
-msgid "This option enables sending daily digest of new (and unread) headlines on your configured e-mail address"
-msgstr "Umožňuje odesílání denních souhrnů nových (a nepřečtených) článků na vaší nastavenou e-mailovou adresu"
+msgid ""
+"This option enables sending daily digest of new (and unread) headlines on "
+"your configured e-mail address"
+msgstr ""
+"Umožňuje odesílání denních souhrnů nových (a nepřečtených) článků na vaší "
+"nastavenou e-mailovou adresu"
 
 #: classes/pref/prefs.php:36
 msgid "Try to send digests around specified time"
@@ -1878,8 +1746,11 @@ msgid "On catchup show next feed"
 msgstr "Při procházení zobrazit další kanál"
 
 #: classes/pref/prefs.php:44
-msgid "Automatically open next feed with unread articles after marking one as read"
-msgstr "Automaticky otevřít následující kanál s nepřečtenými články po označení posledního jako přečteného"
+msgid ""
+"Automatically open next feed with unread articles after marking one as read"
+msgstr ""
+"Automaticky otevřít následující kanál s nepřečtenými články po označení "
+"posledního jako přečteného"
 
 #: classes/pref/prefs.php:45
 msgid "Purge articles after this number of days (0 - disables)"
@@ -1890,7 +1761,6 @@ msgid "Purge unread articles"
 msgstr "Čistit nepřečtené články"
 
 #: classes/pref/prefs.php:47
-#: plugins/mobile/prefs.php:56
 msgid "Reverse headline order (oldest first)"
 msgstr "Obrácené řazení nadpisů (nejstarší jako první)"
 
@@ -1908,7 +1778,9 @@ msgstr "Řadit nadpisy podle data kanálu"
 
 #: classes/pref/prefs.php:50
 msgid "Use feed-specified date to sort headlines instead of local import date."
-msgstr "Použít datum specifikované kanálem místo data místního importu pro řazení článků."
+msgstr ""
+"Použít datum specifikované kanálem místo data místního importu pro řazení "
+"článků."
 
 #: classes/pref/prefs.php:51
 msgid "Login with an SSL certificate"
@@ -1931,7 +1803,7 @@ msgid "Strip all but most common HTML tags when reading articles."
 msgstr "Při čtení článků odstranit všechny HTML značky, kromě základních."
 
 #: classes/pref/prefs.php:54
-#: js/prefs.js:1734
+#: js/prefs.js:1719
 msgid "Customize stylesheet"
 msgstr "Upravit soubor motivu"
 
@@ -1940,9 +1812,8 @@ msgid "Customize CSS stylesheet to your liking"
 msgstr "Přizpůsobit soubor vzhledu CSS dle vašich představ"
 
 #: classes/pref/prefs.php:55
-#, fuzzy
 msgid "Time zone"
-msgstr "Časová zóna uživatele"
+msgstr "Časová zóna"
 
 #: classes/pref/prefs.php:56
 msgid "Group headlines in virtual feeds"
@@ -1950,16 +1821,16 @@ msgstr "Sdružovat nadpisy ve virtuálních kanálech"
 
 #: classes/pref/prefs.php:56
 msgid "Special feeds, labels, and categories are grouped by originating feeds"
-msgstr "Speciální kanály, popisky a kategorie jsou sdruženy podle původních kanálů"
+msgstr ""
+"Speciální kanály, popisky a kategorie jsou sdruženy podle původních kanálů"
 
 #: classes/pref/prefs.php:57
-#, fuzzy
 msgid "Language"
-msgstr "Jazyk:"
+msgstr "Jazyk"
 
 #: classes/pref/prefs.php:58
 msgid "Theme"
-msgstr ""
+msgstr "Motiv"
 
 #: classes/pref/prefs.php:58
 msgid "Select one of the available CSS themes"
@@ -2051,8 +1922,11 @@ msgid "One time passwords / Authenticator"
 msgstr "Heslo na jedno použití / Ověření"
 
 #: classes/pref/prefs.php:327
-msgid "One time passwords are currently enabled. Enter your current password below to disable."
-msgstr "Hesla na jedno použití jsou povolena. Zadejte své současné heslo pro zakázání."
+msgid ""
+"One time passwords are currently enabled. Enter your current password below "
+"to disable."
+msgstr ""
+"Hesla na jedno použití jsou povolena. Zadejte své současné heslo pro zakázání."
 
 #: classes/pref/prefs.php:352
 #: classes/pref/prefs.php:403
@@ -2064,17 +1938,20 @@ msgid "Disable OTP"
 msgstr "Zakázat OTP"
 
 #: classes/pref/prefs.php:369
-msgid "You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP."
-msgstr "Pro použití potřebujete kompatibilní nástroj ověření. Změnou hesla automaticky zakážete OTP."
+msgid ""
+"You will need a compatible Authenticator to use this. Changing your password "
+"would automatically disable OTP."
+msgstr ""
+"Pro použití potřebujete kompatibilní nástroj ověření. Změnou hesla "
+"automaticky zakážete OTP."
 
 #: classes/pref/prefs.php:371
 msgid "Scan the following code by the Authenticator application:"
 msgstr "Načtěte následující kód ověřující aplikací:"
 
 #: classes/pref/prefs.php:408
-#, fuzzy
 msgid "Enter the generated one time password"
-msgstr "Zadejte prosím vaše heslo na jedno použití:"
+msgstr "Zadejte vaše heslo na jedno použití:"
 
 #: classes/pref/prefs.php:422
 msgid "Enable OTP"
@@ -2082,7 +1959,7 @@ msgstr "Povolit OTP"
 
 #: classes/pref/prefs.php:428
 msgid "PHP GD functions are required for OTP support."
-msgstr ""
+msgstr "Funkce PHP GD jsou požadovány pro podporu OTP."
 
 #: classes/pref/prefs.php:471
 msgid "Some preferences are only available in default profile."
@@ -2122,386 +1999,580 @@ msgid "Reset to defaults"
 msgstr "Obnovit výchozí hodnoty"
 
 #: classes/pref/prefs.php:706
-#: classes/pref/prefs.php:708
 msgid "Plugins"
 msgstr "Moduly"
 
-#: classes/pref/prefs.php:710
-msgid "You will need to reload Tiny Tiny RSS for plugin changes to take effect."
+#: classes/pref/prefs.php:708
+msgid ""
+"You will need to reload Tiny Tiny RSS for plugin changes to take effect."
 msgstr "Pro provedení změn v modulech musíte znovu načíst Tiny Tiny RSS."
 
-#: classes/pref/prefs.php:712
-msgid "Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">wiki</a>."
-msgstr "Stáhnout více modulů na <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">foréch</a>, nebo <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">wiki</a> tt-rss.org."
+#: classes/pref/prefs.php:710
+msgid ""
+"Download more plugins at tt-rss.org <a class=\"visibleLink\" "
+"target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums<"
+"/a> or <a target=\"_blank\" class=\"visibleLink\" "
+"href=\"http://tt-rss.org/wiki/Plugins\">wiki</a>."
+msgstr ""
+"Stáhnout více modulů na <a class=\"visibleLink\" target=\"_blank\" "
+"href=\"http://tt-rss.org/forum/viewforum.php?f=22\">foréch</a>, nebo <a "
+"target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins"
+"\">wiki</a> tt-rss.org."
 
-#: classes/pref/prefs.php:738
+#: classes/pref/prefs.php:736
 msgid "System plugins"
 msgstr "Systémové moduly"
 
-#: classes/pref/prefs.php:742
-#: classes/pref/prefs.php:796
+#: classes/pref/prefs.php:740
+#: classes/pref/prefs.php:794
 msgid "Plugin"
 msgstr "Modul"
 
-#: classes/pref/prefs.php:743
-#: classes/pref/prefs.php:797
+#: classes/pref/prefs.php:741
+#: classes/pref/prefs.php:795
 msgid "Description"
 msgstr "Popis"
 
-#: classes/pref/prefs.php:744
-#: classes/pref/prefs.php:798
+#: classes/pref/prefs.php:742
+#: classes/pref/prefs.php:796
 msgid "Version"
 msgstr "Verze"
 
-#: classes/pref/prefs.php:745
-#: classes/pref/prefs.php:799
+#: classes/pref/prefs.php:743
+#: classes/pref/prefs.php:797
 msgid "Author"
 msgstr "Autor"
 
-#: classes/pref/prefs.php:774
-#: classes/pref/prefs.php:831
+#: classes/pref/prefs.php:772
+#: classes/pref/prefs.php:829
 msgid "more info"
 msgstr "více informací"
 
-#: classes/pref/prefs.php:783
-#: classes/pref/prefs.php:840
+#: classes/pref/prefs.php:781
+#: classes/pref/prefs.php:838
 msgid "Clear data"
 msgstr "Smazat data"
 
-#: classes/pref/prefs.php:792
+#: classes/pref/prefs.php:790
 msgid "User plugins"
 msgstr "Uživatelské moduly"
 
-#: classes/pref/prefs.php:855
+#: classes/pref/prefs.php:853
 msgid "Enable selected plugins"
 msgstr "Povolit vybrané moduly"
 
-#: classes/pref/prefs.php:922
-#, fuzzy
+#: classes/pref/prefs.php:920
 msgid "Incorrect one time password"
-msgstr "Špatné heslo"
+msgstr "Chybné heslo na jedno použití"
 
-#: classes/pref/prefs.php:925
-#: classes/pref/prefs.php:942
+#: classes/pref/prefs.php:923
+#: classes/pref/prefs.php:940
 msgid "Incorrect password"
 msgstr "Špatné heslo"
 
-#: classes/pref/prefs.php:967
+#: classes/pref/prefs.php:965
 #, php-format
-msgid "You can override colors, fonts and layout of your currently selected theme with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">This file</a> can be used as a baseline."
-msgstr "Můžete změnit bary, font a rozvržení vybraného motivu s vlastním nastavením CSS. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">Tento soubor</a> vám poslouží jako základ."
+msgid ""
+"You can override colors, fonts and layout of your currently selected theme "
+"with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink\" "
+"href=\"%s\">This file</a> can be used as a baseline."
+msgstr ""
+"Můžete změnit bary, font a rozvržení vybraného motivu s vlastním nastavením "
+"CSS. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">Tento soubor</a> "
+"vám poslouží jako základ."
 
-#: classes/pref/prefs.php:1007
+#: classes/pref/prefs.php:1005
 msgid "Create profile"
 msgstr "Vytvořit profil"
 
-#: classes/pref/prefs.php:1030
-#: classes/pref/prefs.php:1060
+#: classes/pref/prefs.php:1028
+#: classes/pref/prefs.php:1056
 msgid "(active)"
 msgstr "(aktivní)"
 
-#: classes/pref/prefs.php:1094
+#: classes/pref/prefs.php:1090
 msgid "Remove selected profiles"
 msgstr "Odstranit vybrané profily"
 
-#: classes/pref/prefs.php:1096
+#: classes/pref/prefs.php:1092
 msgid "Activate profile"
 msgstr "Aktivovat profil"
 
-#: classes/pref/feeds.php:13
-msgid "Check to enable field"
-msgstr "Zaškrtněte pro povolení pole"
+#: classes/pref/system.php:8
+#: classes/pref/users.php:6
+#: plugins/instances/init.php:154
+msgid "Your access level is insufficient to open this tab."
+msgstr "Nemáte dostatečná oprávnění pro zobrazení této záložky."
 
-#: classes/pref/feeds.php:559
-msgid "Feed Title"
-msgstr "Název kanálu"
+#: classes/pref/system.php:29
+msgid "Error Log"
+msgstr "Záznam o chybách"
 
-#: classes/pref/feeds.php:600
-#: classes/pref/feeds.php:835
-msgid "Update"
-msgstr "Aktualizovat"
+#: classes/pref/system.php:40
+msgid "Refresh"
+msgstr "Obnovit"
 
-#: classes/pref/feeds.php:615
-#: classes/pref/feeds.php:851
-msgid "Article purging:"
-msgstr "Čištění článků:"
+#: classes/pref/system.php:43
+msgid "Clear log"
+msgstr "Vyčistit záznam"
 
-#: classes/pref/feeds.php:645
-msgid "<b>Hint:</b> you need to fill in your login information if your feed requires authentication, except for Twitter feeds."
-msgstr "<b>Rada:</b> pokud váš kanál vyžaduje ověření, musíte zadat přihlašovací údaje, s výjimkou pro kanály Twitter."
+#: classes/pref/system.php:48
+msgid "Error"
+msgstr "Chyba"
 
-#: classes/pref/feeds.php:661
-#: classes/pref/feeds.php:880
-msgid "Hide from Popular feeds"
-msgstr "Skrýt před populárními kanály"
+#: classes/pref/system.php:49
+msgid "Filename"
+msgstr "Název souboru"
 
-#: classes/pref/feeds.php:673
-#: classes/pref/feeds.php:886
-msgid "Include in e-mail digest"
-msgstr "Začlenit do e-mailových souhrnů"
+#: classes/pref/system.php:50
+msgid "Message"
+msgstr "Zpráva"
 
-#: classes/pref/feeds.php:686
-#: classes/pref/feeds.php:892
-msgid "Always display image attachments"
-msgstr "Vždy zobrazovat obrázkové přílohy"
+#: classes/pref/system.php:52
+msgid "Date"
+msgstr "Datum"
 
-#: classes/pref/feeds.php:699
-#: classes/pref/feeds.php:900
-msgid "Do not embed images"
-msgstr "Nevkládat obrázky"
+#: classes/pref/users.php:34
+msgid "User not found"
+msgstr "Uživatel nebyl nalezen"
 
-#: classes/pref/feeds.php:712
-#: classes/pref/feeds.php:908
-msgid "Cache images locally"
-msgstr "Uchovávat obrázky na serveru"
+#: classes/pref/users.php:53
+#: classes/pref/users.php:400
+msgid "Registered"
+msgstr "Registrován"
 
-#: classes/pref/feeds.php:724
-#: classes/pref/feeds.php:914
-msgid "Mark updated articles as unread"
-msgstr "Označit aktualizované články jako nepřečtené"
+#: classes/pref/users.php:54
+msgid "Last logged in"
+msgstr "Naposledy přihlášen"
 
-#: classes/pref/feeds.php:730
-msgid "Icon"
-msgstr "Ikona"
+#: classes/pref/users.php:61
+msgid "Subscribed feeds count"
+msgstr "Počet odebíraných kanálů"
 
-#: classes/pref/feeds.php:744
-msgid "Replace"
-msgstr "Nahradit"
+#: classes/pref/users.php:65
+msgid "Subscribed feeds"
+msgstr "Odebírané kanály"
 
-#: classes/pref/feeds.php:766
-msgid "Resubscribe to push updates"
+#: classes/pref/users.php:138
+msgid "Access level: "
+msgstr "Úroveň přístupu: "
+
+#: classes/pref/users.php:151
+msgid "Change password to"
+msgstr "Změnit heslo na"
+
+#: classes/pref/users.php:160
+msgid "E-mail: "
+msgstr "E-mail: "
+
+#: classes/pref/users.php:236
+#, php-format
+msgid "Added user <b>%s</b> with password <b>%s</b>"
+msgstr "Přidán uživatel <b>%s</b> s heslem <b>%s</b>"
+
+#: classes/pref/users.php:243
+#, php-format
+msgid "Could not create user <b>%s</b>"
+msgstr "Nelze vytvořit uživatele <b>%s</b>"
+
+#: classes/pref/users.php:247
+#, php-format
+msgid "User <b>%s</b> already exists."
+msgstr "Uživatel <b>%s</b> již existuje."
+
+#: classes/pref/users.php:269
+#, php-format
+msgid "Changed password of user <b>%s</b> to <b>%s</b>"
+msgstr "Změněno heslo uživatele <b>%s</b> na <b>%s</b>"
+
+#: classes/pref/users.php:271
+#, php-format
+msgid "Sending new password of user <b>%s</b> to <b>%s</b>"
+msgstr "Zasílám nové heslo uživatele <b>%s</b> na <b>%s</b>"
+
+#: classes/pref/users.php:295
+msgid "[tt-rss] Password change notification"
+msgstr "[tt-rss] Oznámení o změně hesla"
+
+#: classes/pref/users.php:346
+msgid "Create user"
+msgstr "Vytvořit uživatele"
+
+#: classes/pref/users.php:350
+msgid "Details"
+msgstr "Podrobnosti"
+
+#: classes/pref/users.php:399
+msgid "Access Level"
+msgstr "Úroveň přístupu"
+
+#: classes/pref/users.php:401
+msgid "Last login"
+msgstr "Poslední přihlášení"
+
+#: classes/pref/users.php:420
+#: plugins/instances/init.php:334
+msgid "Click to edit"
+msgstr "Klikněte pro úpravy"
+
+#: classes/pref/users.php:440
+msgid "No users defined."
+msgstr "Není definován žádný uživatel."
+
+#: classes/pref/users.php:442
+msgid "No matching users found."
+msgstr "Nebyl nalezen žádný odpovídající uživatel."
+
+#: classes/backend.php:33
+msgid "Other interface tips are available in the Tiny Tiny RSS wiki."
+msgstr "Další tipy k používání rozhraní jsou dostupné ve wiki Tiny Tiny RSS."
+
+#: classes/backend.php:38
+msgid "Keyboard Shortcuts"
+msgstr "Klávesové zkratky"
+
+#: classes/backend.php:61
+msgid "Shift"
+msgstr "Shift"
+
+#: classes/backend.php:64
+msgid "Ctrl"
+msgstr "Ctrl"
+
+#: classes/backend.php:99
+msgid "Help topic not found."
+msgstr "Téma nápovědy nenalezeno."
+
+#: classes/dlg.php:16
+msgid ""
+"If you have imported labels and/or filters, you might need to reload "
+"preferences to see your new data."
 msgstr ""
+"Pokud jste importovali štítky, či filtry, budete možná muset znovu načíst "
+"nastavení pro zobrazení nových dat."
 
-#: classes/pref/feeds.php:773
-msgid "Resets PubSubHubbub subscription status for push-enabled feeds."
+#: classes/dlg.php:48
+msgid "Your Public OPML URL is:"
+msgstr "Vaše veřejná URL OPML je:"
+
+#: classes/dlg.php:57
+#: classes/dlg.php:214
+msgid "Generate new URL"
+msgstr "Generovat novou URL"
+
+#: classes/dlg.php:71
+msgid ""
+"Update daemon is enabled in configuration, but daemon process is not running, "
+"which prevents all feeds from updating. Please start the daemon process or "
+"contact instance owner."
 msgstr ""
 
-#: classes/pref/feeds.php:1169
-#: classes/pref/feeds.php:1222
-msgid "All done."
-msgstr "Vše hotovo."
+#: classes/dlg.php:75
+#: classes/dlg.php:84
+msgid "Last update:"
+msgstr "Poslední aktualizace:"
 
-#: classes/pref/feeds.php:1277
-msgid "Feeds with errors"
-msgstr "Kanály s chybami"
+#: classes/dlg.php:80
+msgid ""
+"Update daemon is taking too long to perform a feed update. This could "
+"indicate a problem like crash or a hang. Please check the daemon process or "
+"contact instance owner."
+msgstr ""
+"Démonu aktualizací trvá příliš dlouho aktualizace kanálu. Existuje možnost že "
+"se zasekl a nebo spadl. Zkontrolujte, prosím, stav procesu a nebo kontaktujte "
+"správce instance."
 
-#: classes/pref/feeds.php:1297
-msgid "Inactive feeds"
-msgstr "Neaktivní kanály"
+#: classes/dlg.php:166
+msgid "Match:"
+msgstr "Odpovídá:"
 
-#: classes/pref/feeds.php:1334
-msgid "Edit selected feeds"
-msgstr "Upravit vybrané kanály"
+#: classes/dlg.php:168
+msgid "Any"
+msgstr "Cokoliv"
 
-#: classes/pref/feeds.php:1338
-#: js/prefs.js:1779
-msgid "Batch subscribe"
-msgstr "Dávkové zahájení odběru"
+#: classes/dlg.php:171
+msgid "All tags."
+msgstr "Všechny značky."
 
-#: classes/pref/feeds.php:1345
-msgid "Categories"
-msgstr "Kategorie"
+#: classes/dlg.php:173
+msgid "Which Tags?"
+msgstr "Jaké značky?"
 
-#: classes/pref/feeds.php:1348
-msgid "Add category"
-msgstr "Přidat kategorii"
+#: classes/dlg.php:186
+msgid "Display entries"
+msgstr "Zobrazit položky"
+
+#: classes/dlg.php:205
+msgid "You can view this feed as RSS using the following URL:"
+msgstr "Můžete zobrazit kanál jako RSS pomocí následující URL:"
+
+#: classes/dlg.php:233
+#: plugins/updater/init.php:331
+#, php-format
+msgid "New version of Tiny Tiny RSS is available (%s)."
+msgstr "Je dostupná nová verze Tiny Tiny RSS (%s)."
+
+#: classes/dlg.php:241
+msgid ""
+"You can update using built-in updater in the Preferences or by using "
+"update.php"
+msgstr ""
+"Aktualizovat můžete pomocí zabudovaného nástroje v Nastavení, nebo pomocí "
+"update.php"
+
+#: classes/dlg.php:245
+#: plugins/updater/init.php:335
+msgid "See the release notes"
+msgstr "Zobrazit poznámky k vydání"
+
+#: classes/dlg.php:247
+msgid "Download"
+msgstr "Stáhnout"
+
+#: classes/dlg.php:255
+msgid "Error receiving version information or no new version available."
+msgstr ""
+"Chyba při získávání informací o verzi, nebo není dostupná novější verze."
+
+#: classes/opml.php:28
+#: classes/opml.php:33
+msgid "OPML Utility"
+msgstr "Nástroj OPML"
+
+#: classes/opml.php:37
+msgid "Importing OPML..."
+msgstr "Importuji OPML..."
+
+#: classes/opml.php:41
+msgid "Return to preferences"
+msgstr "Zpět do nastavení"
 
-#: classes/pref/feeds.php:1352
-msgid "Remove selected"
-msgstr "Odstranit vybrané"
+#: classes/opml.php:270
+#, php-format
+msgid "Adding feed: %s"
+msgstr "Přidávám kanál: %s"
 
-#: classes/pref/feeds.php:1361
-msgid "(Un)hide empty categories"
-msgstr "Zobrazit/Skrýt prázdné kategorie"
+#: classes/opml.php:281
+#, php-format
+msgid "Duplicate feed: %s"
+msgstr "Duplicitní kanál: %s"
 
-#: classes/pref/feeds.php:1366
-msgid "More actions..."
-msgstr "Další činnost..."
+#: classes/opml.php:295
+#, php-format
+msgid "Adding label %s"
+msgstr "Přidávám štítek %s"
 
-#: classes/pref/feeds.php:1370
-msgid "Manual purge"
-msgstr "Ruční čištění"
+#: classes/opml.php:298
+#, php-format
+msgid "Duplicate label: %s"
+msgstr "Duplicitní štítek: %s"
 
-#: classes/pref/feeds.php:1374
-msgid "Clear feed data"
-msgstr "Vyčistit data kanálu"
+#: classes/opml.php:310
+#, php-format
+msgid "Setting preference key %s to %s"
+msgstr "Nastavuji klíč předvoleb %s na %s"
 
-#: classes/pref/feeds.php:1425
-msgid "OPML"
-msgstr "OPML"
+#: classes/opml.php:339
+msgid "Adding filter..."
+msgstr "Přidávám filtr..."
 
-#: classes/pref/feeds.php:1427
-msgid "Using OPML you can export and import your feeds, filters, labels and Tiny Tiny RSS settings."
-msgstr "Pomocí OPML můžete exportovat a importovat své kanály, filtry, štítky a nastavení Tiny Tiny RSS."
+#: classes/opml.php:416
+#, php-format
+msgid "Processing category: %s"
+msgstr "Zpracovávám kategorii: %s"
 
-#: classes/pref/feeds.php:1429
-msgid "Only main settings profile can be migrated using OPML."
-msgstr "Pomocí OPML může být migrován pouze profil hlavního nastavení."
+#: classes/opml.php:465
+#: plugins/googlereaderimport/init.php:66
+#: plugins/import_export/init.php:420
+#, php-format
+msgid "Upload failed with error code %d"
+msgstr "Odesílání selhalo s chybovým kódem %d"
 
-#: classes/pref/feeds.php:1442
-msgid "Import my OPML"
-msgstr "Importovat moji OPML"
+#: classes/opml.php:479
+#: plugins/googlereaderimport/init.php:80
+#: plugins/import_export/init.php:434
+msgid "Unable to move uploaded file."
+msgstr "Nelze přesunout odeslaný soubor."
 
-#: classes/pref/feeds.php:1446
-msgid "Filename:"
-msgstr "Název souboru:"
+#: classes/opml.php:483
+#: plugins/googlereaderimport/init.php:84
+#: plugins/import_export/init.php:438
+msgid "Error: please upload OPML file."
+msgstr "Chyba: nahrajte prosím soubor OPML."
 
-#: classes/pref/feeds.php:1448
-msgid "Include settings"
-msgstr ""
+#: classes/opml.php:492
+msgid "Error: unable to find moved OPML file."
+msgstr "Chyba: nelze nalézt přesunutý soubor OPML."
 
-#: classes/pref/feeds.php:1452
-msgid "Export OPML"
-msgstr "Exportovat OPML"
+#: classes/opml.php:499
+#: plugins/googlereaderimport/init.php:186
+msgid "Error while parsing document."
+msgstr "Chyba při zpracování dokumentu."
 
-#: classes/pref/feeds.php:1456
-msgid "Your OPML can be published publicly and can be subscribed by anyone who knows the URL below."
-msgstr "Vaše OPML může být publikováno a použito kýmkoliv kdo zná následující URL."
+#: classes/article.php:25
+msgid "Article not found."
+msgstr "Článek nenalezen"
 
-#: classes/pref/feeds.php:1458
-msgid "Published OPML does not include your Tiny Tiny RSS settings, feeds that require authentication or feeds hidden from Popular feeds."
-msgstr "Publikovaná OPML neobsahují vaše nastavení Tiny Tiny RSS a kanály které vyžadují ověření, nebo jsou skryty před Oblíbenými kanály."
+#: classes/article.php:179
+msgid "Tags for this article (separated by commas):"
+msgstr "Značky článku (oddělené čárkami):"
 
-#: classes/pref/feeds.php:1460
-msgid "Public OPML URL"
-msgstr "Veřejná URL OPML"
+#: classes/feeds.php:56
+#, php-format
+msgid "Last updated: %s"
+msgstr "Poslední aktualizace: %s"
 
-#: classes/pref/feeds.php:1461
-msgid "Display published OPML URL"
-msgstr "Zobrazit URL publikovaných OPML"
+#: classes/feeds.php:75
+msgid "View as RSS feed"
+msgstr "Zobrazit jako kanál RSS"
 
-#: classes/pref/feeds.php:1470
-msgid "Firefox integration"
-msgstr "Integrace s Firefoxem"
+#: classes/feeds.php:83
+msgid "Select:"
+msgstr "Vybrat:"
 
-#: classes/pref/feeds.php:1472
-msgid "This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below."
-msgstr "Stránka Tiny Tiny RSS může být použita jako Čtečka kanálů Firefox následujícím odkazem."
+#: classes/feeds.php:86
+msgid "Invert"
+msgstr "Invertovat"
 
-#: classes/pref/feeds.php:1479
-msgid "Click here to register this site as a feed reader."
-msgstr "Klikněte pro registraci této stránky jako čtečky kanálů."
+#: classes/feeds.php:93
+msgid "More..."
+msgstr "Více..."
 
-#: classes/pref/feeds.php:1487
-msgid "Published & shared articles / Generated feeds"
-msgstr "Publikované a sdílené články / Generované kanály"
+#: classes/feeds.php:95
+msgid "Selection toggle:"
+msgstr "Přepínač výběru:"
 
-#: classes/pref/feeds.php:1489
-msgid "Published articles and generated feeds"
-msgstr "Publikované články a generované kanály"
+#: classes/feeds.php:101
+msgid "Selection:"
+msgstr "Výběr:"
 
-#: classes/pref/feeds.php:1491
-msgid "Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the URL specified below."
-msgstr "Publikované články jsou exportované jako veřejný kanál RSS, který může odebírat kdokoliv kdo zná následující URL."
+#: classes/feeds.php:104
+msgid "Set score"
+msgstr "Zadat hodnocení"
 
-#: classes/pref/feeds.php:1497
-msgid "Display URL"
-msgstr "Zobrazit URL"
+#: classes/feeds.php:107
+msgid "Archive"
+msgstr "Archivovat"
 
-#: classes/pref/feeds.php:1500
-msgid "Clear all generated URLs"
-msgstr "Vyčistit všechny vygenerované URL"
+#: classes/feeds.php:109
+msgid "Move back"
+msgstr "Zpět"
 
-#: classes/pref/feeds.php:1502
-msgid "Articles shared by URL"
-msgstr "Články sdílené pomocí URL"
+#: classes/feeds.php:115
+#: classes/feeds.php:120
+#: plugins/mail/init.php:26
+#: plugins/mailto/init.php:25
+msgid "Forward by email"
+msgstr "Přeposlat e-mailem"
 
-#: classes/pref/feeds.php:1504
-msgid "You can disable all articles shared by unique URLs here."
-msgstr "Zde můžete zakázat sdílení článků pomocí unikátních URL."
+#: classes/feeds.php:124
+msgid "Feed:"
+msgstr "Kanál:"
 
-#: classes/pref/feeds.php:1507
-msgid "Unshare all articles"
-msgstr "Zrušit sdílení všech článků"
+#: classes/feeds.php:197
+#: classes/feeds.php:824
+msgid "Feed not found."
+msgstr "Kanál nenalezen."
 
-#: classes/pref/feeds.php:1582
-msgid "These feeds have not been updated with new content for 3 months (oldest first):"
-msgstr "Tyto kanály nebyly aktualizovány s novým obsahem po tři měsíce (nejprve nejstarší):"
+#: classes/feeds.php:254
+msgid "Never"
+msgstr "Nikdy"
 
-#: classes/pref/feeds.php:1619
-#: classes/pref/feeds.php:1689
-msgid "Click to edit feed"
-msgstr "Klikněte pro úpravu kanálu"
+#: classes/feeds.php:360
+#, php-format
+msgid "Imported at %s"
+msgstr "Importováno v %s"
 
-#: classes/pref/feeds.php:1637
-#: classes/pref/feeds.php:1709
-msgid "Unsubscribe from selected feeds"
-msgstr "Zrušit odběr vybraných kanálů"
+#: classes/feeds.php:520
+msgid "mark as read"
+msgstr "označit jako přečtené"
 
-#: classes/pref/feeds.php:1648
-msgid "These feeds have not been updated because of errors:"
-msgstr "Kanály, které nebyly aktualizovány kvůli chybám:"
+#: classes/feeds.php:570
+msgid "Collapse article"
+msgstr "Sbalit článek"
 
-#: classes/pref/feeds.php:1814
-msgid "Add one valid RSS feed per line (no feed detection is done)"
-msgstr "Přidávejte jeden platný RSS kanál na řádku (neprobíhá detekce kanálu)"
+#: classes/feeds.php:725
+msgid "No unread articles found to display."
+msgstr "Nenalezeny žádné nepřečtené články k zobrazení."
 
-#: classes/pref/feeds.php:1823
-msgid "Feeds to subscribe, One per line"
-msgstr "Kanály k odebírání, jeden na řádku"
+#: classes/feeds.php:728
+msgid "No updated articles found to display."
+msgstr "Nenalezeny žádné aktualizované články k zobrazení."
 
-#: classes/pref/feeds.php:1845
-msgid "Feeds require authentication."
-msgstr "Kanály vyžadují ověření."
+#: classes/feeds.php:731
+msgid "No starred articles found to display."
+msgstr "Nenalezeny žádné články s hvězdičkou k zobrazení."
 
-#: classes/pref/system.php:25
-msgid "Error Log"
+#: classes/feeds.php:735
+msgid ""
+"No articles found to display. You can assign articles to labels manually from "
+"article header context menu (applies to all selected articles) or use a "
+"filter."
 msgstr ""
+"Žádné zobrazitelné články. Můžete článkům přiřadit štítky ručně z kontextové "
+"nabídky v hlavičce článku (platí pro všechny vybrané články) a nebo použít "
+"filtr."
 
-#: classes/pref/system.php:36
-#, fuzzy
-msgid "Refresh"
-msgstr "Nové"
+#: classes/feeds.php:737
+msgid "No articles found to display."
+msgstr "Nenalezeny žádné články ke zobrazení."
 
-#: classes/pref/system.php:41
-msgid "Error"
+#: classes/feeds.php:752
+#: classes/feeds.php:919
+#, php-format
+msgid "Feeds last updated at %s"
+msgstr "Kanál naposledy aktualizován v %s"
+
+#: classes/feeds.php:762
+#: classes/feeds.php:929
+msgid "Some feeds have update errors (click for details)"
 msgstr ""
+"Některé kanály měly problémy při aktualizaci (klikněte pro podrobnosti)"
 
-#: classes/pref/system.php:42
-#, fuzzy
-msgid "Filename"
-msgstr "Název souboru:"
+#: classes/feeds.php:909
+msgid "No feed selected."
+msgstr "Není vybrán žádný kanál."
 
-#: classes/pref/system.php:43
-msgid "Message"
-msgstr ""
+#: classes/feeds.php:962
+#: classes/feeds.php:970
+msgid "Feed or site URL"
+msgstr "Kanál nebo URL stránky"
 
-#: classes/pref/system.php:45
-msgid "Date"
-msgstr ""
+#: classes/feeds.php:984
+msgid "Available feeds"
+msgstr "Dostupné kanály"
 
-#: plugins/digest/digest_body.php:57
-msgid "Your browser doesn't support Javascript, which is required for this application to function properly. Please check your browser settings."
-msgstr "Váš prohlížeč nepodporuje Javascript, který je vyžadován pro správnou funkci aplikace. Zkontrolujte prosím nastavení prohlížeče."
+#: classes/feeds.php:1013
+msgid "This feed requires authentication."
+msgstr "Tento kanál vyžaduje ověření."
 
-#: plugins/digest/digest_body.php:72
-msgid "Hello,"
-msgstr "Ahoj,"
+#: classes/feeds.php:1021
+msgid "More feeds"
+msgstr "Více kanálů"
 
-#: plugins/digest/digest_body.php:78
-msgid "Regular version"
-msgstr "Normální verze"
+#: classes/feeds.php:1048
+msgid "Popular feeds"
+msgstr "Oblíbené kanály"
 
-#: plugins/close_button/init.php:22
-msgid "Close article"
-msgstr "Zavřít článek"
+#: classes/feeds.php:1049
+msgid "Feed archive"
+msgstr "Archív kanálů"
 
-#: plugins/nsfw/init.php:29
-#: plugins/nsfw/init.php:40
-msgid "Not work safe (click to toggle)"
-msgstr "Není bezpečné pro práci (kliknutím přepnout)"
+#: classes/feeds.php:1052
+msgid "limit:"
+msgstr "omezení:"
 
-#: plugins/nsfw/init.php:50
-msgid "NSFW Plugin"
-msgstr "Modul NSFW"
+#: classes/feeds.php:1086
+msgid "Look for"
+msgstr "Hledat"
 
-#: plugins/nsfw/init.php:77
-msgid "Tags to consider NSFW (comma-separated)"
-msgstr "Značky považované za nevhodné k práci (oddělené čárkou)"
+#: classes/feeds.php:1094
+msgid "Limit search to:"
+msgstr "Omezit hledání na:"
 
-#: plugins/nsfw/init.php:98
-msgid "Configuration saved."
-msgstr "Nastavení uloženo."
+#: classes/feeds.php:1110
+msgid "This feed"
+msgstr "Tento kanál"
 
 #: plugins/auth_internal/init.php:62
 msgid "Please enter your one time password:"
@@ -2511,100 +2582,18 @@ msgstr "Zadejte prosím vaše heslo na jedno použití:"
 msgid "Password has been changed."
 msgstr "Heslo bylo změněno."
 
-#: plugins/auth_internal/init.php:187
-msgid "Old password is incorrect."
-msgstr "Staré heslo je chybné."
-
-#: plugins/mobile/mobile-functions.php:64
-#: plugins/mobile/mobile-functions.php:140
-#: plugins/mobile/mobile-functions.php:176
-#: plugins/mobile/mobile-functions.php:203
-#: plugins/mobile/mobile-functions.php:239
-#: plugins/mobile/mobile-functions.php:376
-#: plugins/mobile/prefs.php:25
-msgid "Home"
-msgstr "Domů"
-
-#: plugins/mobile/mobile-functions.php:412
-msgid "Nothing found (click to reload feed)."
-msgstr "Nic nenalezeno (klikněte pro obnovení kanálu)."
-
-#: plugins/mobile/login_form.php:52
-msgid "Open regular version"
-msgstr "Otevřít normální verzi"
-
-#: plugins/mobile/prefs.php:30
-msgid "Enable categories"
-msgstr "Povolit kategorie"
-
-#: plugins/mobile/prefs.php:31
-#: plugins/mobile/prefs.php:36
-#: plugins/mobile/prefs.php:42
-#: plugins/mobile/prefs.php:47
-#: plugins/mobile/prefs.php:52
-#: plugins/mobile/prefs.php:57
-msgid "ON"
-msgstr "Zapnuto"
-
-#: plugins/mobile/prefs.php:31
-#: plugins/mobile/prefs.php:36
-#: plugins/mobile/prefs.php:42
-#: plugins/mobile/prefs.php:47
-#: plugins/mobile/prefs.php:52
-#: plugins/mobile/prefs.php:57
-msgid "OFF"
-msgstr "Vypnuto"
-
-#: plugins/mobile/prefs.php:35
-msgid "Browse categories like folders"
-msgstr "Procházet kategorie jako složky"
-
-#: plugins/mobile/prefs.php:41
-msgid "Show images in posts"
-msgstr "Zobrazit obrázky v příspěvcích"
-
-#: plugins/mobile/prefs.php:46
-msgid "Hide read articles and feeds"
-msgstr "Skrýt přečtené články a kanály"
-
-#: plugins/mobile/prefs.php:51
-msgid "Sort feeds by unread count"
-msgstr "Řadit kanály dle počtu nepřečtených článků"
-
-#: plugins/mailto/init.php:49
-#: plugins/mailto/init.php:55
-#: plugins/mail/init.php:64
-#: plugins/mail/init.php:70
-msgid "[Forwarded]"
-msgstr "[Přeposláno]"
-
-#: plugins/mailto/init.php:49
-#: plugins/mail/init.php:64
-msgid "Multiple articles"
-msgstr "Více článků"
-
-#: plugins/mailto/init.php:71
-msgid "Clicking the following link to invoke your mail client:"
-msgstr "Klikněte na následující odkaz pro spuštění poštovního klienta:"
-
-#: plugins/mailto/init.php:75
-msgid "Forward selected article(s) by email."
-msgstr "Přeposlat vybrané články e-mailem."
-
-#: plugins/mailto/init.php:78
-msgid "You should be able to edit the message before sending in your mail client."
-msgstr "Měli byste být schopni upravit zprávu před odesláním ve vašem poštovním klientu."
-
-#: plugins/mailto/init.php:83
-msgid "Close this dialog"
-msgstr "Uzavřít tento dialog"
-
+#: plugins/auth_internal/init.php:187
+msgid "Old password is incorrect."
+msgstr "Staré heslo je chybné."
+
 #: plugins/bookmarklets/init.php:20
 msgid "Bookmarklets"
 msgstr "Záložky"
 
 #: plugins/bookmarklets/init.php:22
-msgid "Drag the link below to your browser toolbar, open the feed you're interested in in your browser and click on the link to subscribe to it."
+msgid ""
+"Drag the link below to your browser toolbar, open the feed you're interested "
+"in in your browser and click on the link to subscribe to it."
 msgstr ""
 
 #: plugins/bookmarklets/init.php:26
@@ -2612,25 +2601,56 @@ msgstr ""
 msgid "Subscribe to %s in Tiny Tiny RSS?"
 msgstr "Odebírat %s v Tiny Tiny RSS?"
 
-#: plugins/bookmarklets/init.php:30
+#: plugins/bookmarklets/init.php:31
 msgid "Subscribe in Tiny Tiny RSS"
 msgstr "Odebírat v Tiny Tiny RSS"
 
-#: plugins/bookmarklets/init.php:32
+#: plugins/bookmarklets/init.php:34
 msgid "Use this bookmarklet to publish arbitrary pages using Tiny Tiny RSS"
 msgstr ""
 
+#: plugins/close_button/init.php:22
+msgid "Close article"
+msgstr "Zavřít článek"
+
+#: plugins/googlereaderimport/init.php:92
+#: plugins/import_export/init.php:446
+msgid "No file uploaded."
+msgstr "Žádný soubor nebyl odeslán."
+
+#: plugins/googlereaderimport/init.php:178
+#, php-format
+msgid "All done. %d out of %d articles imported."
+msgstr "Vše dokončeno. %d z %d článků importováno."
+
+#: plugins/googlereaderimport/init.php:182
+msgid "The document has incorrect format."
+msgstr "Dokument nemá platný formát."
+
+#: plugins/googlereaderimport/init.php:353
+msgid "Import starred or shared items from Google Reader"
+msgstr "Importovat sdílené a nebo s hvězdičkou z Google Readeru"
+
+#: plugins/googlereaderimport/init.php:357
+msgid "Paste your starred.json or shared.json into the form below."
+msgstr ""
+"Vložte do následujícího formuláře váš soubor starred.json, nebo shared.json."
+
+#: plugins/googlereaderimport/init.php:371
+msgid "Import my Starred items"
+msgstr "Importovat mé položky s hvězdičkou"
+
 #: plugins/import_export/init.php:58
 msgid "Import and export"
 msgstr "Import a export"
 
 #: plugins/import_export/init.php:60
-msgid "Article archive"
-msgstr "Archiv článků"
-
-#: plugins/import_export/init.php:62
-msgid "You can export and import your Starred and Archived articles for safekeeping or when migrating between tt-rss instances."
-msgstr "Můžete exportovat a importovat články s hvězdičkou a archivované články pro uložení při migraci mezi instancemi tt-rss."
+msgid ""
+"You can export and import your Starred and Archived articles for safekeeping "
+"or when migrating between tt-rss instances of same version."
+msgstr ""
+"Můžete exportovat a importovat vaše články s hvězdičkou a archivované články "
+"pro uložení, a nebo při migraci mezi stejnými verzemi instancí tt-rss."
 
 #: plugins/import_export/init.php:65
 msgid "Export my data"
@@ -2640,19 +2660,19 @@ msgstr "Exportovat má data"
 msgid "Import"
 msgstr "Importovat"
 
-#: plugins/import_export/init.php:217
+#: plugins/import_export/init.php:219
 msgid "Could not import: incorrect schema version."
 msgstr "Nelze importovat: neplatná verze schématu."
 
-#: plugins/import_export/init.php:222
+#: plugins/import_export/init.php:224
 msgid "Could not import: unrecognized document format."
 msgstr "Nelze importovat: nerozpoznaný formát dokumentu."
 
-#: plugins/import_export/init.php:381
+#: plugins/import_export/init.php:383
 msgid "Finished: "
 msgstr "Dokončeno: "
 
-#: plugins/import_export/init.php:382
+#: plugins/import_export/init.php:384
 #, php-format
 msgid "%d article processed, "
 msgid_plural "%d articles processed, "
@@ -2660,7 +2680,7 @@ msgstr[0] "zpracován %d článek, "
 msgstr[1] "zpracovány %d články, "
 msgstr[2] "zpracováno %d článků, "
 
-#: plugins/import_export/init.php:383
+#: plugins/import_export/init.php:385
 #, php-format
 msgid "%d imported, "
 msgid_plural "%d imported, "
@@ -2668,7 +2688,7 @@ msgstr[0] "%d importován, "
 msgstr[1] "%d importovány, "
 msgstr[2] "%d importováno, "
 
-#: plugins/import_export/init.php:384
+#: plugins/import_export/init.php:386
 #, php-format
 msgid "%d feed created."
 msgid_plural "%d feeds created."
@@ -2676,73 +2696,14 @@ msgstr[0] "vytvořen %d kanál."
 msgstr[1] "vytvořeny %d kanály."
 msgstr[2] "vytvořeno %d kanálů."
 
-#: plugins/import_export/init.php:389
+#: plugins/import_export/init.php:391
 msgid "Could not load XML document."
 msgstr "Nelze načíst dokument XML."
 
-#: plugins/import_export/init.php:401
+#: plugins/import_export/init.php:403
 msgid "Prepare data"
 msgstr "Připravit data"
 
-#: plugins/import_export/init.php:444
-#: plugins/googlereaderimport/init.php:92
-msgid "No file uploaded."
-msgstr "Žádný soubor nebyl odeslán."
-
-#: plugins/mail/init.php:85
-msgid "From:"
-msgstr "Od:"
-
-#: plugins/mail/init.php:94
-msgid "To:"
-msgstr "Do:"
-
-#: plugins/mail/init.php:107
-msgid "Subject:"
-msgstr "Předmět:"
-
-#: plugins/mail/init.php:123
-msgid "Send e-mail"
-msgstr "Odeslat zprávu"
-
-#: plugins/note/init.php:26
-#: plugins/note/note.js:11
-msgid "Edit article note"
-msgstr "Upravit poznámky článku"
-
-#: plugins/example/init.php:36
-msgid "Example Pane"
-msgstr "Ukázková výplň"
-
-#: plugins/example/init.php:67
-msgid "Sample value"
-msgstr "Ukázková hodnota"
-
-#: plugins/example/init.php:73
-msgid "Set value"
-msgstr "Nastavit hodnotu"
-
-#: plugins/googlereaderimport/init.php:178
-#, php-format
-msgid "All done. %d out of %d articles imported."
-msgstr "Vše dokončeno. %d z %d článků importováno."
-
-#: plugins/googlereaderimport/init.php:182
-msgid "The document has incorrect format."
-msgstr "Dokument nemá platný formát."
-
-#: plugins/googlereaderimport/init.php:353
-msgid "Import starred or shared items from Google Reader"
-msgstr "Importovat sdílené a nebo s hvězdičkou z Google Readeru"
-
-#: plugins/googlereaderimport/init.php:357
-msgid "Paste your starred.json or shared.json into the form below."
-msgstr "Vložte do následujícího formuláře váš soubor starred.json, nebo shared.json."
-
-#: plugins/googlereaderimport/init.php:371
-msgid "Import my Starred items"
-msgstr "Importovat mé položky s hvězdičkou"
-
 #: plugins/instances/init.php:141
 msgid "Linked"
 msgstr ""
@@ -2784,8 +2745,12 @@ msgid "Link instance"
 msgstr "Propojit instance"
 
 #: plugins/instances/init.php:304
-msgid "You can connect other instances of Tiny Tiny RSS to this one to share Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:"
-msgstr "Můžete spojit další instance Tiny Tiny RSS pro sdílení oblíbených kanálů. S touto instancí Tiny Tiny RSS se spojíte pomocí následující URL:"
+msgid ""
+"You can connect other instances of Tiny Tiny RSS to this one to share Popular "
+"feeds. Link to this instance of Tiny Tiny RSS by using this URL:"
+msgstr ""
+"Můžete spojit další instance Tiny Tiny RSS pro sdílení oblíbených kanálů. S "
+"touto instancí Tiny Tiny RSS se spojíte pomocí následující URL:"
 
 #: plugins/instances/init.php:314
 msgid "Last connected"
@@ -2803,6 +2768,75 @@ msgstr "Uložené kanály"
 msgid "Create link"
 msgstr "Vytvořit odkaz"
 
+#: plugins/mail/init.php:64
+#: plugins/mail/init.php:70
+#: plugins/mailto/init.php:49
+#: plugins/mailto/init.php:55
+msgid "[Forwarded]"
+msgstr "[Přeposláno]"
+
+#: plugins/mail/init.php:64
+#: plugins/mailto/init.php:49
+msgid "Multiple articles"
+msgstr "Více článků"
+
+#: plugins/mail/init.php:85
+msgid "From:"
+msgstr "Od:"
+
+#: plugins/mail/init.php:94
+msgid "To:"
+msgstr "Do:"
+
+#: plugins/mail/init.php:107
+msgid "Subject:"
+msgstr "Předmět:"
+
+#: plugins/mail/init.php:123
+msgid "Send e-mail"
+msgstr "Odeslat zprávu"
+
+#: plugins/mailto/init.php:71
+msgid "Clicking the following link to invoke your mail client:"
+msgstr "Klikněte na následující odkaz pro spuštění poštovního klienta:"
+
+#: plugins/mailto/init.php:75
+msgid "Forward selected article(s) by email."
+msgstr "Přeposlat vybrané články e-mailem."
+
+#: plugins/mailto/init.php:78
+msgid ""
+"You should be able to edit the message before sending in your mail client."
+msgstr ""
+"Měli byste být schopni upravit zprávu před odesláním ve vašem poštovním "
+"klientu."
+
+#: plugins/mailto/init.php:83
+msgid "Close this dialog"
+msgstr "Uzavřít tento dialog"
+
+#: plugins/note/init.php:26
+#: plugins/note/note.js:11
+msgid "Edit article note"
+msgstr "Upravit poznámky článku"
+
+#: plugins/nsfw/init.php:29
+#: plugins/nsfw/init.php:40
+msgid "Not work safe (click to toggle)"
+msgstr "Není bezpečné pro práci (kliknutím přepnout)"
+
+#: plugins/nsfw/init.php:50
+msgid "NSFW Plugin"
+msgstr "Modul NSFW"
+
+#: plugins/nsfw/init.php:77
+msgid "Tags to consider NSFW (comma-separated)"
+msgstr "Značky považované za nevhodné k práci (oddělené čárkou)"
+
+#: plugins/nsfw/init.php:98
+msgid "Configuration saved."
+msgstr "Nastavení uloženo."
+
 #: plugins/share/init.php:25
 msgid "Share by URL"
 msgstr "Sdílet pomocí URL"
@@ -2834,7 +2868,10 @@ msgid "Your database will not be modified."
 msgstr "Vaše databáze nebude změněna."
 
 #: plugins/updater/init.php:360
-msgid "Your current tt-rss installation directory will not be modified. It will be renamed and left in the parent directory. You will be able to migrate all your customized files after update finishes."
+msgid ""
+"Your current tt-rss installation directory will not be modified. It will be "
+"renamed and left in the parent directory. You will be able to migrate all "
+"your customized files after update finishes."
 msgstr ""
 
 #: plugins/updater/init.php:361
@@ -2845,36 +2882,38 @@ msgstr "Připraveno k aktualizaci."
 msgid "Start update"
 msgstr "Zahájit aktualizaci"
 
-#: js/feedlist.js:395
-#: js/feedlist.js:423
-#: plugins/digest/digest.js:26
+#: js/feedlist.js:397
+#: js/feedlist.js:425
 msgid "Mark all articles in %s as read?"
 msgstr "Označit všechny články v %s jako přečtené?"
 
-#: js/feedlist.js:414
+#: js/feedlist.js:416
 msgid "Mark all articles in %s older than 1 day as read?"
 msgstr "Označit všechny články starší než 1 den v %s jako přečtené?"
 
-#: js/feedlist.js:417
+#: js/feedlist.js:419
 msgid "Mark all articles in %s older than 1 week as read?"
 msgstr "Označit všechny články starší než 1 týden v %s jako přečtené?"
 
-#: js/feedlist.js:420
+#: js/feedlist.js:422
 msgid "Mark all articles in %s older than 2 weeks as read?"
 msgstr "Označit všechny články starší než 2 týdny v %s jako přečtené?"
 
 #: js/functions.js:65
 msgid "The error will be reported to the configured log destination."
-msgstr ""
+msgstr "Chyba bude nahlášena do nastaveného cíle záznamu."
 
 #: js/functions.js:107
-msgid "Are you sure to report this exception to tt-rss.org? The report will include your browser information. Your IP would be saved in the database."
-msgstr "Opravdu si přejete nahlásit výjimku na tt-rss.org? Hlášení bude obsahovat informace o vašem prohlížeči a vaše adresa IP bude uložena v databázi."
+msgid ""
+"Are you sure to report this exception to tt-rss.org? The report will include "
+"your browser information. Your IP would be saved in the database."
+msgstr ""
+"Opravdu si přejete nahlásit výjimku na tt-rss.org? Hlášení bude obsahovat "
+"informace o vašem prohlížeči a vaše adresa IP bude uložena v databázi."
 
 #: js/functions.js:236
-#, fuzzy
 msgid "Click to close"
-msgstr "Kliknutím pozastavit"
+msgstr "Kliknutím zavřít"
 
 #: js/functions.js:612
 msgid "Error explained"
@@ -2933,9 +2972,8 @@ msgid "Specified URL doesn't seem to contain any feeds."
 msgstr "Zadaná URL nevypadá jako by obsahovala jakékoliv kanály."
 
 #: js/functions.js:862
-#, fuzzy
 msgid "Expand to select feed"
-msgstr "Upravit vybrané kanály"
+msgstr ""
 
 #: js/functions.js:874
 msgid "Couldn't download the specified URL: %s"
@@ -2943,7 +2981,7 @@ msgstr "Nelze stáhnout zadanou URL: %s"
 
 #: js/functions.js:878
 msgid "XML validation failed: %s"
-msgstr ""
+msgstr "Validace XML selhala: %s"
 
 #: js/functions.js:883
 msgid "You are already subscribed to this feed."
@@ -2962,15 +3000,19 @@ msgid "Create Filter"
 msgstr "Vytvořit filtr"
 
 #: js/functions.js:1191
-msgid "Reset subscription? Tiny Tiny RSS will try to subscribe to the notification hub again on next feed update."
-msgstr "Obnovit odběr? Tiny Tiny RSS se pokusí znovu přihlásit k odběru při další aktualizaci  kanálu."
+msgid ""
+"Reset subscription? Tiny Tiny RSS will try to subscribe to the notification "
+"hub again on next feed update."
+msgstr ""
+"Obnovit odběr? Tiny Tiny RSS se pokusí znovu přihlásit k odběru při další "
+"aktualizaci  kanálu."
 
 #: js/functions.js:1202
 msgid "Subscription reset."
 msgstr "Odběr obnoven."
 
 #: js/functions.js:1212
-#: js/tt-rss.js:650
+#: js/tt-rss.js:677
 msgid "Unsubscribe from %s?"
 msgstr "Zrušit odběr %s?"
 
@@ -2992,8 +3034,8 @@ msgid "Trying to change address..."
 msgstr "Zkouším změnit adresu..."
 
 #: js/functions.js:1546
-#: js/tt-rss.js:421
-#: js/tt-rss.js:631
+#: js/tt-rss.js:422
+#: js/tt-rss.js:658
 msgid "You can't edit this kind of feed."
 msgstr "Nemůžete upravit tento typ kanálu."
 
@@ -3024,8 +3066,12 @@ msgid "No feeds are selected."
 msgstr "Nejsou vybrány žádné kanály."
 
 #: js/functions.js:1702
-msgid "Remove selected feeds from the archive? Feeds with stored articles will not be removed."
-msgstr "Odstranit vybrané kanály z archivu? Kanály s uloženými články nebudou odebrány."
+msgid ""
+"Remove selected feeds from the archive? Feeds with stored articles will not "
+"be removed."
+msgstr ""
+"Odstranit vybrané kanály z archivu? Kanály s uloženými články nebudou "
+"odebrány."
 
 #: js/functions.js:1741
 msgid "Feeds with update errors"
@@ -3099,8 +3145,11 @@ msgid "No labels are selected."
 msgstr "Nejsou vybrány žádné štítky"
 
 #: js/prefs.js:309
-msgid "Remove selected users? Neither default admin nor your account will be removed."
-msgstr "Odstranit vybrané uživatele? Váš účet ani výchozí účet správce nelze odstranit."
+msgid ""
+"Remove selected users? Neither default admin nor your account will be removed."
+msgstr ""
+"Odstranit vybrané uživatele? Váš účet ani výchozí účet správce nelze "
+"odstranit."
 
 #: js/prefs.js:312
 msgid "Removing selected users..."
@@ -3210,8 +3259,8 @@ msgid "Please choose an OPML file first."
 msgstr "Vyberte prosím nejprve soubor OPML."
 
 #: js/prefs.js:815
-#: plugins/import_export/import_export.js:115
 #: plugins/googlereaderimport/init.js:45
+#: plugins/import_export/import_export.js:115
 msgid "Importing, please wait..."
 msgstr "Importuji, čekejte prosím..."
 
@@ -3220,8 +3269,11 @@ msgid "Reset to defaults?"
 msgstr "Obnovit výchozí hodnoty?"
 
 #: js/prefs.js:1096
-msgid "Remove category %s? Any nested feeds would be placed into Uncategorized."
-msgstr "Odstranit kategorii %s? Všechny vnořené kanály budou umístěny do kategorie Nezařazeno."
+msgid ""
+"Remove category %s? Any nested feeds would be placed into Uncategorized."
+msgstr ""
+"Odstranit kategorii %s? Všechny vnořené kanály budou umístěny do kategorie "
+"Nezařazeno."
 
 #: js/prefs.js:1102
 msgid "Removing category..."
@@ -3284,7 +3336,8 @@ msgid "Settings Profiles"
 msgstr "Profily nastavení"
 
 #: js/prefs.js:1425
-msgid "Remove selected profiles? Active and default profiles will not be removed."
+msgid ""
+"Remove selected profiles? Active and default profiles will not be removed."
 msgstr "Odstranit vybrané profily? Aktivní a výchozí profil nebude odebrán."
 
 #: js/prefs.js:1428
@@ -3324,262 +3377,244 @@ msgstr "Generované URL vyčištěny."
 
 #: js/prefs.js:1547
 msgid "This will invalidate all previously shared article URLs. Continue?"
-msgstr "Zneplatní všechny předchozí generované URL sdílených článků. Pokračovat?"
+msgstr ""
+"Zneplatní všechny předchozí generované URL sdílených článků. Pokračovat?"
 
 #: js/prefs.js:1557
 msgid "Shared URLs cleared."
 msgstr "Sdílené URL vyčištěny."
 
-#: js/prefs.js:1663
+#: js/prefs.js:1648
 msgid "Label Editor"
 msgstr "Editor štítků"
 
-#: js/prefs.js:1785
+#: js/prefs.js:1770
 msgid "Subscribing to feeds..."
 msgstr "Přihlašuji se k odběru kanálů..."
 
-#: js/prefs.js:1822
+#: js/prefs.js:1807
 msgid "Clear stored data for this plugin?"
 msgstr "Smazat uložená data modulu?"
 
-#: js/tt-rss.js:126
+#: js/prefs.js:1824
+msgid "Clear all messages in the error log?"
+msgstr "Vymazat všechny zprávy ze záznamu chyb?"
+
+#: js/tt-rss.js:127
 msgid "Mark all articles as read?"
 msgstr "Označit všechny články jako přečtené?"
 
-#: js/tt-rss.js:132
+#: js/tt-rss.js:133
 msgid "Marking all feeds as read..."
 msgstr "Označuji všechny kanály jako přečtené..."
 
-#: js/tt-rss.js:380
+#: js/tt-rss.js:381
 msgid "Please enable mail plugin first."
 msgstr "Nejprve si prosím povolte modul odesílání e-mailů."
 
-#: js/tt-rss.js:492
+#: js/tt-rss.js:493
 msgid "Please enable embed_original plugin first."
 msgstr "Nejprve si prosím povolte modul embed_original."
 
-#: js/tt-rss.js:618
+#: js/tt-rss.js:645
 msgid "Select item(s) by tags"
 msgstr "Vybrat položky podle značek"
 
-#: js/tt-rss.js:639
+#: js/tt-rss.js:666
 msgid "You can't unsubscribe from the category."
 msgstr "Nelze zrušit odběr kategorie."
 
-#: js/tt-rss.js:644
-#: js/tt-rss.js:798
+#: js/tt-rss.js:671
+#: js/tt-rss.js:825
 msgid "Please select some feed first."
 msgstr "Nejprve si prosím vyberte kanál."
 
-#: js/tt-rss.js:793
+#: js/tt-rss.js:820
 msgid "You can't rescore this kind of feed."
 msgstr "Tento druh kanálu nemůžete přehodnotit."
 
-#: js/tt-rss.js:803
+#: js/tt-rss.js:830
 msgid "Rescore articles in %s?"
 msgstr "Přehodnotit články v %s?"
 
-#: js/tt-rss.js:806
+#: js/tt-rss.js:833
 msgid "Rescoring articles..."
 msgstr "Přehodnocuji články..."
 
-#: js/tt-rss.js:940
+#: js/tt-rss.js:967
 msgid "New version available!"
 msgstr "Je dostupná nová verze."
 
-#: js/viewfeed.js:102
+#: js/viewfeed.js:100
 msgid "Cancel search"
 msgstr "Zrušit hledání"
 
-#: js/viewfeed.js:453
-#: plugins/digest/digest.js:258
-#: plugins/digest/digest.js:714
+#: js/viewfeed.js:449
 msgid "Unstar article"
 msgstr "Odebrat článku hvězdičku"
 
-#: js/viewfeed.js:457
-#: plugins/digest/digest.js:260
-#: plugins/digest/digest.js:718
+#: js/viewfeed.js:453
 msgid "Star article"
 msgstr "Přidat článku hvězdičku"
 
-#: js/viewfeed.js:497
-#: plugins/digest/digest.js:263
-#: plugins/digest/digest.js:749
+#: js/viewfeed.js:493
 msgid "Unpublish article"
 msgstr "Zrušit publikování článku"
 
-#: js/viewfeed.js:501
-#: plugins/digest/digest.js:265
-#: plugins/digest/digest.js:754
+#: js/viewfeed.js:497
 msgid "Publish article"
 msgstr "Publikovat článek"
 
-#: js/viewfeed.js:653
-#, fuzzy
+#: js/viewfeed.js:649
 msgid "%d article selected"
 msgid_plural "%d articles selected"
-msgstr[0] "Není vybrán žádný článek."
-msgstr[1] "Není vybrán žádný článek."
-msgstr[2] "Není vybrán žádný článek."
-
-#: js/viewfeed.js:725
-#: js/viewfeed.js:753
-#: js/viewfeed.js:780
-#: js/viewfeed.js:843
-#: js/viewfeed.js:877
-#: js/viewfeed.js:997
-#: js/viewfeed.js:1040
-#: js/viewfeed.js:1093
-#: js/viewfeed.js:2091
-#: plugins/mailto/init.js:7
+msgstr[0] "%d vybraný článek"
+msgstr[1] "%d vybrané články"
+msgstr[2] "%d vybraných článků"
+
+#: js/viewfeed.js:721
+#: js/viewfeed.js:749
+#: js/viewfeed.js:776
+#: js/viewfeed.js:839
+#: js/viewfeed.js:873
+#: js/viewfeed.js:993
+#: js/viewfeed.js:1036
+#: js/viewfeed.js:1089
+#: js/viewfeed.js:2066
 #: plugins/mail/mail.js:7
+#: plugins/mailto/init.js:7
 msgid "No articles are selected."
 msgstr "Nejsou vybrány žádné články."
 
-#: js/viewfeed.js:1005
+#: js/viewfeed.js:1001
 msgid "Delete %d selected article in %s?"
 msgid_plural "Delete %d selected articles in %s?"
 msgstr[0] "Smazat %d vybraný článek v %s?"
 msgstr[1] "Smazat %d vybrané články v %s?"
 msgstr[2] "Smazat %d vybraných článků v %s?"
 
-#: js/viewfeed.js:1007
+#: js/viewfeed.js:1003
 msgid "Delete %d selected article?"
 msgid_plural "Delete %d selected articles?"
 msgstr[0] "Smazat %d vybraný článek?"
 msgstr[1] "Smazat %d vybrané články?"
 msgstr[2] "Smazat %d vybraných článků?"
 
-#: js/viewfeed.js:1049
+#: js/viewfeed.js:1045
 msgid "Archive %d selected article in %s?"
 msgid_plural "Archive %d selected articles in %s?"
 msgstr[0] "Archivovat %d vybraný článek v %s?"
 msgstr[1] "Archivovat %d vybrané články v %s?"
 msgstr[2] "Archivovat %d vybraných článků v %s?"
 
-#: js/viewfeed.js:1052
+#: js/viewfeed.js:1048
 msgid "Move %d archived article back?"
 msgid_plural "Move %d archived articles back?"
 msgstr[0] "Přesunout zpět %d archivovaný článek?"
 msgstr[1] "Přesunout zpět %d archivované články?"
 msgstr[2] "Přesunout zpět  %d archivovaných článků?"
 
-#: js/viewfeed.js:1054
-msgid "Please note that unstarred articles might get purged on next feed update."
-msgstr "Vezměte na vědomí, že články bez hvězdičky můžou být odstraněny při následující aktualizaci kanálu."
+#: js/viewfeed.js:1050
+msgid ""
+"Please note that unstarred articles might get purged on next feed update."
+msgstr ""
+"Vezměte na vědomí, že články bez hvězdičky můžou být odstraněny při "
+"následující aktualizaci kanálu."
 
-#: js/viewfeed.js:1099
+#: js/viewfeed.js:1095
 msgid "Mark %d selected article in %s as read?"
 msgid_plural "Mark %d selected articles in %s as read?"
 msgstr[0] "Označit %d článek v %s jako přečtený?"
 msgstr[1] "Označit %d články v %s jako přečtené?"
 msgstr[2] "Označit %d článků v %s jako přečtené?"
 
-#: js/viewfeed.js:1123
+#: js/viewfeed.js:1119
 msgid "Edit article Tags"
 msgstr "Upravit značky článku"
 
-#: js/viewfeed.js:1129
+#: js/viewfeed.js:1125
 msgid "Saving article tags..."
 msgstr "Ukládám značky článku..."
 
-#: js/viewfeed.js:1335
+#: js/viewfeed.js:1331
 msgid "No article is selected."
 msgstr "Není vybrán žádný článek."
 
-#: js/viewfeed.js:1370
+#: js/viewfeed.js:1366
 msgid "No articles found to mark"
 msgstr "Nenalezeny žádné články k označení"
 
-#: js/viewfeed.js:1372
+#: js/viewfeed.js:1368
 msgid "Mark %d article as read?"
 msgid_plural "Mark %d articles as read?"
 msgstr[0] "Označit %d článek jako přečtený?"
 msgstr[1] "Označit %d články jako přečtené?"
 msgstr[2] "Označit %d článků jako přečtené?"
 
-#: js/viewfeed.js:1895
+#: js/viewfeed.js:1870
 msgid "Open original article"
 msgstr "Otevřít původní článek"
 
-#: js/viewfeed.js:1901
+#: js/viewfeed.js:1876
 msgid "Display article URL"
 msgstr "Zobrazit URL článku"
 
-#: js/viewfeed.js:1920
+#: js/viewfeed.js:1895
 msgid "Toggle marked"
 msgstr "Přepnout označené"
 
-#: js/viewfeed.js:2001
+#: js/viewfeed.js:1976
 msgid "Assign label"
 msgstr "Přiřadit štítek"
 
-#: js/viewfeed.js:2006
+#: js/viewfeed.js:1981
 msgid "Remove label"
 msgstr "Odstranit štítek"
 
-#: js/viewfeed.js:2060
+#: js/viewfeed.js:2035
 msgid "Please enter new score for selected articles:"
 msgstr "Zadejte prosím nové hodnocení vybraných článků:"
 
-#: js/viewfeed.js:2102
+#: js/viewfeed.js:2077
 msgid "Please enter new score for this article:"
 msgstr "Zadejte prosím nové hodnocení článku:"
 
-#: js/viewfeed.js:2135
+#: js/viewfeed.js:2110
 msgid "Article URL:"
 msgstr "URL článku:"
 
-#: plugins/digest/digest.js:72
-msgid "Mark %d displayed article as read?"
-msgid_plural "Mark %d displayed articles as read?"
-msgstr[0] "Označit %d zobrazený článek jako přečtený?"
-msgstr[1] "Označit %d zobrazené články jako přečtené?"
-msgstr[2] "Označit %d zobrazených článků jako přečtené?"
-
-#: plugins/digest/digest.js:290
-msgid "Error: unable to load article."
-msgstr "Chyba: nelze načíst článek."
-
-#: plugins/digest/digest.js:464
-msgid "Click to expand article."
-msgstr "Klikněte pro rozbalení článku."
-
-#: plugins/digest/digest.js:535
-msgid "%d more..."
-msgid_plural "%d more..."
-msgstr[0] "%d další..."
-msgstr[1] "%d další..."
-msgstr[2] "%d dalších..."
-
-#: plugins/digest/digest.js:542
-msgid "No unread feeds."
-msgstr "Žádné nepřečtené kanály."
-
-#: plugins/digest/digest.js:649
-msgid "Load more..."
-msgstr "Načíst další..."
-
 #: plugins/embed_original/init.js:6
 msgid "Sorry, your browser does not support sandboxed iframes."
 msgstr "Lituji, váš prohlížeč nepodporuje iframe sandbox."
 
-#: plugins/mailto/init.js:21
-#: plugins/mail/mail.js:21
-msgid "Forward article by email"
-msgstr "Přeposlat článek e-mailem"
+#: plugins/googlereaderimport/init.js:18
+msgid "Google Reader Import"
+msgstr "Import z Google Reader"
+
+#: plugins/googlereaderimport/init.js:42
+msgid "Please choose a file first."
+msgstr "Prosím, nejdříve vyberte soubor."
 
 #: plugins/import_export/import_export.js:13
 msgid "Export Data"
 msgstr "Exportovat data"
 
 #: plugins/import_export/import_export.js:40
-msgid "Finished, exported %d article. You can download the data <a class='visibleLink' href='%u'>here</a>."
-msgid_plural "Finished, exported %d articles. You can download the data <a class='visibleLink' href='%u'>here</a>."
-msgstr[0] "Dokončeno, exportován %d článek. a class='visibleLink' href='%u'>Zde</a> můžete stáhnout data."
-msgstr[1] "Dokončeno, exportovány %d články. a class='visibleLink' href='%u'>Zde</a> můžete stáhnout data."
-msgstr[2] "Dokončeno, exportováno %d článků. a class='visibleLink' href='%u'>Zde</a> můžete stáhnout data."
+msgid ""
+"Finished, exported %d article. You can download the data <a "
+"class='visibleLink' href='%u'>here</a>."
+msgid_plural ""
+"Finished, exported %d articles. You can download the data <a "
+"class='visibleLink' href='%u'>here</a>."
+msgstr[0] ""
+"Dokončeno, exportován %d článek. a class='visibleLink' href='%u'>Zde</a> "
+"můžete stáhnout data."
+msgstr[1] ""
+"Dokončeno, exportovány %d články. a class='visibleLink' href='%u'>Zde</a> "
+"můžete stáhnout data."
+msgstr[2] ""
+"Dokončeno, exportováno %d článků. a class='visibleLink' href='%u'>Zde</a> "
+"můžete stáhnout data."
 
 #: plugins/import_export/import_export.js:93
 msgid "Data Import"
@@ -3589,18 +3624,6 @@ msgstr "Import dat"
 msgid "Please choose the file first."
 msgstr "Prosím, nejdříve vyberte soubor."
 
-#: plugins/note/note.js:17
-msgid "Saving article note..."
-msgstr "Ukládám poznámku článku..."
-
-#: plugins/googlereaderimport/init.js:18
-msgid "Google Reader Import"
-msgstr "Import z Google Reader"
-
-#: plugins/googlereaderimport/init.js:42
-msgid "Please choose a file first."
-msgstr "Prosím, nejdříve vyberte soubor."
-
 #: plugins/instances/instances.js:10
 msgid "Link Instance"
 msgstr "Propojit instance"
@@ -3626,13 +3649,112 @@ msgstr "Není vybrána žádná instance."
 msgid "Please select only one instance."
 msgstr "Prosím zvolte pouze jednu instanci."
 
+#: plugins/mail/mail.js:21
+#: plugins/mailto/init.js:21
+msgid "Forward article by email"
+msgstr "Přeposlat článek e-mailem"
+
+#: plugins/note/note.js:17
+msgid "Saving article note..."
+msgstr "Ukládám poznámku článku..."
+
 #: plugins/share/share.js:10
 msgid "Share article by URL"
 msgstr "Sdílet článek pomocí URL"
 
 #: plugins/updater/updater.js:58
-msgid "Backup your tt-rss directory before continuing. Please type 'yes' to continue."
-msgstr "Před pokračováním zálohujte svůj adresář tt-rss. Napište prosím 'yes' pro pokračování."
+msgid ""
+"Backup your tt-rss directory before continuing. Please type 'yes' to continue."
+msgstr ""
+"Před pokračováním zálohujte svůj adresář tt-rss. Napište prosím 'yes' pro "
+"pokračování."
+
+#~ msgid "(Un)hide empty categories"
+#~ msgstr "Zobrazit/Skrýt prázdné kategorie"
+
+#~ msgid "Published articles and generated feeds"
+#~ msgstr "Publikované články a generované kanály"
+
+#~ msgid "Articles shared by URL"
+#~ msgstr "Články sdílené pomocí URL"
+
+#~ msgid "These feeds have not been updated because of errors:"
+#~ msgstr "Kanály, které nebyly aktualizovány kvůli chybám:"
+
+#~ msgid "Your browser doesn't support Javascript, which is required for this application to function properly. Please check your browser settings."
+#~ msgstr "Váš prohlížeč nepodporuje Javascript, který je vyžadován pro správnou funkci aplikace. Zkontrolujte prosím nastavení prohlížeče."
+
+#~ msgid "Hello,"
+#~ msgstr "Ahoj,"
+
+#~ msgid "Regular version"
+#~ msgstr "Normální verze"
+
+#~ msgid "Home"
+#~ msgstr "Domů"
+
+#~ msgid "Nothing found (click to reload feed)."
+#~ msgstr "Nic nenalezeno (klikněte pro obnovení kanálu)."
+
+#~ msgid "Open regular version"
+#~ msgstr "Otevřít normální verzi"
+
+#~ msgid "Enable categories"
+#~ msgstr "Povolit kategorie"
+
+#~ msgid "ON"
+#~ msgstr "Zapnuto"
+
+#~ msgid "OFF"
+#~ msgstr "Vypnuto"
+
+#~ msgid "Browse categories like folders"
+#~ msgstr "Procházet kategorie jako složky"
+
+#~ msgid "Show images in posts"
+#~ msgstr "Zobrazit obrázky v příspěvcích"
+
+#~ msgid "Hide read articles and feeds"
+#~ msgstr "Skrýt přečtené články a kanály"
+
+#~ msgid "Sort feeds by unread count"
+#~ msgstr "Řadit kanály dle počtu nepřečtených článků"
+
+#~ msgid "Article archive"
+#~ msgstr "Archiv článků"
+
+#~ msgid "Example Pane"
+#~ msgstr "Ukázková výplň"
+
+#~ msgid "Sample value"
+#~ msgstr "Ukázková hodnota"
+
+#~ msgid "Set value"
+#~ msgstr "Nastavit hodnotu"
+
+#~ msgid "Mark %d displayed article as read?"
+#~ msgid_plural "Mark %d displayed articles as read?"
+#~ msgstr[0] "Označit %d zobrazený článek jako přečtený?"
+#~ msgstr[1] "Označit %d zobrazené články jako přečtené?"
+#~ msgstr[2] "Označit %d zobrazených článků jako přečtené?"
+
+#~ msgid "Error: unable to load article."
+#~ msgstr "Chyba: nelze načíst článek."
+
+#~ msgid "Click to expand article."
+#~ msgstr "Klikněte pro rozbalení článku."
+
+#~ msgid "%d more..."
+#~ msgid_plural "%d more..."
+#~ msgstr[0] "%d další..."
+#~ msgstr[1] "%d další..."
+#~ msgstr[2] "%d dalších..."
+
+#~ msgid "No unread feeds."
+#~ msgstr "Žádné nepřečtené kanály."
+
+#~ msgid "Load more..."
+#~ msgstr "Načíst další..."
 
 #~ msgid "Switch to digest..."
 #~ msgstr "Přepnout na souhrn..."
index 6d1211c1df3d7d20b8bc609e1f4c47322751d273..bcbef187a1413269703a30fcdb4a4e6f1ff82f2e 100644 (file)
Binary files a/locale/fr_FR/LC_MESSAGES/messages.mo and b/locale/fr_FR/LC_MESSAGES/messages.mo differ
index 87e180416d640b34a70c3c753239d9400a7574f9..04992f5f9ff95cbcbdfeec01de9329bf349bcf58 100644 (file)
@@ -12,7 +12,7 @@ msgstr ""
 "Project-Id-Version: Tiny Tiny RSS\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2013-04-29 15:58+0400\n"
-"PO-Revision-Date: 2013-04-03 08:43+0100\n"
+"PO-Revision-Date: 2013-05-01 11:51+0100\n"
 "Last-Translator: Raphael Rochet <raphael@rri.fr>\n"
 "Language-Team: French\n"
 "Language: fr_FR\n"
@@ -20,7 +20,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Poedit 1.5.4\n"
+"X-Generator: Poedit 1.5.5\n"
 
 #: backend.php:73
 msgid "Use default"
@@ -54,49 +54,39 @@ msgstr "Au bout de 3 mois"
 msgid "Default interval"
 msgstr "Fréquence de mise à jour par défaut"
 
-#: backend.php:83
-#: backend.php:93
+#: backend.php:83 backend.php:93
 msgid "Disable updates"
 msgstr "Désactiver les mises à jour"
 
-#: backend.php:84
-#: backend.php:94
+#: backend.php:84 backend.php:94
 msgid "Each 15 minutes"
 msgstr "Toutes les 15 minutes"
 
-#: backend.php:85
-#: backend.php:95
+#: backend.php:85 backend.php:95
 msgid "Each 30 minutes"
 msgstr "Toutes les 30 minutes"
 
-#: backend.php:86
-#: backend.php:96
+#: backend.php:86 backend.php:96
 msgid "Hourly"
 msgstr "Toutes les heures"
 
-#: backend.php:87
-#: backend.php:97
+#: backend.php:87 backend.php:97
 msgid "Each 4 hours"
 msgstr "Toutes les 4 heures"
 
-#: backend.php:88
-#: backend.php:98
+#: backend.php:88 backend.php:98
 msgid "Each 12 hours"
 msgstr "Toutes les 12 heures"
 
-#: backend.php:89
-#: backend.php:99
+#: backend.php:89 backend.php:99
 msgid "Daily"
 msgstr "Une fois par jour"
 
-#: backend.php:90
-#: backend.php:100
+#: backend.php:90 backend.php:100
 msgid "Weekly"
 msgstr "Une fois par semaine"
 
-#: backend.php:103
-#: classes/pref/users.php:123
-#: classes/pref/system.php:44
+#: backend.php:103 classes/pref/users.php:123 classes/pref/system.php:44
 msgid "User"
 msgstr "Utilisateur"
 
@@ -109,12 +99,22 @@ msgid "Administrator"
 msgstr "Administrateur"
 
 #: errors.php:9
-msgid "This program requires XmlHttpRequest to function properly. Your browser doesn't seem to support it."
-msgstr "Ce programme nécessite l'utilisation de XmlHttpRequest pour fonctionner correctement. Votre navigateur web semble ne pas intégrer cette fonctionnalité."
+msgid ""
+"This program requires XmlHttpRequest to function properly. Your browser "
+"doesn't seem to support it."
+msgstr ""
+"Ce programme nécessite l'utilisation de XmlHttpRequest pour fonctionner "
+"correctement. Votre navigateur web semble ne pas intégrer cette "
+"fonctionnalité."
 
 #: errors.php:12
-msgid "This program requires cookies to function properly. Your browser doesn't seem to support them."
-msgstr "Ce programme nécessite l'utilisation de cookies pour fonctionner correctement. Votre navigateur web semble ne pas intégrer cette fonctionnalité."
+msgid ""
+"This program requires cookies to function properly. Your browser doesn't "
+"seem to support them."
+msgstr ""
+"Ce programme nécessite l'utilisation de cookies pour fonctionner "
+"correctement. Votre navigateur web semble ne pas intégrer cette "
+"fonctionnalité."
 
 #: errors.php:15
 msgid "Backend sanity check failed."
@@ -125,8 +125,12 @@ msgid "Frontend sanity check failed."
 msgstr "Le test de l'interface a échoué."
 
 #: errors.php:19
-msgid "Incorrect database schema version. &lt;a href='db-updater.php'&gt;Please update&lt;/a&gt;."
-msgstr "Version non valable pour le schéma de la base de données. &lt;a href='db-updater.php'&gt;Veuillez le mettre à jour&lt;/a&gt;."
+msgid ""
+"Incorrect database schema version. &lt;a href='db-updater.php'&gt;Please "
+"update&lt;/a&gt;."
+msgstr ""
+"Version non valable pour le schéma de la base de données. &lt;a href='db-"
+"updater.php'&gt;Veuillez le mettre à jour&lt;/a&gt;."
 
 #: errors.php:21
 msgid "Request not authorized."
@@ -137,60 +141,48 @@ msgid "No operation to perform."
 msgstr "Aucune opération à effectuer."
 
 #: errors.php:25
-msgid "Could not display feed: query failed. Please check label match syntax or local configuration."
-msgstr "Impossible d'afficher le flux : la requête n'a pas abouti. Veuillez vérifier la syntaxe de correspondance d'étiquette ou la configuration locale."
+msgid ""
+"Could not display feed: query failed. Please check label match syntax or "
+"local configuration."
+msgstr ""
+"Impossible d'afficher le flux : la requête n'a pas abouti. Veuillez vérifier "
+"la syntaxe de correspondance d'étiquette ou la configuration locale."
 
 #: errors.php:27
 msgid "Denied. Your access level is insufficient to access this page."
-msgstr "Accès refusé. Vous n'avez pas les permissions nécessaires pour accéder à cette page."
+msgstr ""
+"Accès refusé. Vous n'avez pas les permissions nécessaires pour accéder à "
+"cette page."
 
 #: errors.php:29
 msgid "Configuration check failed"
 msgstr "Échec du test de configuration"
 
 #: errors.php:31
-msgid "Your version of MySQL is not currently supported. Please see official site for more information."
-msgstr "Votre version de MySQL n'est pas supportée actuellement. Veuillez consulter le site officiel pour plus d'informations."
+msgid ""
+"Your version of MySQL is not currently supported. Please see official site "
+"for more information."
+msgstr ""
+"Votre version de MySQL n'est pas supportée actuellement. Veuillez consulter "
+"le site officiel pour plus d'informations."
 
 #: errors.php:35
 msgid "SQL escaping test failed, check your database and PHP configuration"
-msgstr "Le test d'échappement SQL a échoué, veuillez vérifier votre configuration de base de données et de PHP"
-
-#: index.php:128
-#: index.php:145
-#: index.php:265
-#: prefs.php:98
-#: classes/backend.php:5
-#: classes/pref/labels.php:296
-#: classes/pref/filters.php:680
-#: classes/pref/feeds.php:1388
-#: plugins/digest/digest_body.php:61
-#: js/feedlist.js:128
-#: js/feedlist.js:439
-#: js/functions.js:446
-#: js/functions.js:784
-#: js/functions.js:1194
-#: js/functions.js:1330
-#: js/functions.js:1642
-#: js/prefs.js:86
-#: js/prefs.js:576
-#: js/prefs.js:666
-#: js/prefs.js:867
-#: js/prefs.js:1454
-#: js/prefs.js:1507
-#: js/prefs.js:1566
-#: js/prefs.js:1583
-#: js/prefs.js:1599
-#: js/prefs.js:1615
-#: js/prefs.js:1634
-#: js/prefs.js:1807
-#: js/prefs.js:1823
-#: js/tt-rss.js:506
-#: js/tt-rss.js:523
-#: js/viewfeed.js:820
-#: js/viewfeed.js:1249
-#: plugins/import_export/import_export.js:17
-#: plugins/updater/updater.js:17
+msgstr ""
+"Le test d'échappement SQL a échoué, veuillez vérifier votre configuration de "
+"base de données et de PHP"
+
+#: index.php:128 index.php:145 index.php:265 prefs.php:98
+#: classes/backend.php:5 classes/pref/labels.php:296
+#: classes/pref/filters.php:680 classes/pref/feeds.php:1388
+#: plugins/digest/digest_body.php:61 js/feedlist.js:128 js/feedlist.js:439
+#: js/functions.js:446 js/functions.js:784 js/functions.js:1194
+#: js/functions.js:1330 js/functions.js:1642 js/prefs.js:86 js/prefs.js:576
+#: js/prefs.js:666 js/prefs.js:867 js/prefs.js:1454 js/prefs.js:1507
+#: js/prefs.js:1566 js/prefs.js:1583 js/prefs.js:1599 js/prefs.js:1615
+#: js/prefs.js:1634 js/prefs.js:1807 js/prefs.js:1823 js/tt-rss.js:506
+#: js/tt-rss.js:523 js/viewfeed.js:820 js/viewfeed.js:1249
+#: plugins/import_export/import_export.js:17 plugins/updater/updater.js:17
 msgid "Loading, please wait..."
 msgstr "Chargement en cours, veuillez patienter..."
 
@@ -210,21 +202,15 @@ msgstr "Adaptatif"
 msgid "All Articles"
 msgstr "Tous les articles"
 
-#: index.php:167
-#: include/functions.php:2007
-#: classes/feeds.php:98
+#: index.php:167 include/functions.php:2007 classes/feeds.php:98
 msgid "Starred"
 msgstr "Remarquables"
 
-#: index.php:168
-#: include/functions.php:2008
-#: classes/feeds.php:99
+#: index.php:168 include/functions.php:2008 classes/feeds.php:99
 msgid "Published"
 msgstr "Publiés"
 
-#: index.php:169
-#: classes/feeds.php:85
-#: classes/feeds.php:97
+#: index.php:169 classes/feeds.php:85 classes/feeds.php:97
 msgid "Unread"
 msgstr "Non lus"
 
@@ -260,14 +246,9 @@ msgstr "Les plus anciens en premier"
 msgid "Title"
 msgstr "Titre"
 
-#: index.php:185
-#: index.php:233
-#: include/functions.php:1997
-#: classes/feeds.php:103
-#: classes/feeds.php:441
-#: js/FeedTree.js:128
-#: js/FeedTree.js:156
-#: plugins/digest/digest.js:647
+#: index.php:185 index.php:233 include/functions.php:1997
+#: classes/feeds.php:103 classes/feeds.php:441 js/FeedTree.js:128
+#: js/FeedTree.js:156 plugins/digest/digest.js:647
 msgid "Mark as read"
 msgstr "Marquer comme lu"
 
@@ -307,8 +288,7 @@ msgstr "Rechercher..."
 msgid "Feed actions:"
 msgstr "Actions sur ce flux :"
 
-#: index.php:228
-#: classes/handler/public.php:559
+#: index.php:228 classes/handler/public.php:559
 msgid "Subscribe to feed..."
 msgstr "S'abonner au flux..."
 
@@ -320,9 +300,7 @@ msgstr "Modifier ce flux..."
 msgid "Rescore feed"
 msgstr "Recalculer le score du flux"
 
-#: index.php:231
-#: classes/pref/feeds.php:759
-#: classes/pref/feeds.php:1340
+#: index.php:231 classes/pref/feeds.php:759 classes/pref/feeds.php:1340
 #: js/PrefFeedTree.js:73
 msgid "Unsubscribe"
 msgstr "Se désabonner"
@@ -339,8 +317,7 @@ msgstr "Masquer/afficher les flux lus"
 msgid "Other actions:"
 msgstr "Autres actions :"
 
-#: index.php:236
-#: include/functions.php:1983
+#: index.php:236 include/functions.php:1983
 msgid "Toggle widescreen mode"
 msgstr "Basculer le mode écran large"
 
@@ -360,16 +337,13 @@ msgstr "Créer un filtre..."
 msgid "Keyboard shortcuts help"
 msgstr "Aide sur les raccourcis clavier"
 
-#: index.php:249
-#: plugins/digest/digest_body.php:75
+#: index.php:249 plugins/digest/digest_body.php:75
 #: plugins/mobile/mobile-functions.php:65
 #: plugins/mobile/mobile-functions.php:240
 msgid "Logout"
 msgstr "Déconnexion"
 
-#: prefs.php:33
-#: prefs.php:116
-#: include/functions.php:2010
+#: prefs.php:33 prefs.php:116 include/functions.php:2010
 #: classes/pref/prefs.php:440
 msgid "Preferences"
 msgstr "Configuration"
@@ -382,23 +356,17 @@ msgstr "Raccourcis clavier"
 msgid "Exit preferences"
 msgstr "Quitter la configuration"
 
-#: prefs.php:119
-#: classes/pref/feeds.php:107
-#: classes/pref/feeds.php:1266
+#: prefs.php:119 classes/pref/feeds.php:107 classes/pref/feeds.php:1266
 #: classes/pref/feeds.php:1329
 msgid "Feeds"
 msgstr "Flux"
 
-#: prefs.php:122
-#: classes/pref/filters.php:156
+#: prefs.php:122 classes/pref/filters.php:156
 msgid "Filters"
 msgstr "Filtres"
 
-#: prefs.php:125
-#: include/functions.php:1176
-#: include/functions.php:1831
-#: classes/pref/labels.php:90
-#: plugins/mobile/mobile-functions.php:201
+#: prefs.php:125 include/functions.php:1176 include/functions.php:1831
+#: classes/pref/labels.php:90 plugins/mobile/mobile-functions.php:201
 msgid "Labels"
 msgstr "Etiquettes"
 
@@ -407,40 +375,36 @@ msgid "Users"
 msgstr "Utilisateurs"
 
 #: prefs.php:132
-#, fuzzy
 msgid "System"
-msgstr "Plugins systèmes"
+msgstr "Système"
 
-#: register.php:184
-#: include/login_form.php:238
+#: register.php:184 include/login_form.php:238
 msgid "Create new account"
 msgstr "Créer un nouveau compte"
 
 #: register.php:190
 msgid "New user registrations are administratively disabled."
-msgstr "L'inscription de nouveaux utilisateurs est désactivée par l'administrateur."
-
-#: register.php:194
-#: register.php:239
-#: register.php:252
-#: register.php:267
-#: register.php:286
-#: register.php:334
-#: register.php:344
-#: register.php:356
-#: classes/handler/public.php:629
-#: classes/handler/public.php:717
-#: classes/handler/public.php:799
-#: classes/handler/public.php:874
-#: classes/handler/public.php:888
-#: classes/handler/public.php:895
+msgstr ""
+"L'inscription de nouveaux utilisateurs est désactivée par l'administrateur."
+
+#: register.php:194 register.php:239 register.php:252 register.php:267
+#: register.php:286 register.php:334 register.php:344 register.php:356
+#: classes/handler/public.php:629 classes/handler/public.php:717
+#: classes/handler/public.php:799 classes/handler/public.php:874
+#: classes/handler/public.php:888 classes/handler/public.php:895
 #: classes/handler/public.php:920
 msgid "Return to Tiny Tiny RSS"
 msgstr "Revenir à Tiny Tiny RSS"
 
 #: register.php:215
-msgid "Your temporary password will be sent to the specified email. Accounts, which were not logged in once, are erased automatically 24 hours after temporary password is sent."
-msgstr "Votre mot de passe temporaire va être envoyé à l'adresse mail indiquée. Les comptes ne s'étant pas connectés au moins une fois dans les 24 heures qui suivent l'envoi du mail seront supprimés."
+msgid ""
+"Your temporary password will be sent to the specified email. Accounts, which "
+"were not logged in once, are erased automatically 24 hours after temporary "
+"password is sent."
+msgstr ""
+"Votre mot de passe temporaire va être envoyé à l'adresse mail indiquée. Les "
+"comptes ne s'étant pas connectés au moins une fois dans les 24 heures qui "
+"suivent l'envoi du mail seront supprimés."
 
 #: register.php:221
 msgid "Desired login:"
@@ -450,13 +414,11 @@ msgstr "Identifiant souhaité :"
 msgid "Check availability"
 msgstr "Vérifier la disponibilité"
 
-#: register.php:226
-#: classes/handler/public.php:757
+#: register.php:226 classes/handler/public.php:757
 msgid "Email:"
 msgstr "Adresse mail :"
 
-#: register.php:229
-#: classes/handler/public.php:762
+#: register.php:229 classes/handler/public.php:762
 msgid "How much is two plus two:"
 msgstr "Combien font 2 plus 2 :"
 
@@ -488,13 +450,9 @@ msgstr "L'inscription de nouveaux utilisateurs est actuellement fermée."
 msgid "Tiny Tiny RSS data update script."
 msgstr "Script de mise à jour des données de Tiny Tiny RSS."
 
-#: include/digest.php:109
-#: include/functions.php:1185
-#: include/functions.php:1732
-#: include/functions.php:1817
-#: include/functions.php:1839
-#: classes/opml.php:416
-#: classes/pref/feeds.php:220
+#: include/digest.php:109 include/functions.php:1185
+#: include/functions.php:1732 include/functions.php:1817
+#: include/functions.php:1839 classes/opml.php:416 classes/pref/feeds.php:220
 msgid "Uncategorized"
 msgstr "Sans catégorie"
 
@@ -509,14 +467,12 @@ msgstr[1] "%d articles archivés"
 msgid "No feeds found."
 msgstr "Aucun flux trouvé."
 
-#: include/functions.php:1174
-#: include/functions.php:1829
+#: include/functions.php:1174 include/functions.php:1829
 #: plugins/mobile/mobile-functions.php:174
 msgid "Special"
 msgstr "Spécial"
 
-#: include/functions.php:1681
-#: classes/feeds.php:1110
+#: include/functions.php:1681 classes/feeds.php:1110
 #: classes/pref/filters.php:427
 msgid "All feeds"
 msgstr "Tous les flux"
@@ -533,8 +489,7 @@ msgstr "Articles publiés"
 msgid "Fresh articles"
 msgstr "Nouveaux articles"
 
-#: include/functions.php:1890
-#: include/functions.php:2005
+#: include/functions.php:1890 include/functions.php:2005
 msgid "All articles"
 msgstr "Tous les articles"
 
@@ -575,14 +530,12 @@ msgid "Open previous article (don't scroll long articles)"
 msgstr "Ouvrir l'article précédent (ne pas faire défiler les articles longs)"
 
 #: include/functions.php:1964
-#, fuzzy
 msgid "Move to next article (don't expand or mark read)"
-msgstr "Ouvrir l'article suivant (ne pas faire défiler les articles longs)"
+msgstr "Aller à l'article suivant (ne pas développer ou marqué lu)"
 
 #: include/functions.php:1965
-#, fuzzy
 msgid "Move to previous article (don't expand or mark read)"
-msgstr "Ouvrir l'article précédent (ne pas faire défiler les articles longs)"
+msgstr "Aller à l'article précédent (ne pas développer ou marqué lu)"
 
 #: include/functions.php:1966
 msgid "Show search dialog"
@@ -596,13 +549,11 @@ msgstr "Article"
 msgid "Toggle starred"
 msgstr "Marquer comme (non) remarquable"
 
-#: include/functions.php:1969
-#: js/viewfeed.js:1931
+#: include/functions.php:1969 js/viewfeed.js:1931
 msgid "Toggle published"
 msgstr "Marquer comme (non) publié"
 
-#: include/functions.php:1970
-#: js/viewfeed.js:1909
+#: include/functions.php:1970 js/viewfeed.js:1909
 msgid "Toggle unread"
 msgstr "Marquer comme (non) lu"
 
@@ -622,13 +573,11 @@ msgstr "Ecarter les articles lus"
 msgid "Open in new window"
 msgstr "Ouvrir dans une nouvelle fenêtre"
 
-#: include/functions.php:1975
-#: js/viewfeed.js:1950
+#: include/functions.php:1975 js/viewfeed.js:1950
 msgid "Mark below as read"
 msgstr "Marquer les articles en-dessous comme lus"
 
-#: include/functions.php:1976
-#: js/viewfeed.js:1944
+#: include/functions.php:1976 js/viewfeed.js:1944
 msgid "Mark above as read"
 msgstr "Marquer les articles au-dessus comme lus"
 
@@ -653,12 +602,10 @@ msgid "Close/collapse article"
 msgstr "Contracter l'article"
 
 #: include/functions.php:1982
-#, fuzzy
 msgid "Toggle article expansion (combined mode)"
-msgstr "Basculer le développement automatique en mode combiné"
+msgstr "Basculer le développement (mode combiné)"
 
-#: include/functions.php:1984
-#: plugins/embed_original/init.php:31
+#: include/functions.php:1984 plugins/embed_original/init.php:31
 msgid "Toggle embed original"
 msgstr "Basculer l'intégration de l'article original"
 
@@ -690,8 +637,7 @@ msgstr "Inverser la sélection"
 msgid "Deselect everything"
 msgstr "Tout désélectionner"
 
-#: include/functions.php:1992
-#: classes/pref/feeds.php:553
+#: include/functions.php:1992 classes/pref/feeds.php:553
 #: classes/pref/feeds.php:796
 msgid "Feed"
 msgstr "Flux"
@@ -704,14 +650,11 @@ msgstr "Actualiser le flux actif"
 msgid "Un/hide read feeds"
 msgstr "Masquer/afficher les flux lus"
 
-#: include/functions.php:1995
-#: classes/pref/feeds.php:1332
+#: include/functions.php:1995 classes/pref/feeds.php:1332
 msgid "Subscribe to feed"
 msgstr "S'abonner au flux"
 
-#: include/functions.php:1996
-#: js/FeedTree.js:135
-#: js/PrefFeedTree.js:67
+#: include/functions.php:1996 js/FeedTree.js:135 js/PrefFeedTree.js:67
 msgid "Edit feed"
 msgstr "Modifier le flux"
 
@@ -723,8 +666,7 @@ msgstr "Inverser l'ordre des en-têtes"
 msgid "Debug feed update"
 msgstr "Déboguer les mises à jour"
 
-#: include/functions.php:2000
-#: js/FeedTree.js:178
+#: include/functions.php:2000 js/FeedTree.js:178
 msgid "Mark all feeds as read"
 msgstr "Marquer tous les flux comme lus"
 
@@ -748,9 +690,7 @@ msgstr "Aller à"
 msgid "Fresh"
 msgstr "Nouveaux"
 
-#: include/functions.php:2009
-#: js/tt-rss.js:456
-#: js/tt-rss.js:615
+#: include/functions.php:2009 js/tt-rss.js:456 js/tt-rss.js:615
 msgid "Tag cloud"
 msgstr "Nuage de tags"
 
@@ -758,13 +698,11 @@ msgstr "Nuage de tags"
 msgid "Other"
 msgstr "Autre"
 
-#: include/functions.php:2012
-#: classes/pref/labels.php:281
+#: include/functions.php:2012 classes/pref/labels.php:281
 msgid "Create label"
 msgstr "Créer une étiquette"
 
-#: include/functions.php:2013
-#: classes/pref/filters.php:654
+#: include/functions.php:2013 classes/pref/filters.php:654
 msgid "Create filter"
 msgstr "Créer un filtre"
 
@@ -785,47 +723,31 @@ msgstr "Résultats de recherche: %s"
 msgid " - "
 msgstr " - "
 
-#: include/functions.php:3155
-#: include/functions.php:3431
+#: include/functions.php:3155 include/functions.php:3431
 #: classes/article.php:281
 msgid "no tags"
 msgstr "aucun tag"
 
-#: include/functions.php:3165
-#: classes/feeds.php:689
+#: include/functions.php:3165 classes/feeds.php:689
 msgid "Edit tags for this article"
 msgstr "Modifier les tags pour cet article"
 
-#: include/functions.php:3197
-#: classes/feeds.php:641
+#: include/functions.php:3197 classes/feeds.php:641
 msgid "Originally from:"
 msgstr "Origine :"
 
-#: include/functions.php:3210
-#: classes/feeds.php:654
-#: classes/pref/feeds.php:572
+#: include/functions.php:3210 classes/feeds.php:654 classes/pref/feeds.php:572
 msgid "Feed URL"
 msgstr "URL du flux"
 
-#: include/functions.php:3242
-#: classes/dlg.php:37
-#: classes/dlg.php:60
-#: classes/dlg.php:93
-#: classes/dlg.php:159
-#: classes/dlg.php:190
-#: classes/dlg.php:217
-#: classes/dlg.php:250
-#: classes/dlg.php:262
-#: classes/backend.php:105
-#: classes/pref/users.php:99
-#: classes/pref/filters.php:147
-#: classes/pref/prefs.php:1100
-#: classes/pref/feeds.php:1641
-#: classes/pref/feeds.php:1713
-#: plugins/import_export/init.php:405
-#: plugins/import_export/init.php:450
-#: plugins/googlereaderimport/init.php:193
-#: plugins/share/init.php:65
+#: include/functions.php:3242 classes/dlg.php:37 classes/dlg.php:60
+#: classes/dlg.php:93 classes/dlg.php:159 classes/dlg.php:190
+#: classes/dlg.php:217 classes/dlg.php:250 classes/dlg.php:262
+#: classes/backend.php:105 classes/pref/users.php:99
+#: classes/pref/filters.php:147 classes/pref/prefs.php:1100
+#: classes/pref/feeds.php:1641 classes/pref/feeds.php:1713
+#: plugins/import_export/init.php:405 plugins/import_export/init.php:450
+#: plugins/googlereaderimport/init.php:193 plugins/share/init.php:65
 #: plugins/updater/init.php:368
 msgid "Close this window"
 msgstr "Fermer cette fenêtre"
@@ -845,17 +767,14 @@ msgstr "Fichier attaché"
 #: include/functions.php:4248
 #, php-format
 msgid "LibXML error %s at line %d (column %d): %s"
-msgstr ""
+msgstr "Erreur LibXML %s ligne %d (colonne %d): %s"
 
-#: include/login_form.php:183
-#: classes/handler/public.php:475
-#: classes/handler/public.php:752
-#: plugins/mobile/login_form.php:40
+#: include/login_form.php:183 classes/handler/public.php:475
+#: classes/handler/public.php:752 plugins/mobile/login_form.php:40
 msgid "Login:"
 msgstr "Identifiant :"
 
-#: include/login_form.php:194
-#: classes/handler/public.php:478
+#: include/login_form.php:194 classes/handler/public.php:478
 #: plugins/mobile/login_form.php:45
 msgid "Password:"
 msgstr "Mot de passe :"
@@ -868,10 +787,8 @@ msgstr "J'ai oublié mon mot de passe"
 msgid "Profile:"
 msgstr "Profil :"
 
-#: include/login_form.php:209
-#: classes/handler/public.php:233
-#: classes/rpc.php:63
-#: classes/pref/prefs.php:1036
+#: include/login_form.php:209 classes/handler/public.php:233
+#: classes/rpc.php:63 classes/pref/prefs.php:1036
 msgid "Default profile"
 msgstr "Profil par défaut"
 
@@ -882,13 +799,14 @@ msgstr "Minimiser l'usage du trafic"
 #: include/login_form.php:221
 msgid "Does not display images in articles, reduces automatic refreshes."
 msgstr ""
+"N'affiche pas les images dans les articles, allège les actualisation "
+"automatiques."
 
 #: include/login_form.php:229
 msgid "Remember me"
 msgstr "Se souvenir de moi"
 
-#: include/login_form.php:235
-#: classes/handler/public.php:483
+#: include/login_form.php:235 classes/handler/public.php:483
 #: plugins/mobile/login_form.php:28
 msgid "Log in"
 msgstr "Se connecter"
@@ -905,44 +823,28 @@ msgstr "Article non trouvé."
 msgid "Tags for this article (separated by commas):"
 msgstr "Tags pour cet article (séparés par des virgules) :"
 
-#: classes/article.php:204
-#: classes/pref/users.php:176
-#: classes/pref/labels.php:79
-#: classes/pref/filters.php:405
-#: classes/pref/prefs.php:982
-#: classes/pref/feeds.php:775
-#: classes/pref/feeds.php:923
-#: plugins/nsfw/init.php:83
-#: plugins/note/init.php:51
-#: plugins/instances/init.php:245
+#: classes/article.php:204 classes/pref/users.php:176
+#: classes/pref/labels.php:79 classes/pref/filters.php:405
+#: classes/pref/prefs.php:982 classes/pref/feeds.php:775
+#: classes/pref/feeds.php:923 plugins/nsfw/init.php:83
+#: plugins/note/init.php:51 plugins/instances/init.php:245
 msgid "Save"
 msgstr "Enregistrer"
 
-#: classes/article.php:206
-#: classes/handler/public.php:452
-#: classes/handler/public.php:486
-#: classes/feeds.php:1037
-#: classes/feeds.php:1089
-#: classes/feeds.php:1149
-#: classes/pref/users.php:178
-#: classes/pref/labels.php:81
-#: classes/pref/filters.php:408
-#: classes/pref/filters.php:803
-#: classes/pref/filters.php:879
-#: classes/pref/filters.php:946
-#: classes/pref/prefs.php:984
-#: classes/pref/feeds.php:776
-#: classes/pref/feeds.php:926
-#: classes/pref/feeds.php:1853
-#: plugins/mail/init.php:124
-#: plugins/note/init.php:53
-#: plugins/instances/init.php:248
+#: classes/article.php:206 classes/handler/public.php:452
+#: classes/handler/public.php:486 classes/feeds.php:1037
+#: classes/feeds.php:1089 classes/feeds.php:1149 classes/pref/users.php:178
+#: classes/pref/labels.php:81 classes/pref/filters.php:408
+#: classes/pref/filters.php:803 classes/pref/filters.php:879
+#: classes/pref/filters.php:946 classes/pref/prefs.php:984
+#: classes/pref/feeds.php:776 classes/pref/feeds.php:926
+#: classes/pref/feeds.php:1853 plugins/mail/init.php:124
+#: plugins/note/init.php:53 plugins/instances/init.php:248
 #: plugins/instances/init.php:436
 msgid "Cancel"
 msgstr "Annuler"
 
-#: classes/handler/public.php:416
-#: plugins/bookmarklets/init.php:36
+#: classes/handler/public.php:416 plugins/bookmarklets/init.php:36
 msgid "Share with Tiny Tiny RSS"
 msgstr "Partager avec Tiny Tiny RSS"
 
@@ -950,10 +852,8 @@ msgstr "Partager avec Tiny Tiny RSS"
 msgid "Title:"
 msgstr "Titre :"
 
-#: classes/handler/public.php:426
-#: classes/pref/feeds.php:570
-#: classes/pref/feeds.php:811
-#: plugins/instances/init.php:212
+#: classes/handler/public.php:426 classes/pref/feeds.php:570
+#: classes/pref/feeds.php:811 plugins/instances/init.php:212
 #: plugins/instances/init.php:401
 msgid "URL:"
 msgstr "URL :"
@@ -982,48 +882,42 @@ msgstr "Non connecté"
 msgid "Incorrect username or password"
 msgstr "Identifiant ou mot de passe incorrect"
 
-#: classes/handler/public.php:565
-#: classes/handler/public.php:662
+#: classes/handler/public.php:565 classes/handler/public.php:662
 #, php-format
 msgid "Already subscribed to <b>%s</b>."
 msgstr "Déjà abonné à <b>%s</b>."
 
-#: classes/handler/public.php:568
-#: classes/handler/public.php:653
+#: classes/handler/public.php:568 classes/handler/public.php:653
 #, php-format
 msgid "Subscribed to <b>%s</b>."
 msgstr "Abonné à <b>%s</b>."
 
-#: classes/handler/public.php:571
-#: classes/handler/public.php:656
+#: classes/handler/public.php:571 classes/handler/public.php:656
 #, php-format
 msgid "Could not subscribe to <b>%s</b>."
 msgstr "Impossible de s'abonner à <b>%s</b>."
 
-#: classes/handler/public.php:574
-#: classes/handler/public.php:659
+#: classes/handler/public.php:574 classes/handler/public.php:659
 #, php-format
 msgid "No feeds found in <b>%s</b>."
 msgstr "Aucun flux trouvé dans <b>%s</b>."
 
-#: classes/handler/public.php:577
-#: classes/handler/public.php:665
+#: classes/handler/public.php:577 classes/handler/public.php:665
 msgid "Multiple feed URLs found."
 msgstr "Plusieurs flux trouvé."
 
-#: classes/handler/public.php:581
-#: classes/handler/public.php:670
+#: classes/handler/public.php:581 classes/handler/public.php:670
 #, php-format
 msgid "Could not subscribe to <b>%s</b>.<br>Can't download the Feed URL."
-msgstr "Impossible de s'abonner à <b>%s</b>.<br>Impossible de télécharger l'URL du flux."
+msgstr ""
+"Impossible de s'abonner à <b>%s</b>.<br>Impossible de télécharger l'URL du "
+"flux."
 
-#: classes/handler/public.php:599
-#: classes/handler/public.php:688
+#: classes/handler/public.php:599 classes/handler/public.php:688
 msgid "Subscribe to selected feed"
 msgstr "S'abonner au flux sélectionné"
 
-#: classes/handler/public.php:624
-#: classes/handler/public.php:712
+#: classes/handler/public.php:624 classes/handler/public.php:712
 msgid "Edit subscription options"
 msgstr "Modifier les options d'abonnement"
 
@@ -1032,11 +926,14 @@ msgid "Password recovery"
 msgstr "Récupération de mot de passe"
 
 #: classes/handler/public.php:745
-msgid "You will need to provide valid account name and email. New password will be sent on your email address."
-msgstr "Vous devrez fournir un nom et une adresse email valides. Le nouveau mot de passe sera envoyé à votre adresse email."
+msgid ""
+"You will need to provide valid account name and email. New password will be "
+"sent on your email address."
+msgstr ""
+"Vous devrez fournir un nom et une adresse email valides. Le nouveau mot de "
+"passe sera envoyé à votre adresse email."
 
-#: classes/handler/public.php:767
-#: classes/pref/users.php:360
+#: classes/handler/public.php:767 classes/pref/users.php:360
 msgid "Reset password"
 msgstr "Réinitialiser le mot de passe"
 
@@ -1044,8 +941,7 @@ msgstr "Réinitialiser le mot de passe"
 msgid "Some of the required form parameters are missing or incorrect."
 msgstr "Des paramètres du formulaire manquent ou sont invalides."
 
-#: classes/handler/public.php:781
-#: classes/handler/public.php:807
+#: classes/handler/public.php:781 classes/handler/public.php:807
 #: plugins/digest/digest_body.php:67
 msgid "Go back"
 msgstr "Revenir"
@@ -1067,30 +963,44 @@ msgid "Perform updates"
 msgstr "Exécuter les mises à jour"
 
 #: classes/dlg.php:16
-msgid "If you have imported labels and/or filters, you might need to reload preferences to see your new data."
-msgstr "Si vous avez importé des étiquettes et/ou des filtres, vous devrez peut-être recharger les préférences pour voir les nouvelles données."
+msgid ""
+"If you have imported labels and/or filters, you might need to reload "
+"preferences to see your new data."
+msgstr ""
+"Si vous avez importé des étiquettes et/ou des filtres, vous devrez peut-être "
+"recharger les préférences pour voir les nouvelles données."
 
 #: classes/dlg.php:48
 msgid "Your Public OPML URL is:"
 msgstr "Votre URL OPML publique est :"
 
-#: classes/dlg.php:57
-#: classes/dlg.php:214
+#: classes/dlg.php:57 classes/dlg.php:214
 msgid "Generate new URL"
 msgstr "Générer une nouvelle URL"
 
 #: classes/dlg.php:71
-msgid "Update daemon is enabled in configuration, but daemon process is not running, which prevents all feeds from updating. Please start the daemon process or contact instance owner."
-msgstr "Le démon de mise à jour est activé dans la configuration mais le processus n'est pas lancé et les flux ne sont donc pas mis à jour. Veuillez le démarrer ou contacter l'administrateur."
+msgid ""
+"Update daemon is enabled in configuration, but daemon process is not "
+"running, which prevents all feeds from updating. Please start the daemon "
+"process or contact instance owner."
+msgstr ""
+"Le démon de mise à jour est activé dans la configuration mais le processus "
+"n'est pas lancé et les flux ne sont donc pas mis à jour. Veuillez le "
+"démarrer ou contacter l'administrateur."
 
-#: classes/dlg.php:75
-#: classes/dlg.php:84
+#: classes/dlg.php:75 classes/dlg.php:84
 msgid "Last update:"
 msgstr "Dernière mise à jour :"
 
 #: classes/dlg.php:80
-msgid "Update daemon is taking too long to perform a feed update. This could indicate a problem like crash or a hang. Please check the daemon process or contact instance owner."
-msgstr "Le démon de mise à jour prend trop de temps pour effectuer une mise à jour de flux. Cela peut indiquer un problème comme un crash ou un suspension du processus. Veuillez vérifier son état ou bien contacter l'administrateur."
+msgid ""
+"Update daemon is taking too long to perform a feed update. This could "
+"indicate a problem like crash or a hang. Please check the daemon process or "
+"contact instance owner."
+msgstr ""
+"Le démon de mise à jour prend trop de temps pour effectuer une mise à jour "
+"de flux. Cela peut indiquer un problème comme un crash ou un suspension du "
+"processus. Veuillez vérifier son état ou bien contacter l'administrateur."
 
 #: classes/dlg.php:166
 msgid "Match:"
@@ -1116,18 +1026,19 @@ msgstr "Afficher les entrées"
 msgid "You can view this feed as RSS using the following URL:"
 msgstr "Vous pouvez consulter ce flux comme RSS en utilisant l'URL suivante :"
 
-#: classes/dlg.php:233
-#: plugins/updater/init.php:331
+#: classes/dlg.php:233 plugins/updater/init.php:331
 #, php-format
 msgid "New version of Tiny Tiny RSS is available (%s)."
 msgstr "Une nouvelle version de Tiny Tiny RSS est disponible (%s)."
 
 #: classes/dlg.php:241
-msgid "You can update using built-in updater in the Preferences or by using update.php"
-msgstr "Vous pouvez mettre à jour depuis la Configuration ou en utilisant update.php"
+msgid ""
+"You can update using built-in updater in the Preferences or by using update."
+"php"
+msgstr ""
+"Vous pouvez mettre à jour depuis la Configuration ou en utilisant update.php"
 
-#: classes/dlg.php:245
-#: plugins/updater/init.php:335
+#: classes/dlg.php:245 plugins/updater/init.php:335
 msgid "See the release notes"
 msgstr "Voir les notes de publication"
 
@@ -1137,20 +1048,20 @@ msgstr "Télécharger"
 
 #: classes/dlg.php:255
 msgid "Error receiving version information or no new version available."
-msgstr "Erreur de lecture de l'information de version ou aucune nouvelle version disponible."
+msgstr ""
+"Erreur de lecture de l'information de version ou aucune nouvelle version "
+"disponible."
 
 #: classes/feeds.php:56
-#, fuzzy, php-format
+#, php-format
 msgid "Last updated: %s"
-msgstr "Dernière mise à jour :"
+msgstr "Dernière mise à jour : %s"
 
 #: classes/feeds.php:75
 msgid "View as RSS feed"
 msgstr "Voir comme flux RSS"
 
-#: classes/feeds.php:76
-#: classes/feeds.php:128
-#: classes/pref/feeds.php:1496
+#: classes/feeds.php:76 classes/feeds.php:128 classes/pref/feeds.php:1496
 msgid "View as RSS"
 msgstr "Voir comme RSS"
 
@@ -1158,19 +1069,12 @@ msgstr "Voir comme RSS"
 msgid "Select:"
 msgstr "Sélectionner :"
 
-#: classes/feeds.php:84
-#: classes/pref/users.php:345
-#: classes/pref/labels.php:275
-#: classes/pref/filters.php:282
-#: classes/pref/filters.php:330
-#: classes/pref/filters.php:648
-#: classes/pref/filters.php:736
-#: classes/pref/filters.php:763
-#: classes/pref/prefs.php:996
-#: classes/pref/feeds.php:1323
-#: classes/pref/feeds.php:1589
-#: classes/pref/feeds.php:1659
-#: plugins/instances/init.php:287
+#: classes/feeds.php:84 classes/pref/users.php:345 classes/pref/labels.php:275
+#: classes/pref/filters.php:282 classes/pref/filters.php:330
+#: classes/pref/filters.php:648 classes/pref/filters.php:736
+#: classes/pref/filters.php:763 classes/pref/prefs.php:996
+#: classes/pref/feeds.php:1323 classes/pref/feeds.php:1589
+#: classes/pref/feeds.php:1659 plugins/instances/init.php:287
 msgid "All"
 msgstr "Tout"
 
@@ -1178,19 +1082,12 @@ msgstr "Tout"
 msgid "Invert"
 msgstr "Inverse"
 
-#: classes/feeds.php:87
-#: classes/pref/users.php:347
-#: classes/pref/labels.php:277
-#: classes/pref/filters.php:284
-#: classes/pref/filters.php:332
-#: classes/pref/filters.php:650
-#: classes/pref/filters.php:738
-#: classes/pref/filters.php:765
-#: classes/pref/prefs.php:998
-#: classes/pref/feeds.php:1325
-#: classes/pref/feeds.php:1591
-#: classes/pref/feeds.php:1661
-#: plugins/instances/init.php:289
+#: classes/feeds.php:87 classes/pref/users.php:347 classes/pref/labels.php:277
+#: classes/pref/filters.php:284 classes/pref/filters.php:332
+#: classes/pref/filters.php:650 classes/pref/filters.php:738
+#: classes/pref/filters.php:765 classes/pref/prefs.php:998
+#: classes/pref/feeds.php:1325 classes/pref/feeds.php:1591
+#: classes/pref/feeds.php:1661 plugins/instances/init.php:289
 msgid "None"
 msgstr "Aucun"
 
@@ -1218,17 +1115,13 @@ msgstr "Archive"
 msgid "Move back"
 msgstr "Revenir"
 
-#: classes/feeds.php:110
-#: classes/pref/filters.php:291
-#: classes/pref/filters.php:339
-#: classes/pref/filters.php:745
+#: classes/feeds.php:110 classes/pref/filters.php:291
+#: classes/pref/filters.php:339 classes/pref/filters.php:745
 #: classes/pref/filters.php:772
 msgid "Delete"
 msgstr "Supprimer"
 
-#: classes/feeds.php:115
-#: classes/feeds.php:120
-#: plugins/mailto/init.php:25
+#: classes/feeds.php:115 classes/feeds.php:120 plugins/mailto/init.php:25
 #: plugins/mail/init.php:26
 msgid "Forward by email"
 msgstr "Transférer par email"
@@ -1237,15 +1130,13 @@ msgstr "Transférer par email"
 msgid "Feed:"
 msgstr "Flux :"
 
-#: classes/feeds.php:197
-#: classes/feeds.php:837
+#: classes/feeds.php:197 classes/feeds.php:837
 msgid "Feed not found."
 msgstr "Flux non trouvé."
 
 #: classes/feeds.php:254
-#, fuzzy
 msgid "Never"
-msgstr "Ne jamais purger"
+msgstr "Jamais"
 
 #: classes/feeds.php:360
 #, php-format
@@ -1273,36 +1164,38 @@ msgid "No starred articles found to display."
 msgstr "Aucun article remarquable à afficher."
 
 #: classes/feeds.php:748
-msgid "No articles found to display. You can assign articles to labels manually from article header context menu (applies to all selected articles) or use a filter."
-msgstr "Aucun article à afficher. Vous pouvez assigner des étiquettes aux articles manuellement (voir les actions du menu ci-dessus) ou utiliser un filtre."
+msgid ""
+"No articles found to display. You can assign articles to labels manually "
+"from article header context menu (applies to all selected articles) or use a "
+"filter."
+msgstr ""
+"Aucun article à afficher. Vous pouvez assigner des étiquettes aux articles "
+"manuellement (voir les actions du menu ci-dessus) ou utiliser un filtre."
 
 #: classes/feeds.php:750
 msgid "No articles found to display."
 msgstr "Aucun article à afficher."
 
-#: classes/feeds.php:765
-#: classes/feeds.php:932
+#: classes/feeds.php:765 classes/feeds.php:932
 #, php-format
 msgid "Feeds last updated at %s"
 msgstr "Flux mis à jour à %s"
 
-#: classes/feeds.php:775
-#: classes/feeds.php:942
+#: classes/feeds.php:775 classes/feeds.php:942
 msgid "Some feeds have update errors (click for details)"
-msgstr "Des erreurs sont survenues pendant la mise à jour de certains flux (cliquer ici pour les détails)"
+msgstr ""
+"Des erreurs sont survenues pendant la mise à jour de certains flux (cliquer "
+"ici pour les détails)"
 
 #: classes/feeds.php:922
 msgid "No feed selected."
 msgstr "Aucun flux sélectionné."
 
-#: classes/feeds.php:975
-#: classes/feeds.php:983
+#: classes/feeds.php:975 classes/feeds.php:983
 msgid "Feed or site URL"
 msgstr "URL du flux"
 
-#: classes/feeds.php:989
-#: classes/pref/feeds.php:592
-#: classes/pref/feeds.php:824
+#: classes/feeds.php:989 classes/pref/feeds.php:592 classes/pref/feeds.php:824
 #: classes/pref/feeds.php:1817
 msgid "Place in category:"
 msgstr "Placer dans la catégorie :"
@@ -1311,25 +1204,19 @@ msgstr "Placer dans la catégorie :"
 msgid "Available feeds"
 msgstr "Flux disponibles"
 
-#: classes/feeds.php:1009
-#: classes/pref/users.php:139
-#: classes/pref/feeds.php:622
-#: classes/pref/feeds.php:860
+#: classes/feeds.php:1009 classes/pref/users.php:139
+#: classes/pref/feeds.php:622 classes/pref/feeds.php:860
 msgid "Authentication"
 msgstr "Identification"
 
-#: classes/feeds.php:1013
-#: classes/pref/users.php:402
-#: classes/pref/feeds.php:628
-#: classes/pref/feeds.php:864
+#: classes/feeds.php:1013 classes/pref/users.php:402
+#: classes/pref/feeds.php:628 classes/pref/feeds.php:864
 #: classes/pref/feeds.php:1831
 msgid "Login"
 msgstr "Se connecter"
 
-#: classes/feeds.php:1016
-#: classes/pref/prefs.php:260
-#: classes/pref/feeds.php:641
-#: classes/pref/feeds.php:870
+#: classes/feeds.php:1016 classes/pref/prefs.php:260
+#: classes/pref/feeds.php:641 classes/pref/feeds.php:870
 #: classes/pref/feeds.php:1834
 msgid "Password"
 msgstr "Mot de passe"
@@ -1338,9 +1225,7 @@ msgstr "Mot de passe"
 msgid "This feed requires authentication."
 msgstr "Ce flux nécessite une identification."
 
-#: classes/feeds.php:1031
-#: classes/feeds.php:1087
-#: classes/pref/feeds.php:1852
+#: classes/feeds.php:1031 classes/feeds.php:1087 classes/pref/feeds.php:1852
 msgid "Subscribe"
 msgstr "S'abonner"
 
@@ -1348,12 +1233,8 @@ msgstr "S'abonner"
 msgid "More feeds"
 msgstr "D'autres flux"
 
-#: classes/feeds.php:1057
-#: classes/feeds.php:1148
-#: classes/pref/users.php:332
-#: classes/pref/filters.php:641
-#: classes/pref/feeds.php:1316
-#: js/tt-rss.js:173
+#: classes/feeds.php:1057 classes/feeds.php:1148 classes/pref/users.php:332
+#: classes/pref/filters.php:641 classes/pref/feeds.php:1316 js/tt-rss.js:173
 msgid "Search"
 msgstr "Rechercher"
 
@@ -1369,12 +1250,9 @@ msgstr "Archive du flux"
 msgid "limit:"
 msgstr "limite :"
 
-#: classes/feeds.php:1088
-#: classes/pref/users.php:358
-#: classes/pref/labels.php:284
-#: classes/pref/filters.php:398
-#: classes/pref/filters.php:667
-#: classes/pref/feeds.php:746
+#: classes/feeds.php:1088 classes/pref/users.php:358
+#: classes/pref/labels.php:284 classes/pref/filters.php:398
+#: classes/pref/filters.php:667 classes/pref/feeds.php:746
 #: plugins/instances/init.php:294
 msgid "Remove"
 msgstr "Supprimer"
@@ -1393,7 +1271,9 @@ msgstr "Ce flux"
 
 #: classes/backend.php:33
 msgid "Other interface tips are available in the Tiny Tiny RSS wiki."
-msgstr "D'autres astuces sur l'interface sont disponibles sur le wiki de Tiny Tiny RSS."
+msgstr ""
+"D'autres astuces sur l'interface sont disponibles sur le wiki de Tiny Tiny "
+"RSS."
 
 #: classes/backend.php:38
 msgid "Keyboard Shortcuts"
@@ -1411,8 +1291,7 @@ msgstr "Ctrl"
 msgid "Help topic not found."
 msgstr "Sujet non trouvé dans l'aide."
 
-#: classes/opml.php:28
-#: classes/opml.php:33
+#: classes/opml.php:28 classes/opml.php:33
 msgid "OPML Utility"
 msgstr "Outil OPML"
 
@@ -1458,38 +1337,31 @@ msgstr "Créer un filtre..."
 msgid "Processing category: %s"
 msgstr "Placer dans la catégorie : %s"
 
-#: classes/opml.php:465
-#: plugins/import_export/init.php:418
+#: classes/opml.php:465 plugins/import_export/init.php:418
 #: plugins/googlereaderimport/init.php:66
 #, php-format
 msgid "Upload failed with error code %d"
-msgstr ""
+msgstr "Échec de l'envoi, code d'erreur %d"
 
-#: classes/opml.php:479
-#: plugins/import_export/init.php:432
+#: classes/opml.php:479 plugins/import_export/init.php:432
 #: plugins/googlereaderimport/init.php:80
-#, fuzzy
 msgid "Unable to move uploaded file."
-msgstr "Erreur : impossible de charger l'article."
+msgstr "Impossible de déplacer le fichier envoyé."
 
-#: classes/opml.php:483
-#: plugins/import_export/init.php:436
+#: classes/opml.php:483 plugins/import_export/init.php:436
 #: plugins/googlereaderimport/init.php:84
 msgid "Error: please upload OPML file."
 msgstr "Erreur : veuillez envoyer un document OPML."
 
 #: classes/opml.php:492
-#, fuzzy
 msgid "Error: unable to find moved OPML file."
-msgstr "Erreur : impossible de charger l'article."
+msgstr "Erreur : impossible de trouver le fichier OPML déplacé."
 
-#: classes/opml.php:499
-#: plugins/googlereaderimport/init.php:186
+#: classes/opml.php:499 plugins/googlereaderimport/init.php:186
 msgid "Error while parsing document."
 msgstr "Erreur lors de l'analyse du document."
 
-#: classes/pref/users.php:6
-#: classes/pref/system.php:8
+#: classes/pref/users.php:6 classes/pref/system.php:8
 #: plugins/instances/init.php:154
 msgid "Your access level is insufficient to open this tab."
 msgstr "Vous n'avez pas les permissions nécessaires pour ouvrir cet onglet."
@@ -1498,8 +1370,7 @@ msgstr "Vous n'avez pas les permissions nécessaires pour ouvrir cet onglet."
 msgid "User not found"
 msgstr "Utilisateur non trouvé"
 
-#: classes/pref/users.php:53
-#: classes/pref/users.php:404
+#: classes/pref/users.php:53 classes/pref/users.php:404
 msgid "Registered"
 msgstr "Inscrit"
 
@@ -1523,8 +1394,7 @@ msgstr "Permissions : "
 msgid "Change password to"
 msgstr "Nouveau mot de passe"
 
-#: classes/pref/users.php:161
-#: classes/pref/feeds.php:649
+#: classes/pref/users.php:161 classes/pref/feeds.php:649
 #: classes/pref/feeds.php:876
 msgid "Options"
 msgstr "Options"
@@ -1562,18 +1432,12 @@ msgstr "Envoi du mot de passe de <b>%s</b> à <b>%s</b>"
 msgid "[tt-rss] Password change notification"
 msgstr "[tt-rss] Notification de changement de mot passe"
 
-#: classes/pref/users.php:342
-#: classes/pref/labels.php:272
-#: classes/pref/filters.php:279
-#: classes/pref/filters.php:327
-#: classes/pref/filters.php:645
-#: classes/pref/filters.php:733
-#: classes/pref/filters.php:760
-#: classes/pref/prefs.php:993
-#: classes/pref/feeds.php:1320
-#: classes/pref/feeds.php:1586
-#: classes/pref/feeds.php:1656
-#: plugins/instances/init.php:284
+#: classes/pref/users.php:342 classes/pref/labels.php:272
+#: classes/pref/filters.php:279 classes/pref/filters.php:327
+#: classes/pref/filters.php:645 classes/pref/filters.php:733
+#: classes/pref/filters.php:760 classes/pref/prefs.php:993
+#: classes/pref/feeds.php:1320 classes/pref/feeds.php:1586
+#: classes/pref/feeds.php:1656 plugins/instances/init.php:284
 msgid "Select"
 msgstr "Sélectionner"
 
@@ -1585,8 +1449,7 @@ msgstr "Créer l'utilisateur"
 msgid "Details"
 msgstr "Détails"
 
-#: classes/pref/users.php:356
-#: classes/pref/filters.php:660
+#: classes/pref/users.php:356 classes/pref/filters.php:660
 #: plugins/instances/init.php:293
 msgid "Edit"
 msgstr "Modifier"
@@ -1599,8 +1462,7 @@ msgstr "Permissions"
 msgid "Last login"
 msgstr "Dernière connexion"
 
-#: classes/pref/users.php:426
-#: plugins/instances/init.php:334
+#: classes/pref/users.php:426 plugins/instances/init.php:334
 msgid "Click to edit"
 msgstr "Cliquer pour modifier"
 
@@ -1612,8 +1474,7 @@ msgstr "Aucun utilisateur défini."
 msgid "No matching users found."
 msgstr "Aucun utilisateur correspondant trouvé."
 
-#: classes/pref/labels.php:22
-#: classes/pref/filters.php:268
+#: classes/pref/labels.php:22 classes/pref/filters.php:268
 #: classes/pref/filters.php:724
 msgid "Caption"
 msgstr "Légende"
@@ -1648,44 +1509,40 @@ msgid "No recent articles matching this filter have been found."
 msgstr "Aucun article récent correspondant à ce filtre."
 
 #: classes/pref/filters.php:137
-msgid "Complex expressions might not give results while testing due to issues with database server regexp implementation."
-msgstr "Les expressions complexes risquent de ne pas avoir de résulats dans les tests à cause de problèmes avec le serveur."
+msgid ""
+"Complex expressions might not give results while testing due to issues with "
+"database server regexp implementation."
+msgstr ""
+"Les expressions complexes risquent de ne pas avoir de résulats dans les "
+"tests à cause de problèmes avec le serveur."
 
-#: classes/pref/filters.php:274
-#: classes/pref/filters.php:728
+#: classes/pref/filters.php:274 classes/pref/filters.php:728
 #: classes/pref/filters.php:843
 msgid "Match"
 msgstr "Correspondance"
 
-#: classes/pref/filters.php:288
-#: classes/pref/filters.php:336
-#: classes/pref/filters.php:742
-#: classes/pref/filters.php:769
+#: classes/pref/filters.php:288 classes/pref/filters.php:336
+#: classes/pref/filters.php:742 classes/pref/filters.php:769
 msgid "Add"
 msgstr "Ajouter"
 
-#: classes/pref/filters.php:322
-#: classes/pref/filters.php:755
+#: classes/pref/filters.php:322 classes/pref/filters.php:755
 msgid "Apply actions"
 msgstr "Actions éffectuées"
 
-#: classes/pref/filters.php:372
-#: classes/pref/filters.php:784
+#: classes/pref/filters.php:372 classes/pref/filters.php:784
 msgid "Enabled"
 msgstr "Activé"
 
-#: classes/pref/filters.php:381
-#: classes/pref/filters.php:787
+#: classes/pref/filters.php:381 classes/pref/filters.php:787
 msgid "Match any rule"
 msgstr "Au moins une correspondance"
 
-#: classes/pref/filters.php:390
-#: classes/pref/filters.php:790
+#: classes/pref/filters.php:390 classes/pref/filters.php:790
 msgid "Inverse matching"
 msgstr "Correspondance inverse"
 
-#: classes/pref/filters.php:402
-#: classes/pref/filters.php:797
+#: classes/pref/filters.php:402 classes/pref/filters.php:797
 msgid "Test"
 msgstr "Test"
 
@@ -1702,14 +1559,12 @@ msgstr "%s sur %s dans %s %s"
 msgid "Combine"
 msgstr "Combiner"
 
-#: classes/pref/filters.php:663
-#: classes/pref/feeds.php:1336
+#: classes/pref/filters.php:663 classes/pref/feeds.php:1336
 #: classes/pref/feeds.php:1350
 msgid "Reset sort order"
 msgstr "Réinitialiser le critère de tri"
 
-#: classes/pref/filters.php:671
-#: classes/pref/feeds.php:1375
+#: classes/pref/filters.php:671 classes/pref/feeds.php:1375
 msgid "Rescore articles"
 msgstr "Recalculer le score des articles"
 
@@ -1725,8 +1580,7 @@ msgstr "Inverser le résultat de l'expression rationnelle"
 msgid "on field"
 msgstr "sur le champ"
 
-#: classes/pref/filters.php:863
-#: js/PrefFilterTree.js:45
+#: classes/pref/filters.php:863 js/PrefFilterTree.js:45
 #: plugins/digest/digest.js:242
 msgid "in"
 msgstr "dans"
@@ -1735,8 +1589,7 @@ msgstr "dans"
 msgid "Save rule"
 msgstr "Enregistrer"
 
-#: classes/pref/filters.php:876
-#: js/functions.js:1013
+#: classes/pref/filters.php:876 js/functions.js:1013
 msgid "Add rule"
 msgstr "Ajouter une règle"
 
@@ -1752,8 +1605,7 @@ msgstr "avec les paramètres :"
 msgid "Save action"
 msgstr "Enregistrer"
 
-#: classes/pref/filters.php:943
-#: js/functions.js:1039
+#: classes/pref/filters.php:943 js/functions.js:1039
 msgid "Add action"
 msgstr "Ajouter une action"
 
@@ -1790,16 +1642,24 @@ msgid "Blacklisted tags"
 msgstr "Tags exclus"
 
 #: classes/pref/prefs.php:27
-msgid "When auto-detecting tags in articles these tags will not be applied (comma-separated list)."
-msgstr "Lors de l'auto-détection des tags dans les articles, ces tags ne seront pas utilisés (séparés par des virgules)."
+msgid ""
+"When auto-detecting tags in articles these tags will not be applied (comma-"
+"separated list)."
+msgstr ""
+"Lors de l'auto-détection des tags dans les articles, ces tags ne seront pas "
+"utilisés (séparés par des virgules)."
 
 #: classes/pref/prefs.php:28
 msgid "Automatically mark articles as read"
 msgstr "Automatiquement marquer les articles comme lus"
 
 #: classes/pref/prefs.php:28
-msgid "This option enables marking articles as read automatically while you scroll article list."
-msgstr "Cette option permet de marquer automatiquement les articles comme lus lorsque vous naviguez dans la liste d'articles."
+msgid ""
+"This option enables marking articles as read automatically while you scroll "
+"article list."
+msgstr ""
+"Cette option permet de marquer automatiquement les articles comme lus "
+"lorsque vous naviguez dans la liste d'articles."
 
 #: classes/pref/prefs.php:29
 msgid "Automatically expand articles in combined mode"
@@ -1810,8 +1670,12 @@ msgid "Combined feed display"
 msgstr "Affichage combiné des flux"
 
 #: classes/pref/prefs.php:30
-msgid "Display expanded list of feed articles, instead of separate displays for headlines and article content"
-msgstr "Affiche les articles sous la forme d'une liste étendue, au lieu de deux listes séparées (une pour les en-têtes et une pour le contenu)"
+msgid ""
+"Display expanded list of feed articles, instead of separate displays for "
+"headlines and article content"
+msgstr ""
+"Affiche les articles sous la forme d'une liste étendue, au lieu de deux "
+"listes séparées (une pour les en-têtes et une pour le contenu)"
 
 #: classes/pref/prefs.php:31
 msgid "Confirm marking feed as read"
@@ -1822,13 +1686,16 @@ msgid "Amount of articles to display at once"
 msgstr "Nombre d'articles à afficher"
 
 #: classes/pref/prefs.php:33
-#, fuzzy
 msgid "Default feed update interval"
 msgstr "Fréquence de mise à jour par défaut"
 
 #: classes/pref/prefs.php:33
-msgid "Shortest interval at which a feed will be checked for updates regardless of update method"
+msgid ""
+"Shortest interval at which a feed will be checked for updates regardless of "
+"update method"
 msgstr ""
+"Intervalle minimum de temps entre deux mises à jour d'un flux, quelle que "
+"soit la méthode de mise à jour"
 
 #: classes/pref/prefs.php:34
 msgid "Mark articles in e-mail digest as read"
@@ -1839,8 +1706,12 @@ msgid "Enable e-mail digest"
 msgstr "Activer la synthèse quotidienne par courrier électronique"
 
 #: classes/pref/prefs.php:35
-msgid "This option enables sending daily digest of new (and unread) headlines on your configured e-mail address"
-msgstr "Cette option active l'envoi d'une synthèse quotidienne (digest) des en-têtes nouveaux et non lus à l'adresse électronique donnée"
+msgid ""
+"This option enables sending daily digest of new (and unread) headlines on "
+"your configured e-mail address"
+msgstr ""
+"Cette option active l'envoi d'une synthèse quotidienne (digest) des en-têtes "
+"nouveaux et non lus à l'adresse électronique donnée"
 
 #: classes/pref/prefs.php:36
 msgid "Try to send digests around specified time"
@@ -1887,19 +1758,21 @@ msgid "On catchup show next feed"
 msgstr "Sauter automatiquement au flux suivant"
 
 #: classes/pref/prefs.php:44
-msgid "Automatically open next feed with unread articles after marking one as read"
+msgid ""
+"Automatically open next feed with unread articles after marking one as read"
 msgstr "Sauter automatiquement au flux suivant après en marquer un comme lu"
 
 #: classes/pref/prefs.php:45
 msgid "Purge articles after this number of days (0 - disables)"
-msgstr "Purger les articles plus vieux que le nombre de jours donné (0 pour ne jamais purger)"
+msgstr ""
+"Purger les articles plus vieux que le nombre de jours donné (0 pour ne "
+"jamais purger)"
 
 #: classes/pref/prefs.php:46
 msgid "Purge unread articles"
 msgstr "Purger les articles non lus"
 
-#: classes/pref/prefs.php:47
-#: plugins/mobile/prefs.php:56
+#: classes/pref/prefs.php:47 plugins/mobile/prefs.php:56
 msgid "Reverse headline order (oldest first)"
 msgstr "Inverser l'order des en-têtes (les plus anciens en premier)"
 
@@ -1917,7 +1790,9 @@ msgstr "Trier les en-têtes par date de flux"
 
 #: classes/pref/prefs.php:50
 msgid "Use feed-specified date to sort headlines instead of local import date."
-msgstr "Utiliser les dates spécifiées dans le flux pour trier les en-têtes au lieu des dates importées localement."
+msgstr ""
+"Utiliser les dates spécifiées dans le flux pour trier les en-têtes au lieu "
+"des dates importées localement."
 
 #: classes/pref/prefs.php:51
 msgid "Login with an SSL certificate"
@@ -1937,10 +1812,11 @@ msgstr "Éliminer les tags non sûrs des articles"
 
 #: classes/pref/prefs.php:53
 msgid "Strip all but most common HTML tags when reading articles."
-msgstr "Élimine toutes les balises HTML sauf les plus courantes lors de la lecture des articles."
+msgstr ""
+"Élimine toutes les balises HTML sauf les plus courantes lors de la lecture "
+"des articles."
 
-#: classes/pref/prefs.php:54
-#: js/prefs.js:1734
+#: classes/pref/prefs.php:54 js/prefs.js:1734
 msgid "Customize stylesheet"
 msgstr "Personnaliser la feuille de style"
 
@@ -1949,9 +1825,8 @@ msgid "Customize CSS stylesheet to your liking"
 msgstr "Personnaliser les feuilles de style CSS"
 
 #: classes/pref/prefs.php:55
-#, fuzzy
 msgid "Time zone"
-msgstr "Fuseau horaire de l'utilisateur"
+msgstr "Fuseau horaire"
 
 #: classes/pref/prefs.php:56
 msgid "Group headlines in virtual feeds"
@@ -1962,13 +1837,12 @@ msgid "Special feeds, labels, and categories are grouped by originating feeds"
 msgstr "Les flux spéciaux, tags et catégories sont regroupés par flux sources."
 
 #: classes/pref/prefs.php:57
-#, fuzzy
 msgid "Language"
-msgstr "Langue :"
+msgstr "Langue"
 
 #: classes/pref/prefs.php:58
 msgid "Theme"
-msgstr ""
+msgstr "Thème"
 
 #: classes/pref/prefs.php:58
 msgid "Select one of the available CSS themes"
@@ -2004,9 +1878,8 @@ msgid "Your personal data has been saved."
 msgstr "Vos données personnelles ont été sauvegardées."
 
 #: classes/pref/prefs.php:176
-#, fuzzy
 msgid "Your preferences are now set to default values."
-msgstr "Certaines options ne ne disponibles que dans le profil par défaut."
+msgstr "Vos préférences sont maintenant les valeurs par défaut."
 
 #: classes/pref/prefs.php:198
 msgid "Personal data / Authentication"
@@ -2038,7 +1911,9 @@ msgstr "Votre mot de passe est celui par défaut, veuillez le modifier."
 
 #: classes/pref/prefs.php:294
 msgid "Changing your current password will disable OTP."
-msgstr "Changer votre mot de passe actuel désactivera les mots de passe à usage unique."
+msgstr ""
+"Changer votre mot de passe actuel désactivera les mots de passe à usage "
+"unique."
 
 #: classes/pref/prefs.php:299
 msgid "Old password"
@@ -2061,11 +1936,14 @@ msgid "One time passwords / Authenticator"
 msgstr "Mots de passe à usage unique / Identificateur"
 
 #: classes/pref/prefs.php:327
-msgid "One time passwords are currently enabled. Enter your current password below to disable."
-msgstr "Les mots de passe à usage unique sont actuellement activés. Entrez votre mot de passe actuel ci-dessous pour les désactiver."
+msgid ""
+"One time passwords are currently enabled. Enter your current password below "
+"to disable."
+msgstr ""
+"Les mots de passe à usage unique sont actuellement activés. Entrez votre mot "
+"de passe actuel ci-dessous pour les désactiver."
 
-#: classes/pref/prefs.php:352
-#: classes/pref/prefs.php:403
+#: classes/pref/prefs.php:352 classes/pref/prefs.php:403
 msgid "Enter your password"
 msgstr "Entrez votre mot de passe"
 
@@ -2074,17 +1952,20 @@ msgid "Disable OTP"
 msgstr "Désactiver les mots de passe à usage unique"
 
 #: classes/pref/prefs.php:369
-msgid "You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP."
-msgstr "Vous aurez besoin d'un Identificateur compatible pour utiliser ceci. Changer votre mot de passe le désactivera automatiquement."
+msgid ""
+"You will need a compatible Authenticator to use this. Changing your password "
+"would automatically disable OTP."
+msgstr ""
+"Vous aurez besoin d'un Identificateur compatible pour utiliser ceci. Changer "
+"votre mot de passe le désactivera automatiquement."
 
 #: classes/pref/prefs.php:371
 msgid "Scan the following code by the Authenticator application:"
 msgstr "Scanner le code suivant avec l'application identificateur :"
 
 #: classes/pref/prefs.php:408
-#, fuzzy
 msgid "Enter the generated one time password"
-msgstr "Veuillez saisir votre mot de passe à usage unique :"
+msgstr "Veuillez saisir le mot de passe à usage unique"
 
 #: classes/pref/prefs.php:422
 msgid "Enable OTP"
@@ -2093,6 +1974,8 @@ msgstr "Activer les mots de passe à usage unique"
 #: classes/pref/prefs.php:428
 msgid "PHP GD functions are required for OTP support."
 msgstr ""
+"Les fonctions GD de PHP sont nécessaires pour utiliser les mots de passe à "
+"usage unique."
 
 #: classes/pref/prefs.php:471
 msgid "Some preferences are only available in default profile."
@@ -2120,9 +2003,8 @@ msgid "Save configuration"
 msgstr "Enregistrer la configuration"
 
 #: classes/pref/prefs.php:675
-#, fuzzy
 msgid "Save and exit preferences"
-msgstr "Quitter la configuration"
+msgstr "Sauvegarder et quitter la configuration"
 
 #: classes/pref/prefs.php:680
 msgid "Manage profiles"
@@ -2132,50 +2014,54 @@ msgstr "Gérer les profils"
 msgid "Reset to defaults"
 msgstr "Revenir aux valeurs par défaut"
 
-#: classes/pref/prefs.php:706
-#: classes/pref/prefs.php:708
+#: classes/pref/prefs.php:706 classes/pref/prefs.php:708
 msgid "Plugins"
 msgstr "Plugins"
 
 #: classes/pref/prefs.php:710
-msgid "You will need to reload Tiny Tiny RSS for plugin changes to take effect."
-msgstr "Vous devrez relancer Tiny Tiny RSS pour que les changements apportés aux plugins prennent effet."
+msgid ""
+"You will need to reload Tiny Tiny RSS for plugin changes to take effect."
+msgstr ""
+"Vous devrez relancer Tiny Tiny RSS pour que les changements apportés aux "
+"plugins prennent effet."
 
 #: classes/pref/prefs.php:712
-msgid "Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">wiki</a>."
-msgstr "Téléchargez plus de plugins sur <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">le forum</a> ou <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">le wiki</a> de Tiny Tiny RSS."
+msgid ""
+"Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank"
+"\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a "
+"target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins"
+"\">wiki</a>."
+msgstr ""
+"Téléchargez plus de plugins sur <a class=\"visibleLink\" target=\"_blank\" "
+"href=\"http://tt-rss.org/forum/viewforum.php?f=22\">le forum</a> ou <a "
+"target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins"
+"\">le wiki</a> de Tiny Tiny RSS."
 
 #: classes/pref/prefs.php:738
 msgid "System plugins"
 msgstr "Plugins systèmes"
 
-#: classes/pref/prefs.php:742
-#: classes/pref/prefs.php:796
+#: classes/pref/prefs.php:742 classes/pref/prefs.php:796
 msgid "Plugin"
 msgstr "Plugin"
 
-#: classes/pref/prefs.php:743
-#: classes/pref/prefs.php:797
+#: classes/pref/prefs.php:743 classes/pref/prefs.php:797
 msgid "Description"
 msgstr "Description"
 
-#: classes/pref/prefs.php:744
-#: classes/pref/prefs.php:798
+#: classes/pref/prefs.php:744 classes/pref/prefs.php:798
 msgid "Version"
 msgstr "Version"
 
-#: classes/pref/prefs.php:745
-#: classes/pref/prefs.php:799
+#: classes/pref/prefs.php:745 classes/pref/prefs.php:799
 msgid "Author"
 msgstr "Auteur"
 
-#: classes/pref/prefs.php:774
-#: classes/pref/prefs.php:831
+#: classes/pref/prefs.php:774 classes/pref/prefs.php:831
 msgid "more info"
 msgstr "plus d'info"
 
-#: classes/pref/prefs.php:783
-#: classes/pref/prefs.php:840
+#: classes/pref/prefs.php:783 classes/pref/prefs.php:840
 msgid "Clear data"
 msgstr "Purger les données"
 
@@ -2188,26 +2074,30 @@ msgid "Enable selected plugins"
 msgstr "Activer les plugins sélectionnés"
 
 #: classes/pref/prefs.php:922
-#, fuzzy
 msgid "Incorrect one time password"
 msgstr "Mot de passe incorrect"
 
-#: classes/pref/prefs.php:925
-#: classes/pref/prefs.php:942
+#: classes/pref/prefs.php:925 classes/pref/prefs.php:942
 msgid "Incorrect password"
 msgstr "Mot de passe incorrect"
 
 #: classes/pref/prefs.php:967
 #, php-format
-msgid "You can override colors, fonts and layout of your currently selected theme with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">This file</a> can be used as a baseline."
-msgstr "Vous pouvez redéfinir les couleurs, les polices et la mise en page du thème actuellement sélectionné à l'aide de vos propres instructions CSS ici. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">Ce fichier</a> peut être utilisé comme base de départ."
+msgid ""
+"You can override colors, fonts and layout of your currently selected theme "
+"with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink"
+"\" href=\"%s\">This file</a> can be used as a baseline."
+msgstr ""
+"Vous pouvez redéfinir les couleurs, les polices et la mise en page du thème "
+"actuellement sélectionné à l'aide de vos propres instructions CSS ici. <a "
+"target=\"_blank\" class=\"visibleLink\" href=\"%s\">Ce fichier</a> peut être "
+"utilisé comme base de départ."
 
 #: classes/pref/prefs.php:1007
 msgid "Create profile"
 msgstr "Création d'un profil"
 
-#: classes/pref/prefs.php:1030
-#: classes/pref/prefs.php:1060
+#: classes/pref/prefs.php:1030 classes/pref/prefs.php:1060
 msgid "(active)"
 msgstr "(actif)"
 
@@ -2227,47 +2117,43 @@ msgstr "Cocher pour activer le champ"
 msgid "Feed Title"
 msgstr "Titre du flux"
 
-#: classes/pref/feeds.php:600
-#: classes/pref/feeds.php:835
+#: classes/pref/feeds.php:600 classes/pref/feeds.php:835
 msgid "Update"
 msgstr "Mettre à jour"
 
-#: classes/pref/feeds.php:615
-#: classes/pref/feeds.php:851
+#: classes/pref/feeds.php:615 classes/pref/feeds.php:851
 msgid "Article purging:"
 msgstr "Purge des articles :"
 
 #: classes/pref/feeds.php:645
-msgid "<b>Hint:</b> you need to fill in your login information if your feed requires authentication, except for Twitter feeds."
-msgstr "<b>Astuce :</b> vous devez renseigner vos informations d'identification si le flux nécessite une authentification, sauf pour les flux Twitter."
+msgid ""
+"<b>Hint:</b> you need to fill in your login information if your feed "
+"requires authentication, except for Twitter feeds."
+msgstr ""
+"<b>Astuce :</b> vous devez renseigner vos informations d'identification si "
+"le flux nécessite une authentification, sauf pour les flux Twitter."
 
-#: classes/pref/feeds.php:661
-#: classes/pref/feeds.php:880
+#: classes/pref/feeds.php:661 classes/pref/feeds.php:880
 msgid "Hide from Popular feeds"
 msgstr "Masquer dans la liste des flux populaires"
 
-#: classes/pref/feeds.php:673
-#: classes/pref/feeds.php:886
+#: classes/pref/feeds.php:673 classes/pref/feeds.php:886
 msgid "Include in e-mail digest"
 msgstr "Inclure dans la synthèse quotidienne par courrier électronique"
 
-#: classes/pref/feeds.php:686
-#: classes/pref/feeds.php:892
+#: classes/pref/feeds.php:686 classes/pref/feeds.php:892
 msgid "Always display image attachments"
 msgstr "Toujours afficher les images jointes"
 
-#: classes/pref/feeds.php:699
-#: classes/pref/feeds.php:900
+#: classes/pref/feeds.php:699 classes/pref/feeds.php:900
 msgid "Do not embed images"
 msgstr "Ne pas intégrer les images"
 
-#: classes/pref/feeds.php:712
-#: classes/pref/feeds.php:908
+#: classes/pref/feeds.php:712 classes/pref/feeds.php:908
 msgid "Cache images locally"
 msgstr "Enregistrer localement les images"
 
-#: classes/pref/feeds.php:724
-#: classes/pref/feeds.php:914
+#: classes/pref/feeds.php:724 classes/pref/feeds.php:914
 msgid "Mark updated articles as unread"
 msgstr "Marquer les article mis à jour comme non lus"
 
@@ -2285,10 +2171,11 @@ msgstr "Réinscription aux mises à jour en push"
 
 #: classes/pref/feeds.php:773
 msgid "Resets PubSubHubbub subscription status for push-enabled feeds."
-msgstr "Réinitialiser l'état de l'inscription PubSubHubbub pour les flux en mise à jour push."
+msgstr ""
+"Réinitialiser l'état de l'inscription PubSubHubbub pour les flux en mise à "
+"jour push."
 
-#: classes/pref/feeds.php:1169
-#: classes/pref/feeds.php:1222
+#: classes/pref/feeds.php:1169 classes/pref/feeds.php:1222
 msgid "All done."
 msgstr "Tout est terminé."
 
@@ -2304,8 +2191,7 @@ msgstr "Flux inactifs"
 msgid "Edit selected feeds"
 msgstr "Modifier les flux sélectionnés"
 
-#: classes/pref/feeds.php:1338
-#: js/prefs.js:1779
+#: classes/pref/feeds.php:1338 js/prefs.js:1779
 msgid "Batch subscribe"
 msgstr "Abonnement par lots"
 
@@ -2342,12 +2228,17 @@ msgid "OPML"
 msgstr "OPML"
 
 #: classes/pref/feeds.php:1427
-msgid "Using OPML you can export and import your feeds, filters, labels and Tiny Tiny RSS settings."
-msgstr "Avec OPML, vous pouvez exporter et importer vos flux, filtrer, étiquettes et réglages de Tiny Tiny RSS."
+msgid ""
+"Using OPML you can export and import your feeds, filters, labels and Tiny "
+"Tiny RSS settings."
+msgstr ""
+"Avec OPML, vous pouvez exporter et importer vos flux, filtrer, étiquettes et "
+"réglages de Tiny Tiny RSS."
 
 #: classes/pref/feeds.php:1429
 msgid "Only main settings profile can be migrated using OPML."
-msgstr "Seul le profil de réglages principal peut être migré en utilisant OPML."
+msgstr ""
+"Seul le profil de réglages principal peut être migré en utilisant OPML."
 
 #: classes/pref/feeds.php:1442
 msgid "Import my OPML"
@@ -2366,12 +2257,20 @@ msgid "Export OPML"
 msgstr "Exporter en OPML"
 
 #: classes/pref/feeds.php:1456
-msgid "Your OPML can be published publicly and can be subscribed by anyone who knows the URL below."
-msgstr "Votre fichier OPML peut être publié et toute personne qui connaît l'adresse indiquée ci-dessous peut s'y abonner."
+msgid ""
+"Your OPML can be published publicly and can be subscribed by anyone who "
+"knows the URL below."
+msgstr ""
+"Votre fichier OPML peut être publié et toute personne qui connaît l'adresse "
+"indiquée ci-dessous peut s'y abonner."
 
 #: classes/pref/feeds.php:1458
-msgid "Published OPML does not include your Tiny Tiny RSS settings, feeds that require authentication or feeds hidden from Popular feeds."
-msgstr "Les OPML publiés n'incluent pas vos réglages de Tiny Tiny RSS, les flux qui nécessitent une authentification, ou les flux cachés des Flux Populaires."
+msgid ""
+"Published OPML does not include your Tiny Tiny RSS settings, feeds that "
+"require authentication or feeds hidden from Popular feeds."
+msgstr ""
+"Les OPML publiés n'incluent pas vos réglages de Tiny Tiny RSS, les flux qui "
+"nécessitent une authentification, ou les flux cachés des Flux Populaires."
 
 #: classes/pref/feeds.php:1460
 msgid "Public OPML URL"
@@ -2386,8 +2285,12 @@ msgid "Firefox integration"
 msgstr "Intégration à Firefox"
 
 #: classes/pref/feeds.php:1472
-msgid "This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below."
-msgstr "Ce site Tiny Tiny RSS peut être utilisé comme lecteur de flux dans Firefox en cliquant sur le lien ci-dessous."
+msgid ""
+"This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the "
+"link below."
+msgstr ""
+"Ce site Tiny Tiny RSS peut être utilisé comme lecteur de flux dans Firefox "
+"en cliquant sur le lien ci-dessous."
 
 #: classes/pref/feeds.php:1479
 msgid "Click here to register this site as a feed reader."
@@ -2402,8 +2305,12 @@ msgid "Published articles and generated feeds"
 msgstr "Articles publiés et flux générés"
 
 #: classes/pref/feeds.php:1491
-msgid "Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the URL specified below."
-msgstr "Les articles publiés sont exportés comme un flux RSS public et toute personne qui connaît l'adresse indiquée ci-dessous peut s'y abonner."
+msgid ""
+"Published articles are exported as a public RSS feed and can be subscribed "
+"by anyone who knows the URL specified below."
+msgstr ""
+"Les articles publiés sont exportés comme un flux RSS public et toute "
+"personne qui connaît l'adresse indiquée ci-dessous peut s'y abonner."
 
 #: classes/pref/feeds.php:1497
 msgid "Display URL"
@@ -2426,16 +2333,18 @@ msgid "Unshare all articles"
 msgstr "Désactiver le partage pour tous les articles"
 
 #: classes/pref/feeds.php:1582
-msgid "These feeds have not been updated with new content for 3 months (oldest first):"
-msgstr "Les flux suivants n'ont pas été mis à jour depuis 3 mois (par âge décroissant) :"
+msgid ""
+"These feeds have not been updated with new content for 3 months (oldest "
+"first):"
+msgstr ""
+"Les flux suivants n'ont pas été mis à jour depuis 3 mois (par âge "
+"décroissant) :"
 
-#: classes/pref/feeds.php:1619
-#: classes/pref/feeds.php:1689
+#: classes/pref/feeds.php:1619 classes/pref/feeds.php:1689
 msgid "Click to edit feed"
 msgstr "Cliquez pour modifier le flux"
 
-#: classes/pref/feeds.php:1637
-#: classes/pref/feeds.php:1709
+#: classes/pref/feeds.php:1637 classes/pref/feeds.php:1709
 msgid "Unsubscribe from selected feeds"
 msgstr "Se désabonner des flux sélectionnés"
 
@@ -2445,7 +2354,9 @@ msgstr "Ces flux n'ont pas été mis à jour à cause d'erreurs :"
 
 #: classes/pref/feeds.php:1814
 msgid "Add one valid RSS feed per line (no feed detection is done)"
-msgstr "Ajoutez un flux RSS valide par ligne (aucune détection de flux n'est réalisée)"
+msgstr ""
+"Ajoutez un flux RSS valide par ligne (aucune détection de flux n'est "
+"réalisée)"
 
 #: classes/pref/feeds.php:1823
 msgid "Feeds to subscribe, One per line"
@@ -2457,7 +2368,7 @@ msgstr "Les flux requièrent une identification."
 
 #: classes/pref/system.php:25
 msgid "Error Log"
-msgstr ""
+msgstr "Journal des erreurs"
 
 #: classes/pref/system.php:36
 msgid "Refresh"
@@ -2465,24 +2376,28 @@ msgstr "Actualiser"
 
 #: classes/pref/system.php:41
 msgid "Error"
-msgstr ""
+msgstr "Erreur"
 
 #: classes/pref/system.php:42
-#, fuzzy
 msgid "Filename"
-msgstr "Nom du fichier :"
+msgstr "Nom du fichier"
 
 #: classes/pref/system.php:43
 msgid "Message"
-msgstr ""
+msgstr "Message"
 
 #: classes/pref/system.php:45
 msgid "Date"
 msgstr "Date"
 
 #: plugins/digest/digest_body.php:57
-msgid "Your browser doesn't support Javascript, which is required for this application to function properly. Please check your browser settings."
-msgstr "Votre navigateur ne gère pas JavaScript, alors que c'est nécessaire pour le bon fonctionnement de ce logiciel. Veuillez modifier la configuration de votre navigateur."
+msgid ""
+"Your browser doesn't support Javascript, which is required for this "
+"application to function properly. Please check your browser settings."
+msgstr ""
+"Votre navigateur ne gère pas JavaScript, alors que c'est nécessaire pour le "
+"bon fonctionnement de ce logiciel. Veuillez modifier la configuration de "
+"votre navigateur."
 
 #: plugins/digest/digest_body.php:72
 msgid "Hello,"
@@ -2496,8 +2411,7 @@ msgstr "Version ordinateur"
 msgid "Close article"
 msgstr "Fermer l'article"
 
-#: plugins/nsfw/init.php:29
-#: plugins/nsfw/init.php:40
+#: plugins/nsfw/init.php:29 plugins/nsfw/init.php:40
 msgid "Not work safe (click to toggle)"
 msgstr "Non convenable au travail (cliquer pour basculer)"
 
@@ -2507,7 +2421,8 @@ msgstr "Plugin NSFW"
 
 #: plugins/nsfw/init.php:77
 msgid "Tags to consider NSFW (comma-separated)"
-msgstr "Tags à considérer non convenables au travail (séparés par des virgules)"
+msgstr ""
+"Tags à considérer non convenables au travail (séparés par des virgules)"
 
 #: plugins/nsfw/init.php:98
 msgid "Configuration saved."
@@ -2530,8 +2445,7 @@ msgstr "L'ancien mot de passe n'est pas correct."
 #: plugins/mobile/mobile-functions.php:176
 #: plugins/mobile/mobile-functions.php:203
 #: plugins/mobile/mobile-functions.php:239
-#: plugins/mobile/mobile-functions.php:376
-#: plugins/mobile/prefs.php:25
+#: plugins/mobile/mobile-functions.php:376 plugins/mobile/prefs.php:25
 msgid "Home"
 msgstr "Accueil"
 
@@ -2547,21 +2461,15 @@ msgstr "Version ordinateur"
 msgid "Enable categories"
 msgstr "Utiliser les catégories de flux"
 
-#: plugins/mobile/prefs.php:31
-#: plugins/mobile/prefs.php:36
-#: plugins/mobile/prefs.php:42
-#: plugins/mobile/prefs.php:47
-#: plugins/mobile/prefs.php:52
-#: plugins/mobile/prefs.php:57
+#: plugins/mobile/prefs.php:31 plugins/mobile/prefs.php:36
+#: plugins/mobile/prefs.php:42 plugins/mobile/prefs.php:47
+#: plugins/mobile/prefs.php:52 plugins/mobile/prefs.php:57
 msgid "ON"
 msgstr "Activé"
 
-#: plugins/mobile/prefs.php:31
-#: plugins/mobile/prefs.php:36
-#: plugins/mobile/prefs.php:42
-#: plugins/mobile/prefs.php:47
-#: plugins/mobile/prefs.php:52
-#: plugins/mobile/prefs.php:57
+#: plugins/mobile/prefs.php:31 plugins/mobile/prefs.php:36
+#: plugins/mobile/prefs.php:42 plugins/mobile/prefs.php:47
+#: plugins/mobile/prefs.php:52 plugins/mobile/prefs.php:57
 msgid "OFF"
 msgstr "Désactivé"
 
@@ -2581,15 +2489,12 @@ msgstr "Cacher les articles et flux lus"
 msgid "Sort feeds by unread count"
 msgstr "Trier les flux par nombre d'articles non lus"
 
-#: plugins/mailto/init.php:49
-#: plugins/mailto/init.php:55
-#: plugins/mail/init.php:64
-#: plugins/mail/init.php:70
+#: plugins/mailto/init.php:49 plugins/mailto/init.php:55
+#: plugins/mail/init.php:64 plugins/mail/init.php:70
 msgid "[Forwarded]"
 msgstr "[Transféré]"
 
-#: plugins/mailto/init.php:49
-#: plugins/mail/init.php:64
+#: plugins/mailto/init.php:49 plugins/mail/init.php:64
 msgid "Multiple articles"
 msgstr "Articles multiples"
 
@@ -2602,8 +2507,11 @@ msgid "Forward selected article(s) by email."
 msgstr "Transférer le ou les article(s) par mail."
 
 #: plugins/mailto/init.php:78
-msgid "You should be able to edit the message before sending in your mail client."
-msgstr "Vous devriez pouvoir modifier le message avant son envoi dans votre client de messagerie."
+msgid ""
+"You should be able to edit the message before sending in your mail client."
+msgstr ""
+"Vous devriez pouvoir modifier le message avant son envoi dans votre client "
+"de messagerie."
 
 #: plugins/mailto/init.php:83
 msgid "Close this dialog"
@@ -2614,8 +2522,13 @@ msgid "Bookmarklets"
 msgstr "Bookmarklets"
 
 #: plugins/bookmarklets/init.php:22
-msgid "Drag the link below to your browser toolbar, open the feed you're interested in in your browser and click on the link to subscribe to it."
-msgstr "Glissez le lien ci-dessous dans la barre d'outil de votre navigateur, ouvrez le flux qui vous intéresse et cliquez sur le lien pour vous abonner à ce flux."
+msgid ""
+"Drag the link below to your browser toolbar, open the feed you're interested "
+"in in your browser and click on the link to subscribe to it."
+msgstr ""
+"Glissez le lien ci-dessous dans la barre d'outil de votre navigateur, ouvrez "
+"le flux qui vous intéresse et cliquez sur le lien pour vous abonner à ce "
+"flux."
 
 #: plugins/bookmarklets/init.php:26
 #, php-format
@@ -2639,8 +2552,12 @@ msgid "Article archive"
 msgstr "Archive"
 
 #: plugins/import_export/init.php:62
-msgid "You can export and import your Starred and Archived articles for safekeeping or when migrating between tt-rss instances."
-msgstr "Vous pouvez exporter et importer vos articles remarquables et archivés afin de les sauvegarder ou pour les transférer entre deux instances de tt-rss."
+msgid ""
+"You can export and import your Starred and Archived articles for safekeeping "
+"or when migrating between tt-rss instances."
+msgstr ""
+"Vous pouvez exporter et importer vos articles remarquables et archivés afin "
+"de les sauvegarder ou pour les transférer entre deux instances de tt-rss."
 
 #: plugins/import_export/init.php:65
 msgid "Export my data"
@@ -2691,8 +2608,7 @@ msgstr "Impossible de charger le document XML."
 msgid "Prepare data"
 msgstr "Préparer les données"
 
-#: plugins/import_export/init.php:444
-#: plugins/googlereaderimport/init.php:92
+#: plugins/import_export/init.php:444 plugins/googlereaderimport/init.php:92
 msgid "No file uploaded."
 msgstr "Aucun fichier envoyé."
 
@@ -2712,8 +2628,7 @@ msgstr "Sujet :"
 msgid "Send e-mail"
 msgstr "Envoyer le mail"
 
-#: plugins/note/init.php:26
-#: plugins/note/note.js:11
+#: plugins/note/init.php:26 plugins/note/note.js:11
 msgid "Edit article note"
 msgstr "Modifier l'annotation de l'article"
 
@@ -2744,7 +2659,9 @@ msgstr "Importer les articles marqués ou partagés de Google Reader"
 
 #: plugins/googlereaderimport/init.php:357
 msgid "Paste your starred.json or shared.json into the form below."
-msgstr "Collez votre fichier starred.json ou shared.json dans le formulaire ci-dessous."
+msgstr ""
+"Collez votre fichier starred.json ou shared.json dans le formulaire ci-"
+"dessous."
 
 #: plugins/googlereaderimport/init.php:371
 msgid "Import my Starred items"
@@ -2754,35 +2671,29 @@ msgstr "Importer mes éléments partagés"
 msgid "Linked"
 msgstr "Instances liées"
 
-#: plugins/instances/init.php:204
-#: plugins/instances/init.php:395
+#: plugins/instances/init.php:204 plugins/instances/init.php:395
 msgid "Instance"
 msgstr "Instance"
 
-#: plugins/instances/init.php:215
-#: plugins/instances/init.php:312
+#: plugins/instances/init.php:215 plugins/instances/init.php:312
 #: plugins/instances/init.php:404
 msgid "Instance URL"
 msgstr "URL de l'instance"
 
-#: plugins/instances/init.php:226
-#: plugins/instances/init.php:414
+#: plugins/instances/init.php:226 plugins/instances/init.php:414
 msgid "Access key:"
 msgstr "Clef d'accès :"
 
-#: plugins/instances/init.php:229
-#: plugins/instances/init.php:313
+#: plugins/instances/init.php:229 plugins/instances/init.php:313
 #: plugins/instances/init.php:417
 msgid "Access key"
 msgstr "Clef d'accès"
 
-#: plugins/instances/init.php:233
-#: plugins/instances/init.php:421
+#: plugins/instances/init.php:233 plugins/instances/init.php:421
 msgid "Use one access key for both linked instances."
 msgstr "Utilisez une clef d'accès pour les deux instances liées."
 
-#: plugins/instances/init.php:241
-#: plugins/instances/init.php:429
+#: plugins/instances/init.php:241 plugins/instances/init.php:429
 msgid "Generate new key"
 msgstr "Générer une nouvelle clef"
 
@@ -2791,8 +2702,12 @@ msgid "Link instance"
 msgstr "Lier une instance"
 
 #: plugins/instances/init.php:304
-msgid "You can connect other instances of Tiny Tiny RSS to this one to share Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:"
-msgstr "Vous pouvez connecter d'autres instances de Tiny Tiny RSS à celle-ci pour partager les flux populaires. Pour cela, utilisez l'URL suivante :"
+msgid ""
+"You can connect other instances of Tiny Tiny RSS to this one to share "
+"Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:"
+msgstr ""
+"Vous pouvez connecter d'autres instances de Tiny Tiny RSS à celle-ci pour "
+"partager les flux populaires. Pour cela, utilisez l'URL suivante :"
 
 #: plugins/instances/init.php:314
 msgid "Last connected"
@@ -2818,8 +2733,7 @@ msgstr "Partager par URL"
 msgid "You can share this article by the following unique URL:"
 msgstr "Vous pouvez partager cet article avec l'URL unique suivante :"
 
-#: plugins/updater/init.php:321
-#: plugins/updater/init.php:338
+#: plugins/updater/init.php:321 plugins/updater/init.php:338
 #: plugins/updater/updater.js:10
 msgid "Update Tiny Tiny RSS"
 msgstr "Mettre à jour Tiny Tiny RSS"
@@ -2829,21 +2743,26 @@ msgid "Your Tiny Tiny RSS installation is up to date."
 msgstr "Votre installation de Tiny Tiny RSS est à jour."
 
 #: plugins/updater/init.php:349
-#, fuzzy
 msgid "Do not close this dialog until updating is finished."
-msgstr "Ne fermez pas ce dialogue avant que la mise à jour soit terminée. Veuillez sauvegarder votre dossier tt-rss avant de continuer."
+msgstr "Ne fermez pas ce dialogue avant que la mise à jour soit terminée."
 
 #: plugins/updater/init.php:358
 msgid "It is suggested to backup your tt-rss directory first."
-msgstr ""
+msgstr "Il est conseillé de sauvegarder votre dossier tt-rss avant."
 
 #: plugins/updater/init.php:359
 msgid "Your database will not be modified."
-msgstr ""
+msgstr "Votre base de données ne sera pas modifiée."
 
 #: plugins/updater/init.php:360
-msgid "Your current tt-rss installation directory will not be modified. It will be renamed and left in the parent directory. You will be able to migrate all your customized files after update finishes."
+msgid ""
+"Your current tt-rss installation directory will not be modified. It will be "
+"renamed and left in the parent directory. You will be able to migrate all "
+"your customized files after update finishes."
 msgstr ""
+"Votre dossier tt-rss ne sera pas modifié. Il sera renommé et laissé tel quel "
+"dans le dossier parent. Vous pourrez recopier vos fichiers personnalisés "
+"après la mise à jour."
 
 #: plugins/updater/init.php:361
 msgid "Ready to update."
@@ -2853,9 +2772,7 @@ msgstr "Prêt à mettre à jour."
 msgid "Start update"
 msgstr "Commencer la mise à jour"
 
-#: js/feedlist.js:395
-#: js/feedlist.js:423
-#: plugins/digest/digest.js:26
+#: js/feedlist.js:395 js/feedlist.js:423 plugins/digest/digest.js:26
 msgid "Mark all articles in %s as read?"
 msgstr "Marquer tous les articles de %s comme lus ?"
 
@@ -2873,16 +2790,20 @@ msgstr "Marquer tous les articles de %s âgés d'au moins 2 semaines comme lus ?
 
 #: js/functions.js:65
 msgid "The error will be reported to the configured log destination."
-msgstr ""
+msgstr "L'erreur sera reportée vers la destination configurée."
 
 #: js/functions.js:107
-msgid "Are you sure to report this exception to tt-rss.org? The report will include your browser information. Your IP would be saved in the database."
-msgstr "Êtes-vous sûr de vouloir signaler cette erreur sur tt-rss.org ? Le rapport incluera des informations sur votre navigateur. Votre adresse IP sera sauvegardée dans la base de données."
+msgid ""
+"Are you sure to report this exception to tt-rss.org? The report will include "
+"your browser information. Your IP would be saved in the database."
+msgstr ""
+"Êtes-vous sûr de vouloir signaler cette erreur sur tt-rss.org ? Le rapport "
+"incluera des informations sur votre navigateur. Votre adresse IP sera "
+"sauvegardée dans la base de données."
 
 #: js/functions.js:236
-#, fuzzy
 msgid "Click to close"
-msgstr "Cliquez pour mettre en pause"
+msgstr "Cliquez pour fermer"
 
 #: js/functions.js:612
 msgid "Error explained"
@@ -2941,9 +2862,8 @@ msgid "Specified URL doesn't seem to contain any feeds."
 msgstr "L'URL spécifiée ne semble pas contenir de flux."
 
 #: js/functions.js:862
-#, fuzzy
 msgid "Expand to select feed"
-msgstr "Modifier les flux sélectionnés"
+msgstr "Développer jusqu'au flux sélectionné"
 
 #: js/functions.js:874
 msgid "Couldn't download the specified URL: %s"
@@ -2951,7 +2871,7 @@ msgstr "L'URL spécifiée n'a pas pu être téléchargée : %s"
 
 #: js/functions.js:878
 msgid "XML validation failed: %s"
-msgstr ""
+msgstr "Erreur de validation XML: %s"
 
 #: js/functions.js:883
 msgid "You are already subscribed to this feed."
@@ -2970,15 +2890,18 @@ msgid "Create Filter"
 msgstr "Créer un filtre"
 
 #: js/functions.js:1191
-msgid "Reset subscription? Tiny Tiny RSS will try to subscribe to the notification hub again on next feed update."
-msgstr "Réinitialiser l'inscription ? Tiny Tiny RSS essayera de se réinscrire au hub de notification lors de la prochaine mise à jour du flux."
+msgid ""
+"Reset subscription? Tiny Tiny RSS will try to subscribe to the notification "
+"hub again on next feed update."
+msgstr ""
+"Réinitialiser l'inscription ? Tiny Tiny RSS essayera de se réinscrire au hub "
+"de notification lors de la prochaine mise à jour du flux."
 
 #: js/functions.js:1202
 msgid "Subscription reset."
 msgstr "Abonnement réinitialisé."
 
-#: js/functions.js:1212
-#: js/tt-rss.js:650
+#: js/functions.js:1212 js/tt-rss.js:650
 msgid "Unsubscribe from %s?"
 msgstr "Se désabonner de %s ?"
 
@@ -2994,14 +2917,11 @@ msgstr "Veuillez saisir un titre pour cette catégorie :"
 msgid "Generate new syndication address for this feed?"
 msgstr "Générer une nouvelle adresse d'abonnement pour ce flux ?"
 
-#: js/functions.js:1359
-#: js/prefs.js:1231
+#: js/functions.js:1359 js/prefs.js:1231
 msgid "Trying to change address..."
 msgstr "Changement de l'adresse..."
 
-#: js/functions.js:1546
-#: js/tt-rss.js:421
-#: js/tt-rss.js:631
+#: js/functions.js:1546 js/tt-rss.js:421 js/tt-rss.js:631
 msgid "You can't edit this kind of feed."
 msgstr "Vous ne pouvez pas modifier ce type de flux."
 
@@ -3009,9 +2929,7 @@ msgstr "Vous ne pouvez pas modifier ce type de flux."
 msgid "Edit Feed"
 msgstr "Modifier le flux"
 
-#: js/functions.js:1567
-#: js/prefs.js:194
-#: js/prefs.js:749
+#: js/functions.js:1567 js/prefs.js:194 js/prefs.js:749
 msgid "Saving data..."
 msgstr "Enregistrement des données..."
 
@@ -3019,33 +2937,29 @@ msgstr "Enregistrement des données..."
 msgid "More Feeds"
 msgstr "D'autres flux"
 
-#: js/functions.js:1660
-#: js/functions.js:1770
-#: js/prefs.js:397
-#: js/prefs.js:427
-#: js/prefs.js:459
-#: js/prefs.js:642
-#: js/prefs.js:662
-#: js/prefs.js:1207
+#: js/functions.js:1660 js/functions.js:1770 js/prefs.js:397 js/prefs.js:427
+#: js/prefs.js:459 js/prefs.js:642 js/prefs.js:662 js/prefs.js:1207
 #: js/prefs.js:1352
 msgid "No feeds are selected."
 msgstr "Aucun flux sélectionné."
 
 #: js/functions.js:1702
-msgid "Remove selected feeds from the archive? Feeds with stored articles will not be removed."
-msgstr "Supprimer les flux sélectionnés de l'archive ? Les flux contenant des articles stockés ne seront pas supprimés."
+msgid ""
+"Remove selected feeds from the archive? Feeds with stored articles will not "
+"be removed."
+msgstr ""
+"Supprimer les flux sélectionnés de l'archive ? Les flux contenant des "
+"articles stockés ne seront pas supprimés."
 
 #: js/functions.js:1741
 msgid "Feeds with update errors"
 msgstr "Flux avec des erreurs de mise à jour"
 
-#: js/functions.js:1752
-#: js/prefs.js:1189
+#: js/functions.js:1752 js/prefs.js:1189
 msgid "Remove selected feeds?"
 msgstr "Supprimer les flux sélectionnés ?"
 
-#: js/functions.js:1755
-#: js/prefs.js:1192
+#: js/functions.js:1755 js/prefs.js:1192
 msgid "Removing selected feeds..."
 msgstr "Suppression des flux sélectionnés..."
 
@@ -3071,7 +2985,8 @@ msgstr "Veuillez saisir l'identifiant :"
 
 #: js/prefs.js:62
 msgid "Can't create user: no login specified."
-msgstr "Impossible de créer l'utilisateur : aucun identifiant n'a été spécifié."
+msgstr ""
+"Impossible de créer l'utilisateur : aucun identifiant n'a été spécifié."
 
 #: js/prefs.js:66
 msgid "Adding user..."
@@ -3101,23 +3016,23 @@ msgstr "Supprimer les étiquettes sélectionnées ?"
 msgid "Removing selected labels..."
 msgstr "Suppression des étiquettes sélectionnées..."
 
-#: js/prefs.js:295
-#: js/prefs.js:1393
+#: js/prefs.js:295 js/prefs.js:1393
 msgid "No labels are selected."
 msgstr "Aucune étiquette sélectionnée."
 
 #: js/prefs.js:309
-msgid "Remove selected users? Neither default admin nor your account will be removed."
-msgstr "Supprimer les utilisateurs sélectionnés ? L'administrateur par défaut et votre compte utilisateur ne seront pas supprimés."
+msgid ""
+"Remove selected users? Neither default admin nor your account will be "
+"removed."
+msgstr ""
+"Supprimer les utilisateurs sélectionnés ? L'administrateur par défaut et "
+"votre compte utilisateur ne seront pas supprimés."
 
 #: js/prefs.js:312
 msgid "Removing selected users..."
 msgstr "Suppression des utilisateurs sélectionnés..."
 
-#: js/prefs.js:326
-#: js/prefs.js:507
-#: js/prefs.js:528
-#: js/prefs.js:567
+#: js/prefs.js:326 js/prefs.js:507 js/prefs.js:528 js/prefs.js:567
 msgid "No users are selected."
 msgstr "Aucun utilisateur sélectionné."
 
@@ -3129,9 +3044,7 @@ msgstr "Supprimer les filtres sélectionnés ?"
 msgid "Removing selected filters..."
 msgstr "Suppression des filtres sélectionnés..."
 
-#: js/prefs.js:359
-#: js/prefs.js:597
-#: js/prefs.js:616
+#: js/prefs.js:359 js/prefs.js:597 js/prefs.js:616
 msgid "No filters are selected."
 msgstr "Aucun filtre sélectionné."
 
@@ -3149,7 +3062,8 @@ msgstr "Veuillez sélectionner un seul flux."
 
 #: js/prefs.js:418
 msgid "Erase all non-starred articles in selected feed?"
-msgstr "Supprimer tous les articles non-remarquables dans le flux sélectionné ?"
+msgstr ""
+"Supprimer tous les articles non-remarquables dans le flux sélectionné ?"
 
 #: js/prefs.js:421
 msgid "Clearing selected feed..."
@@ -3157,7 +3071,9 @@ msgstr "Nettoyage du flux sélectionné..."
 
 #: js/prefs.js:440
 msgid "How many days of articles to keep (0 - use default)?"
-msgstr "Combien de jours faut-il conserver les articles (0 pour utiliser la valeur par défaut) ?"
+msgstr ""
+"Combien de jours faut-il conserver les articles (0 pour utiliser la valeur "
+"par défaut) ?"
 
 #: js/prefs.js:443
 msgid "Purging selected feed..."
@@ -3171,9 +3087,7 @@ msgstr "L'identifiant ne peut pas être vide."
 msgid "Saving user..."
 msgstr "Sauvegarde de l'utilisateur..."
 
-#: js/prefs.js:512
-#: js/prefs.js:533
-#: js/prefs.js:572
+#: js/prefs.js:512 js/prefs.js:533 js/prefs.js:572
 msgid "Please select only one user."
 msgstr "Veuillez sélectionner un seul utilisateur."
 
@@ -3217,8 +3131,7 @@ msgstr "Import OPML"
 msgid "Please choose an OPML file first."
 msgstr "Veuillez d'abord sélectionner un fichier OPML."
 
-#: js/prefs.js:815
-#: plugins/import_export/import_export.js:115
+#: js/prefs.js:815 plugins/import_export/import_export.js:115
 #: plugins/googlereaderimport/init.js:45
 msgid "Importing, please wait..."
 msgstr "Import en cours, veuillez patienter..."
@@ -3228,8 +3141,11 @@ msgid "Reset to defaults?"
 msgstr "Revenir aux valeurs par défaut ?"
 
 #: js/prefs.js:1096
-msgid "Remove category %s? Any nested feeds would be placed into Uncategorized."
-msgstr "Supprimer la categorie %s ? Tous les flux enfants seront placés dans Sans catégorie."
+msgid ""
+"Remove category %s? Any nested feeds would be placed into Uncategorized."
+msgstr ""
+"Supprimer la categorie %s ? Tous les flux enfants seront placés dans Sans "
+"catégorie."
 
 #: js/prefs.js:1102
 msgid "Removing category..."
@@ -3277,7 +3193,9 @@ msgstr "Recalcul du score des flux sélectionnés..."
 
 #: js/prefs.js:1359
 msgid "Rescore all articles? This operation may take a lot of time."
-msgstr "Recalculer le score de tous les articles ? Cette opération peut prendre beaucoup de temps."
+msgstr ""
+"Recalculer le score de tous les articles ? Cette opération peut prendre "
+"beaucoup de temps."
 
 #: js/prefs.js:1362
 msgid "Rescoring feeds..."
@@ -3292,8 +3210,11 @@ msgid "Settings Profiles"
 msgstr "Paramètres des profils"
 
 #: js/prefs.js:1425
-msgid "Remove selected profiles? Active and default profiles will not be removed."
-msgstr "Supprimer les profils sélectionnés ? Les profils actifs et par défaut ne seront pas supprimés."
+msgid ""
+"Remove selected profiles? Active and default profiles will not be removed."
+msgstr ""
+"Supprimer les profils sélectionnés ? Les profils actifs et par défaut ne "
+"seront pas supprimés."
 
 #: js/prefs.js:1428
 msgid "Removing selected profiles..."
@@ -3303,13 +3224,11 @@ msgstr "Suppression des profils sélectionnés..."
 msgid "No profiles are selected."
 msgstr "Aucun profil sélectionné."
 
-#: js/prefs.js:1451
-#: js/prefs.js:1504
+#: js/prefs.js:1451 js/prefs.js:1504
 msgid "Activate selected profile?"
 msgstr "Activer le profil selectionné ?"
 
-#: js/prefs.js:1467
-#: js/prefs.js:1520
+#: js/prefs.js:1467 js/prefs.js:1520
 msgid "Please choose a profile to activate."
 msgstr "Veuillez sélectionner un profil à activer."
 
@@ -3319,10 +3238,11 @@ msgstr "Création d'un profil..."
 
 #: js/prefs.js:1528
 msgid "This will invalidate all previously generated feed URLs. Continue?"
-msgstr "Ceci va invalider toutes les URL de flux générées auparavant. Souhaitez-vous continuer ?"
+msgstr ""
+"Ceci va invalider toutes les URL de flux générées auparavant. Souhaitez-vous "
+"continuer ?"
 
-#: js/prefs.js:1531
-#: js/prefs.js:1550
+#: js/prefs.js:1531 js/prefs.js:1550
 msgid "Clearing URLs..."
 msgstr "Nettoyage des URL..."
 
@@ -3332,7 +3252,9 @@ msgstr "URL générées supprimées."
 
 #: js/prefs.js:1547
 msgid "This will invalidate all previously shared article URLs. Continue?"
-msgstr "Ceci va invalider tous les articles partagés par URL. Souhaitez-vous continuer ?"
+msgstr ""
+"Ceci va invalider tous les articles partagés par URL. Souhaitez-vous "
+"continuer ?"
 
 #: js/prefs.js:1557
 msgid "Shared URLs cleared."
@@ -3374,8 +3296,7 @@ msgstr "Sélectionner des éléments par tags"
 msgid "You can't unsubscribe from the category."
 msgstr "Vous ne pouvez pas vous désabonner de la catégorie."
 
-#: js/tt-rss.js:644
-#: js/tt-rss.js:798
+#: js/tt-rss.js:644 js/tt-rss.js:798
 msgid "Please select some feed first."
 msgstr "Veuillez d'abord sélectionner un flux."
 
@@ -3399,47 +3320,35 @@ msgstr "Une nouvelle version est disponible !"
 msgid "Cancel search"
 msgstr "Annuler la recherche"
 
-#: js/viewfeed.js:453
-#: plugins/digest/digest.js:258
+#: js/viewfeed.js:453 plugins/digest/digest.js:258
 #: plugins/digest/digest.js:714
 msgid "Unstar article"
 msgstr "Ne plus marquer comme remarquable"
 
-#: js/viewfeed.js:457
-#: plugins/digest/digest.js:260
+#: js/viewfeed.js:457 plugins/digest/digest.js:260
 #: plugins/digest/digest.js:718
 msgid "Star article"
 msgstr "Marquer comme remarquable"
 
-#: js/viewfeed.js:497
-#: plugins/digest/digest.js:263
+#: js/viewfeed.js:497 plugins/digest/digest.js:263
 #: plugins/digest/digest.js:749
 msgid "Unpublish article"
 msgstr "Ne plus publier l'article"
 
-#: js/viewfeed.js:501
-#: plugins/digest/digest.js:265
+#: js/viewfeed.js:501 plugins/digest/digest.js:265
 #: plugins/digest/digest.js:754
 msgid "Publish article"
 msgstr "Publier l'article"
 
 #: js/viewfeed.js:653
-#, fuzzy
 msgid "%d article selected"
 msgid_plural "%d articles selected"
-msgstr[0] "Aucun article sélectionné."
-msgstr[1] "Aucun article sélectionné."
-
-#: js/viewfeed.js:725
-#: js/viewfeed.js:753
-#: js/viewfeed.js:780
-#: js/viewfeed.js:843
-#: js/viewfeed.js:877
-#: js/viewfeed.js:997
-#: js/viewfeed.js:1040
-#: js/viewfeed.js:1093
-#: js/viewfeed.js:2091
-#: plugins/mailto/init.js:7
+msgstr[0] "%d article sélectionné"
+msgstr[1] "%d articles sélectionnés"
+
+#: js/viewfeed.js:725 js/viewfeed.js:753 js/viewfeed.js:780 js/viewfeed.js:843
+#: js/viewfeed.js:877 js/viewfeed.js:997 js/viewfeed.js:1040
+#: js/viewfeed.js:1093 js/viewfeed.js:2091 plugins/mailto/init.js:7
 #: plugins/mail/mail.js:7
 msgid "No articles are selected."
 msgstr "Aucun article sélectionné."
@@ -3469,8 +3378,11 @@ msgstr[0] "Restaurer %d article archivé ?"
 msgstr[1] "Restaurer %d articles archivés ?"
 
 #: js/viewfeed.js:1054
-msgid "Please note that unstarred articles might get purged on next feed update."
-msgstr "Veuillez noter que les articles non marqués risquent d'être purgés à la prochaine mise à jour du flux."
+msgid ""
+"Please note that unstarred articles might get purged on next feed update."
+msgstr ""
+"Veuillez noter que les articles non marqués risquent d'être purgés à la "
+"prochaine mise à jour du flux."
 
 #: js/viewfeed.js:1099
 msgid "Mark %d selected article in %s as read?"
@@ -3563,10 +3475,10 @@ msgstr "Charger plus..."
 
 #: plugins/embed_original/init.js:6
 msgid "Sorry, your browser does not support sandboxed iframes."
-msgstr "Malheureusement, votre navigateur ne supporte pas les iframes sécurisées."
+msgstr ""
+"Malheureusement, votre navigateur ne supporte pas les iframes sécurisées."
 
-#: plugins/mailto/init.js:21
-#: plugins/mail/mail.js:21
+#: plugins/mailto/init.js:21 plugins/mail/mail.js:21
 msgid "Forward article by email"
 msgstr "Transférer l'article par email"
 
@@ -3575,10 +3487,18 @@ msgid "Export Data"
 msgstr "Exporter les données"
 
 #: plugins/import_export/import_export.js:40
-msgid "Finished, exported %d article. You can download the data <a class='visibleLink' href='%u'>here</a>."
-msgid_plural "Finished, exported %d articles. You can download the data <a class='visibleLink' href='%u'>here</a>."
-msgstr[0] "Terminé, %d article exporté. Vous pouvez télécharger les données <a class='visibleLink' href='%u'>ici</a>."
-msgstr[1] "Terminé, %d articles exportés. Vous pouvez télécharger les données <a class='visibleLink' href='%u'>ici</a>."
+msgid ""
+"Finished, exported %d article. You can download the data <a "
+"class='visibleLink' href='%u'>here</a>."
+msgid_plural ""
+"Finished, exported %d articles. You can download the data <a "
+"class='visibleLink' href='%u'>here</a>."
+msgstr[0] ""
+"Terminé, %d article exporté. Vous pouvez télécharger les données <a "
+"class='visibleLink' href='%u'>ici</a>."
+msgstr[1] ""
+"Terminé, %d articles exportés. Vous pouvez télécharger les données <a "
+"class='visibleLink' href='%u'>ici</a>."
 
 #: plugins/import_export/import_export.js:93
 msgid "Data Import"
@@ -3616,8 +3536,7 @@ msgstr "Supprimer les instances sélectionnées ?"
 msgid "Removing selected instances..."
 msgstr "Suppression des instances sélectionnées..."
 
-#: plugins/instances/instances.js:139
-#: plugins/instances/instances.js:151
+#: plugins/instances/instances.js:139 plugins/instances/instances.js:151
 msgid "No instances are selected."
 msgstr "Aucune instance sélectionnée."
 
@@ -3630,9 +3549,12 @@ msgid "Share article by URL"
 msgstr "Partager l'article par URL"
 
 #: plugins/updater/updater.js:58
-#, fuzzy
-msgid "Backup your tt-rss directory before continuing. Please type 'yes' to continue."
-msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre dossier tt-rss avant de continuer. Tapez « yes » pour continuer."
+msgid ""
+"Backup your tt-rss directory before continuing. Please type 'yes' to "
+"continue."
+msgstr ""
+"Sauvegardez votre dossier tt-rss avant de continuer. Veuillez taper « yes » "
+"pour continuer."
 
 #~ msgid "Switch to digest..."
 #~ msgstr "Basculer en mode résumé..."
@@ -3653,7 +3575,8 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre
 #~ msgstr "Sélectionner un thème"
 
 #~ msgid "I have scanned the code and would like to enable OTP"
-#~ msgstr "J'ai scanné le code et je veux activer les mots de passe à usage unique"
+#~ msgstr ""
+#~ "J'ai scanné le code et je veux activer les mots de passe à usage unique"
 
 #~ msgid "close"
 #~ msgstr "fermer"
@@ -3661,8 +3584,12 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre
 #~ msgid "Playing..."
 #~ msgstr "Lecture..."
 
-#~ msgid "Could not upload file. You might need to adjust upload_max_filesize in PHP.ini (current value = %s)"
-#~ msgstr "Envoi du fichier impossible. Vous devriez peut-être modifier la valeur de upload_max_filesize dans PHP.ini (valeur courante : %s)"
+#~ msgid ""
+#~ "Could not upload file. You might need to adjust upload_max_filesize in "
+#~ "PHP.ini (current value = %s)"
+#~ msgstr ""
+#~ "Envoi du fichier impossible. Vous devriez peut-être modifier la valeur de "
+#~ "upload_max_filesize dans PHP.ini (valeur courante : %s)"
 
 #~ msgid "Default interval between feed updates"
 #~ msgstr "Intervalle par défaut entre les mises à jour de flux"
@@ -3682,8 +3609,12 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre
 #~ msgid "Please backup your database before proceeding."
 #~ msgstr "Merci de sauvegardez votre base de données avant de poursuivre."
 
-#~ msgid "Your Tiny Tiny RSS database needs update to the latest version (<b>%d</b> to <b>%d</b>)."
-#~ msgstr "La base de données de Tiny Tiny RSS a besoin d'être mise à jour (version <b>%d</b> à <b>%d</b>)."
+#~ msgid ""
+#~ "Your Tiny Tiny RSS database needs update to the latest version (<b>%d</b> "
+#~ "to <b>%d</b>)."
+#~ msgstr ""
+#~ "La base de données de Tiny Tiny RSS a besoin d'être mise à jour (version "
+#~ "<b>%d</b> à <b>%d</b>)."
 
 #~ msgid "Performing updates..."
 #~ msgstr "Exécution des mises à jour..."
@@ -3701,18 +3632,29 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre
 #~ msgstr "ERREUR !"
 
 #~ msgid "Finished. Performed <b>%d</b> update up to schema version <b>%d</b>."
-#~ msgid_plural "Finished. Performed <b>%d</b> updates up to schema version <b>%d</b>."
-#~ msgstr[0] "Terminé. <b>%d</b> modification a été effectuée pour parvenir à la version de schéma <b>%d</b>."
-#~ msgstr[1] "Terminé. <b>%d</b> modifications ont été effectuées pour parvenir à la version de schéma <b>%d</b>."
+#~ msgid_plural ""
+#~ "Finished. Performed <b>%d</b> updates up to schema version <b>%d</b>."
+#~ msgstr[0] ""
+#~ "Terminé. <b>%d</b> modification a été effectuée pour parvenir à la "
+#~ "version de schéma <b>%d</b>."
+#~ msgstr[1] ""
+#~ "Terminé. <b>%d</b> modifications ont été effectuées pour parvenir à la "
+#~ "version de schéma <b>%d</b>."
 
 #~ msgid "Your database schema is from a newer version of Tiny Tiny RSS."
-#~ msgstr "Votre schéma de base de données provient d'une version plus récente de Tiny Tiny RSS."
+#~ msgstr ""
+#~ "Votre schéma de base de données provient d'une version plus récente de "
+#~ "Tiny Tiny RSS."
 
 #~ msgid "Found schema version: <b>%d</b>, required: <b>%d</b>."
 #~ msgstr "Version du schéma trouvée : <b>%d</b>, requise : <b>%d</b>."
 
-#~ msgid "Schema upgrade impossible. Please update Tiny Tiny RSS files to the newer version and continue."
-#~ msgstr "Mise à jour du schéma impossible. Veuillez mettre à jour les fichiers de Tiny Tiny RSS vers une version plus récente et continuer."
+#~ msgid ""
+#~ "Schema upgrade impossible. Please update Tiny Tiny RSS files to the newer "
+#~ "version and continue."
+#~ msgstr ""
+#~ "Mise à jour du schéma impossible. Veuillez mettre à jour les fichiers de "
+#~ "Tiny Tiny RSS vers une version plus récente et continuer."
 
 #~ msgid "Mark feed as read"
 #~ msgstr "Marquer le flux comme lu"
@@ -3720,8 +3662,12 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre
 #~ msgid "Enable external API"
 #~ msgstr "Activer les API externes"
 
-#~ msgid "When this option is enabled, headlines in Special feeds and Labels are grouped by feeds"
-#~ msgstr "Avec cette option activée, les entêtes dans les flux spéciaux et par étiquettes sont regroupés par flux"
+#~ msgid ""
+#~ "When this option is enabled, headlines in Special feeds and Labels are "
+#~ "grouped by feeds"
+#~ msgstr ""
+#~ "Avec cette option activée, les entêtes dans les flux spéciaux et par "
+#~ "étiquettes sont regroupés par flux"
 
 #~ msgid "Title or Content"
 #~ msgstr "Titre ou contenu"
@@ -3747,8 +3693,15 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre
 #~ msgid "Modify score"
 #~ msgstr "Modifier le score"
 
-#~ msgid "This option is useful when you are reading several planet-type aggregators with partially colliding userbase. When disabled, it forces same posts from different feeds to appear only once."
-#~ msgstr "Cette option est utile si vous lisez des articles venant d'agrégateurs de type «planet», dans lesquels certains flux se recoupent largement. Lorsque cette option est désactivée, les articles en double sont affichés en un seul exemplaire."
+#~ msgid ""
+#~ "This option is useful when you are reading several planet-type "
+#~ "aggregators with partially colliding userbase. When disabled, it forces "
+#~ "same posts from different feeds to appear only once."
+#~ msgstr ""
+#~ "Cette option est utile si vous lisez des articles venant d'agrégateurs de "
+#~ "type «planet», dans lesquels certains flux se recoupent largement. "
+#~ "Lorsque cette option est désactivée, les articles en double sont affichés "
+#~ "en un seul exemplaire."
 
 #~ msgid "Date syntax appears to be correct:"
 #~ msgstr "La syntaxe des dates semble être correcte :"
@@ -3771,7 +3724,8 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre
 #~ msgstr "Marquer tous les articles visibles de %s comme lus ?"
 
 #~ msgid "Form secret key incorrect. Please enable cookies and try again."
-#~ msgstr "Clé de formulaire incorecte. Veuillez activer les cookies et réessayer."
+#~ msgstr ""
+#~ "Clé de formulaire incorecte. Veuillez activer les cookies et réessayer."
 
 #~ msgid "Score"
 #~ msgstr "Score"
@@ -3783,7 +3737,8 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre
 #~ msgstr "Activer les options voulues avec les cases à cocher sur la droite:"
 
 #~ msgid "New articles available in this feed (click to show)"
-#~ msgstr "Nouveaux articles disponibles dans ce flux (cliquer pour les afficher)"
+#~ msgstr ""
+#~ "Nouveaux articles disponibles dans ce flux (cliquer pour les afficher)"
 
 #~ msgid "Share on identi.ca"
 #~ msgstr "Partager sur identi.ca"
@@ -3815,8 +3770,12 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre
 #~ msgid "Back to feeds"
 #~ msgstr "Retour aux flux"
 
-#~ msgid "This will clear your stored authentication information for Twitter. Continue?"
-#~ msgstr "Cela va effacer les informations d'authentification pour Twitter. Voulez-vous continuer ?"
+#~ msgid ""
+#~ "This will clear your stored authentication information for Twitter. "
+#~ "Continue?"
+#~ msgstr ""
+#~ "Cela va effacer les informations d'authentification pour Twitter. Voulez-"
+#~ "vous continuer ?"
 
 #~ msgid "Finished: %d articles processed, %d imported, %d feeds created."
 #~ msgstr "Terminé : %d articles traités, %d importés, %d flux créés."
@@ -3847,7 +3806,8 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre
 #~ msgstr "Naviguer dans les articles"
 
 #~ msgid "Mark articles below/above active one as read"
-#~ msgstr "Marquer les articles au-dessous/au-dessus de l'article actif comme lus"
+#~ msgstr ""
+#~ "Marquer les articles au-dessous/au-dessus de l'article actif comme lus"
 
 #~ msgid "Scroll article content"
 #~ msgstr "Faire déflier le contenu de l'article"
@@ -3876,8 +3836,12 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre
 #~ msgid "Focus search (if present)"
 #~ msgstr "Focus sur la recherche (si affichée)"
 
-#~ msgid "<b>Note:</b> not all actions may be available, depending on Tiny Tiny RSS configuration and your access level."
-#~ msgstr "<b>Note :</b> certaines actions peuvent ne pas être disponibles, selon la configuration de Tiny Tiny RSS et vos permissions."
+#~ msgid ""
+#~ "<b>Note:</b> not all actions may be available, depending on Tiny Tiny RSS "
+#~ "configuration and your access level."
+#~ msgstr ""
+#~ "<b>Note :</b> certaines actions peuvent ne pas être disponibles, selon la "
+#~ "configuration de Tiny Tiny RSS et vos permissions."
 
 #~ msgid "Open article in new tab"
 #~ msgstr "Ouvrir les articles dans un nouvel onglet"
@@ -3943,7 +3907,9 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre
 #~ msgstr "S'inscrire via Twitter"
 
 #~ msgid "Could not connect to Twitter. Refresh the page or try again later."
-#~ msgstr "Impossible de se connecter à Twitter. Rafraichissez la page ou essayez à nouveau plus tard."
+#~ msgstr ""
+#~ "Impossible de se connecter à Twitter. Rafraichissez la page ou essayez à "
+#~ "nouveau plus tard."
 
 #~ msgid "Congratulations! You have successfully registered with Twitter."
 #~ msgstr "Félicitation ! Vous vous êtes inscrit via Twitter avec succès."
@@ -3964,7 +3930,8 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre
 #~ msgstr "Aucune catégorie de flux définie."
 
 #~ msgid "<b>Hint:</b> you can drag feeds and categories around."
-#~ msgstr "<b>Astuce :</b> vous pouvez faire glisser les flux et les catagories."
+#~ msgstr ""
+#~ "<b>Astuce :</b> vous pouvez faire glisser les flux et les catagories."
 
 #~ msgid "Subscribing using bookmarklet"
 #~ msgstr "S'abonner via bookmarklet"
@@ -3972,11 +3939,19 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre
 #~ msgid "Twitter"
 #~ msgstr "Twitter"
 
-#~ msgid "Before you can update your Twitter feeds, you must register this instance of Tiny Tiny RSS with Twitter.com."
-#~ msgstr "Avant de mettre à jour vos flux Twitter, vous devez enregistrer cette instance de Tiny Tiny RSS avec Twitter.com."
+#~ msgid ""
+#~ "Before you can update your Twitter feeds, you must register this instance "
+#~ "of Tiny Tiny RSS with Twitter.com."
+#~ msgstr ""
+#~ "Avant de mettre à jour vos flux Twitter, vous devez enregistrer cette "
+#~ "instance de Tiny Tiny RSS avec Twitter.com."
 
-#~ msgid "You have been successfully registered with Twitter.com and should be able to access your Twitter feeds."
-#~ msgstr "Vous vous êtes inscrit avec succès sur Twitter.com et vous devriez être en mesure d'accéder à vos flux Twitter."
+#~ msgid ""
+#~ "You have been successfully registered with Twitter.com and should be able "
+#~ "to access your Twitter feeds."
+#~ msgstr ""
+#~ "Vous vous êtes inscrit avec succès sur Twitter.com et vous devriez être "
+#~ "en mesure d'accéder à vos flux Twitter."
 
 #~ msgid "Register with Twitter.com"
 #~ msgstr "S'inscrire sur Twitter.com"
@@ -3993,8 +3968,12 @@ msgstr "La mise à jour en direct est expérimentale. Veuillez sauvegarder votre
 #~ msgid "Filter Test Results"
 #~ msgstr "Résultats du test du filtre"
 
-#~ msgid "When \"Mark as read\" button is clicked in toolbar, automatically open next feed with unread articles."
-#~ msgstr "Lorsque vous cliquez sur « Marquer comme lus », le prochain flux contenant des articles non lus est automatiquement affiché"
+#~ msgid ""
+#~ "When \"Mark as read\" button is clicked in toolbar, automatically open "
+#~ "next feed with unread articles."
+#~ msgstr ""
+#~ "Lorsque vous cliquez sur « Marquer comme lus », le prochain flux "
+#~ "contenant des articles non lus est automatiquement affiché"
 
 #~ msgid "Uses server timezone"
 #~ msgstr "Utilise le fuseau horaire du serveur"
index 768da061e43f2b24299250855e1bdb2d228ebdf5..e4537668d20726ee9183cc1300682cf2f33c212e 100644 (file)
Binary files a/locale/nl_NL/LC_MESSAGES/messages.mo and b/locale/nl_NL/LC_MESSAGES/messages.mo differ
index 71f588c7576fd58002ce4e1612f950a3cdb2ae6c..ded35bd5751a0ef9d2459347b0fa737dea26143c 100644 (file)
@@ -8,8 +8,8 @@ msgstr ""
 "Project-Id-Version: TT-RSS\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2013-04-29 15:58+0400\n"
-"PO-Revision-Date: 2013-03-23 11:28+0100\n"
-"Last-Translator: Dingoe <translations@gvmelle.com>\n"
+"PO-Revision-Date: 2013-05-02 13:55+0100\n"
+"Last-Translator: ArmyOfPirates\n"
 "Language-Team: translations <LL@li.org>\n"
 "Language: DUTCH\n"
 "MIME-Version: 1.0\n"
@@ -23,7 +23,7 @@ msgstr ""
 
 #: backend.php:73
 msgid "Use default"
-msgstr "Gebruik standaard"
+msgstr "Gebruik standaardwaarde"
 
 #: backend.php:74
 msgid "Never purge"
@@ -53,49 +53,39 @@ msgstr "3 maanden oud"
 msgid "Default interval"
 msgstr "Standaard interval"
 
-#: backend.php:83
-#: backend.php:93
+#: backend.php:83 backend.php:93
 msgid "Disable updates"
 msgstr "updates uitschakelen"
 
-#: backend.php:84
-#: backend.php:94
+#: backend.php:84 backend.php:94
 msgid "Each 15 minutes"
 msgstr "Elke 15 minuten"
 
-#: backend.php:85
-#: backend.php:95
+#: backend.php:85 backend.php:95
 msgid "Each 30 minutes"
 msgstr "Elke 30 minuten"
 
-#: backend.php:86
-#: backend.php:96
+#: backend.php:86 backend.php:96
 msgid "Hourly"
 msgstr "Ieder uur"
 
-#: backend.php:87
-#: backend.php:97
+#: backend.php:87 backend.php:97
 msgid "Each 4 hours"
 msgstr "Om de 4 uur"
 
-#: backend.php:88
-#: backend.php:98
+#: backend.php:88 backend.php:98
 msgid "Each 12 hours"
 msgstr "Om de 12 uur"
 
-#: backend.php:89
-#: backend.php:99
+#: backend.php:89 backend.php:99
 msgid "Daily"
 msgstr "Dagelijks"
 
-#: backend.php:90
-#: backend.php:100
+#: backend.php:90 backend.php:100
 msgid "Weekly"
 msgstr "Wekelijks"
 
-#: backend.php:103
-#: classes/pref/users.php:123
-#: classes/pref/system.php:44
+#: backend.php:103 classes/pref/users.php:123 classes/pref/system.php:44
 msgid "User"
 msgstr "Gebruiker"
 
@@ -108,25 +98,36 @@ msgid "Administrator"
 msgstr "Beheerder"
 
 #: errors.php:9
-msgid "This program requires XmlHttpRequest to function properly. Your browser doesn't seem to support it."
-msgstr "Dit programma vereist XmlHttpRequest om goed te functioneren. Uw browser lijkt dit niet te ondersteunen."
+msgid ""
+"This program requires XmlHttpRequest to function properly. Your browser "
+"doesn't seem to support it."
+msgstr ""
+"Dit programma vereist XmlHttpRequest om goed te functioneren. Uw browser "
+"lijkt dit niet te ondersteunen."
 
 #: errors.php:12
-msgid "This program requires cookies to function properly. Your browser doesn't seem to support them."
-msgstr "Dit programma vereist cookies om goed te functioneren.  Uw browser lijkt dit niet te ondersteunen."
+msgid ""
+"This program requires cookies to function properly. Your browser doesn't "
+"seem to support them."
+msgstr ""
+"Dit programma vereist cookies om goed te functioneren.  Uw browser lijkt dit "
+"niet te ondersteunen."
 
 #: errors.php:15
-#, fuzzy
 msgid "Backend sanity check failed."
-msgstr "Gezondheidscontrole server mislukt"
+msgstr "Gezondheidscontrole server is mislukt."
 
 #: errors.php:17
 msgid "Frontend sanity check failed."
 msgstr "Frontend gezondheidscontrole mislukt."
 
 #: errors.php:19
-msgid "Incorrect database schema version. &lt;a href='db-updater.php'&gt;Please update&lt;/a&gt;."
-msgstr "Onjuiste database schema versie. &lt;a href='db-updater.php'&gt;Bijwerken aub!&lt;/a&gt;."
+msgid ""
+"Incorrect database schema version. &lt;a href='db-updater.php'&gt;Please "
+"update&lt;/a&gt;."
+msgstr ""
+"Onjuiste database schema versie. &lt;a href='db-updater.php'&gt;Bijwerken "
+"aub!&lt;/a&gt;."
 
 #: errors.php:21
 msgid "Request not authorized."
@@ -137,8 +138,12 @@ msgid "No operation to perform."
 msgstr "Geen uit te voeren opdracht."
 
 #: errors.php:25
-msgid "Could not display feed: query failed. Please check label match syntax or local configuration."
-msgstr "Kon feed niet weergeven: de zoekopdracht is mislukt. Controleer aub de syntax van de labelzoektekst of de lokale configuratie. "
+msgid ""
+"Could not display feed: query failed. Please check label match syntax or "
+"local configuration."
+msgstr ""
+"Kon feed niet weergeven: de zoekopdracht is mislukt. Controleer aub de "
+"syntax van de labelzoektekst of de lokale configuratie. "
 
 #: errors.php:27
 msgid "Denied. Your access level is insufficient to access this page."
@@ -149,51 +154,29 @@ msgid "Configuration check failed"
 msgstr "Configuratiecontrole mislukt"
 
 #: errors.php:31
-#, fuzzy
-msgid "Your version of MySQL is not currently supported. Please see official site for more information."
+msgid ""
+"Your version of MySQL is not currently supported. Please see official site "
+"for more information."
 msgstr ""
-"Uw versie van MySQL wordt niet ondersteund. Zie de\n"
-"\t\tofficiële website voor meer informatie."
+"Uw versie van MySQL wordt niet ondersteund. Zie de officiële website voor "
+"meer informatie."
 
 #: errors.php:35
 msgid "SQL escaping test failed, check your database and PHP configuration"
-msgstr "SQL escaping test mislukt. Controleer uw database en de PHP configuratie"
-
-#: index.php:128
-#: index.php:145
-#: index.php:265
-#: prefs.php:98
-#: classes/backend.php:5
-#: classes/pref/labels.php:296
-#: classes/pref/filters.php:680
-#: classes/pref/feeds.php:1388
-#: plugins/digest/digest_body.php:61
-#: js/feedlist.js:128
-#: js/feedlist.js:439
-#: js/functions.js:446
-#: js/functions.js:784
-#: js/functions.js:1194
-#: js/functions.js:1330
-#: js/functions.js:1642
-#: js/prefs.js:86
-#: js/prefs.js:576
-#: js/prefs.js:666
-#: js/prefs.js:867
-#: js/prefs.js:1454
-#: js/prefs.js:1507
-#: js/prefs.js:1566
-#: js/prefs.js:1583
-#: js/prefs.js:1599
-#: js/prefs.js:1615
-#: js/prefs.js:1634
-#: js/prefs.js:1807
-#: js/prefs.js:1823
-#: js/tt-rss.js:506
-#: js/tt-rss.js:523
-#: js/viewfeed.js:820
-#: js/viewfeed.js:1249
-#: plugins/import_export/import_export.js:17
-#: plugins/updater/updater.js:17
+msgstr ""
+"SQL escaping test mislukt. Controleer uw database en de PHP configuratie"
+
+#: index.php:128 index.php:145 index.php:265 prefs.php:98
+#: classes/backend.php:5 classes/pref/labels.php:296
+#: classes/pref/filters.php:680 classes/pref/feeds.php:1388
+#: plugins/digest/digest_body.php:61 js/feedlist.js:128 js/feedlist.js:439
+#: js/functions.js:446 js/functions.js:784 js/functions.js:1194
+#: js/functions.js:1330 js/functions.js:1642 js/prefs.js:86 js/prefs.js:576
+#: js/prefs.js:666 js/prefs.js:867 js/prefs.js:1454 js/prefs.js:1507
+#: js/prefs.js:1566 js/prefs.js:1583 js/prefs.js:1599 js/prefs.js:1615
+#: js/prefs.js:1634 js/prefs.js:1807 js/prefs.js:1823 js/tt-rss.js:506
+#: js/tt-rss.js:523 js/viewfeed.js:820 js/viewfeed.js:1249
+#: plugins/import_export/import_export.js:17 plugins/updater/updater.js:17
 msgid "Loading, please wait..."
 msgstr "Aan 't laden, even wachten aub..."
 
@@ -213,36 +196,29 @@ msgstr "Aangepast"
 msgid "All Articles"
 msgstr "Alle artikelen"
 
-#: index.php:167
-#: include/functions.php:2007
-#: classes/feeds.php:98
+#: index.php:167 include/functions.php:2007 classes/feeds.php:98
 msgid "Starred"
 msgstr "Met ster"
 
-#: index.php:168
-#: include/functions.php:2008
-#: classes/feeds.php:99
+#: index.php:168 include/functions.php:2008 classes/feeds.php:99
 msgid "Published"
 msgstr "Gepubliceerd"
 
-#: index.php:169
-#: classes/feeds.php:85
-#: classes/feeds.php:97
+#: index.php:169 classes/feeds.php:85 classes/feeds.php:97
 msgid "Unread"
 msgstr "Ongelezen"
 
 #: index.php:170
-#, fuzzy
 msgid "Unread First"
-msgstr "Ongelezen"
+msgstr "Ongelezen eerst"
 
 #: index.php:171
 msgid "With Note"
-msgstr ""
+msgstr "Met notitie"
 
 #: index.php:172
 msgid "Ignore Scoring"
-msgstr "Score negeren"
+msgstr "Scores negeren"
 
 #: index.php:175
 msgid "Sort articles"
@@ -254,42 +230,37 @@ msgstr "Standaard"
 
 #: index.php:179
 msgid "Newest first"
-msgstr ""
+msgstr "Nieuwste eerst"
 
 #: index.php:180
 msgid "Oldest first"
-msgstr ""
+msgstr "Oudste eerst"
 
 #: index.php:181
 msgid "Title"
 msgstr "Titel"
 
-#: index.php:185
-#: index.php:233
-#: include/functions.php:1997
-#: classes/feeds.php:103
-#: classes/feeds.php:441
-#: js/FeedTree.js:128
-#: js/FeedTree.js:156
-#: plugins/digest/digest.js:647
+#: index.php:185 index.php:233 include/functions.php:1997
+#: classes/feeds.php:103 classes/feeds.php:441 js/FeedTree.js:128
+#: js/FeedTree.js:156 plugins/digest/digest.js:647
 msgid "Mark as read"
 msgstr "Markeren als gelezen"
 
 #: index.php:188
 msgid "Older than one day"
-msgstr ""
+msgstr "Ouder dan een dag"
 
 #: index.php:191
 msgid "Older than one week"
-msgstr ""
+msgstr "Ouder dan een week"
 
 #: index.php:194
 msgid "Older than two weeks"
-msgstr ""
+msgstr "Ouder dan twee weken"
 
 #: index.php:210
 msgid "Communication problem with server."
-msgstr "communicatieprobleem met de server."
+msgstr "Communicatieprobleem met de server."
 
 #: index.php:218
 msgid "New version of Tiny Tiny RSS is available!"
@@ -305,14 +276,13 @@ msgstr "Voorkeuren…"
 
 #: index.php:226
 msgid "Search..."
-msgstr "zoeken..."
+msgstr "Zoeken..."
 
 #: index.php:227
 msgid "Feed actions:"
 msgstr "Feed acties:"
 
-#: index.php:228
-#: classes/handler/public.php:559
+#: index.php:228 classes/handler/public.php:559
 msgid "Subscribe to feed..."
 msgstr "Abonneren op feed..."
 
@@ -324,9 +294,7 @@ msgstr "Bewerk deze feed..."
 msgid "Rescore feed"
 msgstr "Feed opnieuw score geven"
 
-#: index.php:231
-#: classes/pref/feeds.php:759
-#: classes/pref/feeds.php:1340
+#: index.php:231 classes/pref/feeds.php:759 classes/pref/feeds.php:1340
 #: js/PrefFeedTree.js:73
 msgid "Unsubscribe"
 msgstr "Abonnement opzeggen"
@@ -341,10 +309,9 @@ msgstr "Toon/Verberg gelezen feeds"
 
 #: index.php:235
 msgid "Other actions:"
-msgstr "andere acties:"
+msgstr "Andere acties:"
 
-#: index.php:236
-#: include/functions.php:1983
+#: index.php:236 include/functions.php:1983
 msgid "Toggle widescreen mode"
 msgstr "Wisselen breedbeeld modus"
 
@@ -354,26 +321,23 @@ msgstr "Selectie met tags..."
 
 #: index.php:238
 msgid "Create label..."
-msgstr "Aanmaken label…"
+msgstr "Label aanmaken…"
 
 #: index.php:239
 msgid "Create filter..."
-msgstr "Aanmaken filter…"
+msgstr "Filter aanmaken…"
 
 #: index.php:240
 msgid "Keyboard shortcuts help"
 msgstr "Hulp bij sneltoetscombinaties"
 
-#: index.php:249
-#: plugins/digest/digest_body.php:75
+#: index.php:249 plugins/digest/digest_body.php:75
 #: plugins/mobile/mobile-functions.php:65
 #: plugins/mobile/mobile-functions.php:240
 msgid "Logout"
 msgstr "Afmelden"
 
-#: prefs.php:33
-#: prefs.php:116
-#: include/functions.php:2010
+#: prefs.php:33 prefs.php:116 include/functions.php:2010
 #: classes/pref/prefs.php:440
 msgid "Preferences"
 msgstr "Voorkeuren"
@@ -386,23 +350,17 @@ msgstr "Sneltoetscombinaties"
 msgid "Exit preferences"
 msgstr "Verlaat voorkeuren"
 
-#: prefs.php:119
-#: classes/pref/feeds.php:107
-#: classes/pref/feeds.php:1266
+#: prefs.php:119 classes/pref/feeds.php:107 classes/pref/feeds.php:1266
 #: classes/pref/feeds.php:1329
 msgid "Feeds"
 msgstr "Feeds"
 
-#: prefs.php:122
-#: classes/pref/filters.php:156
+#: prefs.php:122 classes/pref/filters.php:156
 msgid "Filters"
 msgstr "Filters"
 
-#: prefs.php:125
-#: include/functions.php:1176
-#: include/functions.php:1831
-#: classes/pref/labels.php:90
-#: plugins/mobile/mobile-functions.php:201
+#: prefs.php:125 include/functions.php:1176 include/functions.php:1831
+#: classes/pref/labels.php:90 plugins/mobile/mobile-functions.php:201
 msgid "Labels"
 msgstr "Labels"
 
@@ -411,40 +369,36 @@ msgid "Users"
 msgstr "Gebruikers"
 
 #: prefs.php:132
-#, fuzzy
 msgid "System"
-msgstr "Systeem plug-ins"
+msgstr "Systeem"
 
-#: register.php:184
-#: include/login_form.php:238
+#: register.php:184 include/login_form.php:238
 msgid "Create new account"
-msgstr "Aanmaken nieuw account"
+msgstr "Maak nieuw account aan"
 
 #: register.php:190
 msgid "New user registrations are administratively disabled."
-msgstr "Het registreren van nieuwe gebruikers is door de administrateur uitgeschakeld."
-
-#: register.php:194
-#: register.php:239
-#: register.php:252
-#: register.php:267
-#: register.php:286
-#: register.php:334
-#: register.php:344
-#: register.php:356
-#: classes/handler/public.php:629
-#: classes/handler/public.php:717
-#: classes/handler/public.php:799
-#: classes/handler/public.php:874
-#: classes/handler/public.php:888
-#: classes/handler/public.php:895
+msgstr ""
+"Het registreren van nieuwe gebruikers is door de beheerder uitgeschakeld."
+
+#: register.php:194 register.php:239 register.php:252 register.php:267
+#: register.php:286 register.php:334 register.php:344 register.php:356
+#: classes/handler/public.php:629 classes/handler/public.php:717
+#: classes/handler/public.php:799 classes/handler/public.php:874
+#: classes/handler/public.php:888 classes/handler/public.php:895
 #: classes/handler/public.php:920
 msgid "Return to Tiny Tiny RSS"
 msgstr "Ga terug naar Tiny Tiny RSS"
 
 #: register.php:215
-msgid "Your temporary password will be sent to the specified email. Accounts, which were not logged in once, are erased automatically 24 hours after temporary password is sent."
-msgstr "Uw tijdelijke wachtwoord wordt naar het vermelde e-mailadres verstuurd. Accounts waarin niet wordt ingelogd, worden automatisch 24 uur na het verzenden van het tijdelijk wachtwoord verwijderd."
+msgid ""
+"Your temporary password will be sent to the specified email. Accounts, which "
+"were not logged in once, are erased automatically 24 hours after temporary "
+"password is sent."
+msgstr ""
+"Uw tijdelijke wachtwoord wordt naar het vermelde e-mailadres verstuurd. "
+"Accounts waarin niet wordt ingelogd, worden automatisch 24 uur na het "
+"verzenden van het tijdelijk wachtwoord verwijderd."
 
 #: register.php:221
 msgid "Desired login:"
@@ -452,17 +406,15 @@ msgstr "Gewenst loginID:"
 
 #: register.php:224
 msgid "Check availability"
-msgstr "controleer beschikbaarheid"
+msgstr "Controleer beschikbaarheid"
 
-#: register.php:226
-#: classes/handler/public.php:757
+#: register.php:226 classes/handler/public.php:757
 msgid "Email:"
 msgstr "E-mail:"
 
-#: register.php:229
-#: classes/handler/public.php:762
+#: register.php:229 classes/handler/public.php:762
 msgid "How much is two plus two:"
-msgstr "hoeveel is twee plus twee:"
+msgstr "Hoeveel is twee plus twee:"
 
 #: register.php:232
 msgid "Submit registration"
@@ -478,7 +430,7 @@ msgstr "Sorry, deze naam is al in gebruik."
 
 #: register.php:284
 msgid "Registration failed."
-msgstr "de registratie is mislukt."
+msgstr "Registratie is mislukt."
 
 #: register.php:331
 msgid "Account created successfully."
@@ -492,35 +444,29 @@ msgstr "Nieuwe gebruikersregistratie is op dit moment niet mogelijk."
 msgid "Tiny Tiny RSS data update script."
 msgstr "Tiny Tiny RSS data update script."
 
-#: include/digest.php:109
-#: include/functions.php:1185
-#: include/functions.php:1732
-#: include/functions.php:1817
-#: include/functions.php:1839
-#: classes/opml.php:416
-#: classes/pref/feeds.php:220
+#: include/digest.php:109 include/functions.php:1185
+#: include/functions.php:1732 include/functions.php:1817
+#: include/functions.php:1839 classes/opml.php:416 classes/pref/feeds.php:220
 msgid "Uncategorized"
 msgstr "Ongecategoriseerd"
 
 #: include/feedbrowser.php:83
-#, fuzzy, php-format
+#, php-format
 msgid "%d archived article"
 msgid_plural "%d archived articles"
-msgstr[0] "%d gearchiveerde artikelen"
+msgstr[0] "%d gearchiveerd artikel"
 msgstr[1] "%d gearchiveerde artikelen"
 
 #: include/feedbrowser.php:107
 msgid "No feeds found."
 msgstr "Geen feeds gevonden."
 
-#: include/functions.php:1174
-#: include/functions.php:1829
+#: include/functions.php:1174 include/functions.php:1829
 #: plugins/mobile/mobile-functions.php:174
 msgid "Special"
 msgstr "Speciaal"
 
-#: include/functions.php:1681
-#: classes/feeds.php:1110
+#: include/functions.php:1681 classes/feeds.php:1110
 #: classes/pref/filters.php:427
 msgid "All feeds"
 msgstr "Alle feeds"
@@ -537,8 +483,7 @@ msgstr "Gepubliceerde artikelen"
 msgid "Fresh articles"
 msgstr "Nieuwe artikelen"
 
-#: include/functions.php:1890
-#: include/functions.php:2005
+#: include/functions.php:1890 include/functions.php:2005
 msgid "All articles"
 msgstr "Alle artikelen"
 
@@ -579,18 +524,16 @@ msgid "Open previous article (don't scroll long articles)"
 msgstr "Open vorig artikel (lange artikelen niet scrollen)"
 
 #: include/functions.php:1964
-#, fuzzy
 msgid "Move to next article (don't expand or mark read)"
-msgstr "Open volgend artikel (lange artikelen niet scrollen)"
+msgstr "Open volgend artikel (niet uitklappen of markeren als gelezen)"
 
 #: include/functions.php:1965
-#, fuzzy
 msgid "Move to previous article (don't expand or mark read)"
-msgstr "Open vorig artikel (lange artikelen niet scrollen)"
+msgstr "Open vorig artikel (niet uitklappen of markeren als gelezen)"
 
 #: include/functions.php:1966
 msgid "Show search dialog"
-msgstr "toon zoekdialoogvenster"
+msgstr "Toon zoekdialoogvenster"
 
 #: include/functions.php:1967
 msgid "Article"
@@ -600,13 +543,11 @@ msgstr "Artikel"
 msgid "Toggle starred"
 msgstr "In/uitschakelen sterren"
 
-#: include/functions.php:1969
-#: js/viewfeed.js:1931
+#: include/functions.php:1969 js/viewfeed.js:1931
 msgid "Toggle published"
 msgstr "In/uitschakelen gepubliceerd"
 
-#: include/functions.php:1970
-#: js/viewfeed.js:1909
+#: include/functions.php:1970 js/viewfeed.js:1909
 msgid "Toggle unread"
 msgstr "In/uitschakelen gelezen"
 
@@ -624,17 +565,15 @@ msgstr "Gelezene negeren"
 
 #: include/functions.php:1974
 msgid "Open in new window"
-msgstr "open in nieuw venster"
+msgstr "Open in nieuw venster"
 
-#: include/functions.php:1975
-#: js/viewfeed.js:1950
+#: include/functions.php:1975 js/viewfeed.js:1950
 msgid "Mark below as read"
 msgstr "Hieronder markeren als gelezen"
 
-#: include/functions.php:1976
-#: js/viewfeed.js:1944
+#: include/functions.php:1976 js/viewfeed.js:1944
 msgid "Mark above as read"
-msgstr "hierboven markeren als gelezen"
+msgstr "Hierboven markeren als gelezen"
 
 #: include/functions.php:1977
 msgid "Scroll down"
@@ -657,12 +596,10 @@ msgid "Close/collapse article"
 msgstr "Sluiten/inklappen artikel"
 
 #: include/functions.php:1982
-#, fuzzy
 msgid "Toggle article expansion (combined mode)"
-msgstr "In/uitschakelen gecombineerde modus"
+msgstr "In/uitschakelen artikel uitklappen (gecombineerde modus)"
 
-#: include/functions.php:1984
-#: plugins/embed_original/init.php:31
+#: include/functions.php:1984 plugins/embed_original/init.php:31
 msgid "Toggle embed original"
 msgstr "In/uitschakelen origineel  insluiten"
 
@@ -688,14 +625,13 @@ msgstr "Selecteer gepubliceerde"
 
 #: include/functions.php:1990
 msgid "Invert selection"
-msgstr "Omdraaien selectie"
+msgstr "Keer selectie om"
 
 #: include/functions.php:1991
 msgid "Deselect everything"
 msgstr "Deselecteer alles"
 
-#: include/functions.php:1992
-#: classes/pref/feeds.php:553
+#: include/functions.php:1992 classes/pref/feeds.php:553
 #: classes/pref/feeds.php:796
 msgid "Feed"
 msgstr "Feed"
@@ -708,14 +644,11 @@ msgstr "Ververs huidige feed"
 msgid "Un/hide read feeds"
 msgstr "Toon/Verberg gelezen feeds"
 
-#: include/functions.php:1995
-#: classes/pref/feeds.php:1332
+#: include/functions.php:1995 classes/pref/feeds.php:1332
 msgid "Subscribe to feed"
 msgstr "Abonneer op feed"
 
-#: include/functions.php:1996
-#: js/FeedTree.js:135
-#: js/PrefFeedTree.js:67
+#: include/functions.php:1996 js/FeedTree.js:135 js/PrefFeedTree.js:67
 msgid "Edit feed"
 msgstr "Bewerk feed"
 
@@ -727,8 +660,7 @@ msgstr "Draai kopteksten om"
 msgid "Debug feed update"
 msgstr "Debug feed update"
 
-#: include/functions.php:2000
-#: js/FeedTree.js:178
+#: include/functions.php:2000 js/FeedTree.js:178
 msgid "Mark all feeds as read"
 msgstr "Markeer alle feeds als gelezen"
 
@@ -741,9 +673,8 @@ msgid "Toggle combined mode"
 msgstr "In/uitschakelen gecombineerde modus"
 
 #: include/functions.php:2003
-#, fuzzy
 msgid "Toggle auto expand in combined mode"
-msgstr "In/uitschakelen gecombineerde modus"
+msgstr "In/uitschakelen automatisch uitklappen in gecombineerde modus"
 
 #: include/functions.php:2004
 msgid "Go to"
@@ -753,9 +684,7 @@ msgstr "Ga naar"
 msgid "Fresh"
 msgstr "Nieuw"
 
-#: include/functions.php:2009
-#: js/tt-rss.js:456
-#: js/tt-rss.js:615
+#: include/functions.php:2009 js/tt-rss.js:456 js/tt-rss.js:615
 msgid "Tag cloud"
 msgstr "Tag wolk"
 
@@ -763,15 +692,13 @@ msgstr "Tag wolk"
 msgid "Other"
 msgstr "Andere"
 
-#: include/functions.php:2012
-#: classes/pref/labels.php:281
+#: include/functions.php:2012 classes/pref/labels.php:281
 msgid "Create label"
-msgstr "Aanmaken label"
+msgstr "Maak label"
 
-#: include/functions.php:2013
-#: classes/pref/filters.php:654
+#: include/functions.php:2013 classes/pref/filters.php:654
 msgid "Create filter"
-msgstr "Aanmaken filter"
+msgstr "Maak filter"
 
 #: include/functions.php:2014
 msgid "Un/collapse sidebar"
@@ -784,53 +711,37 @@ msgstr "Toon helpdialoogvenster"
 #: include/functions.php:2536
 #, php-format
 msgid "Search results: %s"
-msgstr "zoekresultaten: %s"
+msgstr "Zoekresultaten: %s"
 
 #: include/functions.php:3133
 msgid " - "
 msgstr " - "
 
-#: include/functions.php:3155
-#: include/functions.php:3431
+#: include/functions.php:3155 include/functions.php:3431
 #: classes/article.php:281
 msgid "no tags"
 msgstr "geen tags"
 
-#: include/functions.php:3165
-#: classes/feeds.php:689
+#: include/functions.php:3165 classes/feeds.php:689
 msgid "Edit tags for this article"
 msgstr "Bewerk tags voor dit artikel"
 
-#: include/functions.php:3197
-#: classes/feeds.php:641
+#: include/functions.php:3197 classes/feeds.php:641
 msgid "Originally from:"
 msgstr "Oorspronkelijk uit:"
 
-#: include/functions.php:3210
-#: classes/feeds.php:654
-#: classes/pref/feeds.php:572
+#: include/functions.php:3210 classes/feeds.php:654 classes/pref/feeds.php:572
 msgid "Feed URL"
 msgstr "Feed URL"
 
-#: include/functions.php:3242
-#: classes/dlg.php:37
-#: classes/dlg.php:60
-#: classes/dlg.php:93
-#: classes/dlg.php:159
-#: classes/dlg.php:190
-#: classes/dlg.php:217
-#: classes/dlg.php:250
-#: classes/dlg.php:262
-#: classes/backend.php:105
-#: classes/pref/users.php:99
-#: classes/pref/filters.php:147
-#: classes/pref/prefs.php:1100
-#: classes/pref/feeds.php:1641
-#: classes/pref/feeds.php:1713
-#: plugins/import_export/init.php:405
-#: plugins/import_export/init.php:450
-#: plugins/googlereaderimport/init.php:193
-#: plugins/share/init.php:65
+#: include/functions.php:3242 classes/dlg.php:37 classes/dlg.php:60
+#: classes/dlg.php:93 classes/dlg.php:159 classes/dlg.php:190
+#: classes/dlg.php:217 classes/dlg.php:250 classes/dlg.php:262
+#: classes/backend.php:105 classes/pref/users.php:99
+#: classes/pref/filters.php:147 classes/pref/prefs.php:1100
+#: classes/pref/feeds.php:1641 classes/pref/feeds.php:1713
+#: plugins/import_export/init.php:405 plugins/import_export/init.php:450
+#: plugins/googlereaderimport/init.php:193 plugins/share/init.php:65
 #: plugins/updater/init.php:368
 msgid "Close this window"
 msgstr "Sluit dit venster"
@@ -841,7 +752,7 @@ msgstr "(bewerk notitie)"
 
 #: include/functions.php:3693
 msgid "unknown type"
-msgstr "Onbekend type"
+msgstr "onbekend type"
 
 #: include/functions.php:3749
 msgid "Attachments"
@@ -850,34 +761,28 @@ msgstr "Bijlagen"
 #: include/functions.php:4248
 #, php-format
 msgid "LibXML error %s at line %d (column %d): %s"
-msgstr ""
+msgstr "LibXML fout %s op regel %d (kolom %d): %s"
 
-#: include/login_form.php:183
-#: classes/handler/public.php:475
-#: classes/handler/public.php:752
-#: plugins/mobile/login_form.php:40
+#: include/login_form.php:183 classes/handler/public.php:475
+#: classes/handler/public.php:752 plugins/mobile/login_form.php:40
 msgid "Login:"
 msgstr "Aanmelden:"
 
-#: include/login_form.php:194
-#: classes/handler/public.php:478
+#: include/login_form.php:194 classes/handler/public.php:478
 #: plugins/mobile/login_form.php:45
 msgid "Password:"
 msgstr "Wachtwoord:"
 
 #: include/login_form.php:199
-#, fuzzy
 msgid "I forgot my password"
-msgstr "Onjuist wachtwoord"
+msgstr "Ik ben mijn wachtwoord vergeten"
 
 #: include/login_form.php:205
 msgid "Profile:"
 msgstr "Profiel:"
 
-#: include/login_form.php:209
-#: classes/handler/public.php:233
-#: classes/rpc.php:63
-#: classes/pref/prefs.php:1036
+#: include/login_form.php:209 classes/handler/public.php:233
+#: classes/rpc.php:63 classes/pref/prefs.php:1036
 msgid "Default profile"
 msgstr "Standaard profiel"
 
@@ -888,13 +793,13 @@ msgstr "Gebruik minder dataverkeer"
 #: include/login_form.php:221
 msgid "Does not display images in articles, reduces automatic refreshes."
 msgstr ""
+"Geeft geen afbeeldingen weer in artikelen, vermindert automatisch herladen."
 
 #: include/login_form.php:229
 msgid "Remember me"
-msgstr ""
+msgstr "Onthoud mij"
 
-#: include/login_form.php:235
-#: classes/handler/public.php:483
+#: include/login_form.php:235 classes/handler/public.php:483
 #: plugins/mobile/login_form.php:28
 msgid "Log in"
 msgstr "Aanmelden"
@@ -911,44 +816,28 @@ msgstr "Artikel niet gevonden."
 msgid "Tags for this article (separated by commas):"
 msgstr "Tags voor dit artikel (komma gescheiden):"
 
-#: classes/article.php:204
-#: classes/pref/users.php:176
-#: classes/pref/labels.php:79
-#: classes/pref/filters.php:405
-#: classes/pref/prefs.php:982
-#: classes/pref/feeds.php:775
-#: classes/pref/feeds.php:923
-#: plugins/nsfw/init.php:83
-#: plugins/note/init.php:51
-#: plugins/instances/init.php:245
+#: classes/article.php:204 classes/pref/users.php:176
+#: classes/pref/labels.php:79 classes/pref/filters.php:405
+#: classes/pref/prefs.php:982 classes/pref/feeds.php:775
+#: classes/pref/feeds.php:923 plugins/nsfw/init.php:83
+#: plugins/note/init.php:51 plugins/instances/init.php:245
 msgid "Save"
 msgstr "Opslaan"
 
-#: classes/article.php:206
-#: classes/handler/public.php:452
-#: classes/handler/public.php:486
-#: classes/feeds.php:1037
-#: classes/feeds.php:1089
-#: classes/feeds.php:1149
-#: classes/pref/users.php:178
-#: classes/pref/labels.php:81
-#: classes/pref/filters.php:408
-#: classes/pref/filters.php:803
-#: classes/pref/filters.php:879
-#: classes/pref/filters.php:946
-#: classes/pref/prefs.php:984
-#: classes/pref/feeds.php:776
-#: classes/pref/feeds.php:926
-#: classes/pref/feeds.php:1853
-#: plugins/mail/init.php:124
-#: plugins/note/init.php:53
-#: plugins/instances/init.php:248
+#: classes/article.php:206 classes/handler/public.php:452
+#: classes/handler/public.php:486 classes/feeds.php:1037
+#: classes/feeds.php:1089 classes/feeds.php:1149 classes/pref/users.php:178
+#: classes/pref/labels.php:81 classes/pref/filters.php:408
+#: classes/pref/filters.php:803 classes/pref/filters.php:879
+#: classes/pref/filters.php:946 classes/pref/prefs.php:984
+#: classes/pref/feeds.php:776 classes/pref/feeds.php:926
+#: classes/pref/feeds.php:1853 plugins/mail/init.php:124
+#: plugins/note/init.php:53 plugins/instances/init.php:248
 #: plugins/instances/init.php:436
 msgid "Cancel"
 msgstr "Annuleren"
 
-#: classes/handler/public.php:416
-#: plugins/bookmarklets/init.php:36
+#: classes/handler/public.php:416 plugins/bookmarklets/init.php:36
 msgid "Share with Tiny Tiny RSS"
 msgstr "Deel met Tiny Tiny RSS"
 
@@ -956,10 +845,8 @@ msgstr "Deel met Tiny Tiny RSS"
 msgid "Title:"
 msgstr "Titel:"
 
-#: classes/handler/public.php:426
-#: classes/pref/feeds.php:570
-#: classes/pref/feeds.php:811
-#: plugins/instances/init.php:212
+#: classes/handler/public.php:426 classes/pref/feeds.php:570
+#: classes/pref/feeds.php:811 plugins/instances/init.php:212
 #: plugins/instances/init.php:401
 msgid "URL:"
 msgstr "URL:"
@@ -988,79 +875,71 @@ msgstr "Niet ingelogd"
 msgid "Incorrect username or password"
 msgstr "Onjuiste gebruikersnaam of wachtwoord"
 
-#: classes/handler/public.php:565
-#: classes/handler/public.php:662
+#: classes/handler/public.php:565 classes/handler/public.php:662
 #, php-format
 msgid "Already subscribed to <b>%s</b>."
 msgstr "Reeds geabonneerd op <b>%s</b>."
 
-#: classes/handler/public.php:568
-#: classes/handler/public.php:653
+#: classes/handler/public.php:568 classes/handler/public.php:653
 #, php-format
 msgid "Subscribed to <b>%s</b>."
 msgstr "Geabonneerd op  <b>%s</b>."
 
-#: classes/handler/public.php:571
-#: classes/handler/public.php:656
+#: classes/handler/public.php:571 classes/handler/public.php:656
 #, php-format
 msgid "Could not subscribe to <b>%s</b>."
 msgstr "Kon niet abonneren op  <b>%s</b>."
 
-#: classes/handler/public.php:574
-#: classes/handler/public.php:659
+#: classes/handler/public.php:574 classes/handler/public.php:659
 #, php-format
 msgid "No feeds found in <b>%s</b>."
 msgstr "Geen feeds gevonden in <b>%s</b>."
 
-#: classes/handler/public.php:577
-#: classes/handler/public.php:665
+#: classes/handler/public.php:577 classes/handler/public.php:665
 msgid "Multiple feed URLs found."
 msgstr "Meerdere feed-URL's gevonden."
 
-#: classes/handler/public.php:581
-#: classes/handler/public.php:670
+#: classes/handler/public.php:581 classes/handler/public.php:670
 #, php-format
 msgid "Could not subscribe to <b>%s</b>.<br>Can't download the Feed URL."
 msgstr "Kon niet abonneren op  <b>%s</b>.<br>Kon de feed URL niet downloaden."
 
-#: classes/handler/public.php:599
-#: classes/handler/public.php:688
+#: classes/handler/public.php:599 classes/handler/public.php:688
 msgid "Subscribe to selected feed"
 msgstr "Abonneren op de geselecteerde feed"
 
-#: classes/handler/public.php:624
-#: classes/handler/public.php:712
+#: classes/handler/public.php:624 classes/handler/public.php:712
 msgid "Edit subscription options"
 msgstr "Bewerk abonnement opties"
 
 #: classes/handler/public.php:739
-#, fuzzy
 msgid "Password recovery"
-msgstr "Wachtwoord"
+msgstr "Wachtwoordherstel"
 
 #: classes/handler/public.php:745
-msgid "You will need to provide valid account name and email. New password will be sent on your email address."
+msgid ""
+"You will need to provide valid account name and email. New password will be "
+"sent on your email address."
 msgstr ""
+"Je moet een geldige naam en emailadres opgeven. Het nieuwe wachtwoord wordt "
+"naar je emailadres verzonden."
 
-#: classes/handler/public.php:767
-#: classes/pref/users.php:360
+#: classes/handler/public.php:767 classes/pref/users.php:360
 msgid "Reset password"
 msgstr "Herstel wachtwoord"
 
 #: classes/handler/public.php:777
 msgid "Some of the required form parameters are missing or incorrect."
-msgstr ""
+msgstr "Sommige vereiste velden ontbreken of zijn onjuist."
 
-#: classes/handler/public.php:781
-#: classes/handler/public.php:807
+#: classes/handler/public.php:781 classes/handler/public.php:807
 #: plugins/digest/digest_body.php:67
-#, fuzzy
 msgid "Go back"
-msgstr "Terugzetten"
+msgstr "Ga terug"
 
 #: classes/handler/public.php:803
 msgid "Sorry, login and email combination not found."
-msgstr ""
+msgstr "Sorry, deze combinatie van naam en wachtwoord is onbekend."
 
 #: classes/handler/public.php:823
 msgid "Your access level is insufficient to run this script."
@@ -1075,30 +954,44 @@ msgid "Perform updates"
 msgstr "Voor de updates uit"
 
 #: classes/dlg.php:16
-msgid "If you have imported labels and/or filters, you might need to reload preferences to see your new data."
-msgstr "Indien u labels en/of filters heeft geïmporteerd moet u waarschijnlijk te voorkeuren herladen om uw bijgewerkte gegevens te zien."
+msgid ""
+"If you have imported labels and/or filters, you might need to reload "
+"preferences to see your new data."
+msgstr ""
+"Indien u labels en/of filters heeft geïmporteerd moet u waarschijnlijk te "
+"voorkeuren herladen om uw bijgewerkte gegevens te zien."
 
 #: classes/dlg.php:48
 msgid "Your Public OPML URL is:"
 msgstr "Uw publieke OPML URL is:"
 
-#: classes/dlg.php:57
-#: classes/dlg.php:214
+#: classes/dlg.php:57 classes/dlg.php:214
 msgid "Generate new URL"
 msgstr "Genereer nieuwe URL"
 
 #: classes/dlg.php:71
-msgid "Update daemon is enabled in configuration, but daemon process is not running, which prevents all feeds from updating. Please start the daemon process or contact instance owner."
-msgstr "De update deamon is ingeschakeld in de configuratie, maar het deamon proces loopt niet. Dit voorkomt dat alle feeds wordt bijgewerkt. Start het deamon proces of contacteer de eigenaar van deze instantie."
+msgid ""
+"Update daemon is enabled in configuration, but daemon process is not "
+"running, which prevents all feeds from updating. Please start the daemon "
+"process or contact instance owner."
+msgstr ""
+"De update daemon is ingeschakeld in de configuratie, maar het "
+"achtergrondproces loopt niet. Dit voorkomt dat alle feeds wordt bijgewerkt. "
+"Start het achtergrondproces of contacteer de eigenaar van deze instantie."
 
-#: classes/dlg.php:75
-#: classes/dlg.php:84
+#: classes/dlg.php:75 classes/dlg.php:84
 msgid "Last update:"
 msgstr "Laatste update:"
 
 #: classes/dlg.php:80
-msgid "Update daemon is taking too long to perform a feed update. This could indicate a problem like crash or a hang. Please check the daemon process or contact instance owner."
-msgstr "De update deamon neemt te veel tijd om een feed bij te werken. Dit kan betekenen dat het proces is gescrashed of hangt. Controleer het deamon proces of contacteer de eigenaar van deze instantie."
+msgid ""
+"Update daemon is taking too long to perform a feed update. This could "
+"indicate a problem like crash or a hang. Please check the daemon process or "
+"contact instance owner."
+msgstr ""
+"De update daemon neemt te veel tijd om een feed bij te werken. Dit kan "
+"betekenen dat het proces is gescrashed of hangt. Controleer het "
+"achtergrondproces of contacteer de eigenaar van deze instantie."
 
 #: classes/dlg.php:166
 msgid "Match:"
@@ -1124,20 +1017,22 @@ msgstr "Items weergeven"
 msgid "You can view this feed as RSS using the following URL:"
 msgstr "u kunt deze feed bekijken als RSS via de volgende URL:"
 
-#: classes/dlg.php:233
-#: plugins/updater/init.php:331
+#: classes/dlg.php:233 plugins/updater/init.php:331
 #, php-format
 msgid "New version of Tiny Tiny RSS is available (%s)."
 msgstr "Nieuwe versie van Tiny Tiny RSS is beschikbaar (%s)."
 
 #: classes/dlg.php:241
-msgid "You can update using built-in updater in the Preferences or by using update.php"
-msgstr "U kunt updaten met behulp van de ingebouwde updater in de Voorkeuren of via update.php"
+msgid ""
+"You can update using built-in updater in the Preferences or by using update."
+"php"
+msgstr ""
+"U kunt updaten met behulp van de ingebouwde updater in de Voorkeuren of via "
+"update.php"
 
-#: classes/dlg.php:245
-#: plugins/updater/init.php:335
+#: classes/dlg.php:245 plugins/updater/init.php:335
 msgid "See the release notes"
-msgstr ""
+msgstr "Zie de uitgave opmerkingen"
 
 #: classes/dlg.php:247
 msgid "Download"
@@ -1145,20 +1040,19 @@ msgstr "Downloaden"
 
 #: classes/dlg.php:255
 msgid "Error receiving version information or no new version available."
-msgstr "Fout bij verkrijgen van informatie over de versie, of geen nieuwe versie beschikbaar."
+msgstr ""
+"Fout bij verkrijgen van versie informatie, of geen nieuwe versie beschikbaar."
 
 #: classes/feeds.php:56
-#, fuzzy, php-format
+#, php-format
 msgid "Last updated: %s"
-msgstr "Laatste update:"
+msgstr "Laatst geüpdatet: %s"
 
 #: classes/feeds.php:75
 msgid "View as RSS feed"
 msgstr "Toon als RSS feed"
 
-#: classes/feeds.php:76
-#: classes/feeds.php:128
-#: classes/pref/feeds.php:1496
+#: classes/feeds.php:76 classes/feeds.php:128 classes/pref/feeds.php:1496
 msgid "View as RSS"
 msgstr "Toon als RSS"
 
@@ -1166,19 +1060,12 @@ msgstr "Toon als RSS"
 msgid "Select:"
 msgstr "Selecteer:"
 
-#: classes/feeds.php:84
-#: classes/pref/users.php:345
-#: classes/pref/labels.php:275
-#: classes/pref/filters.php:282
-#: classes/pref/filters.php:330
-#: classes/pref/filters.php:648
-#: classes/pref/filters.php:736
-#: classes/pref/filters.php:763
-#: classes/pref/prefs.php:996
-#: classes/pref/feeds.php:1323
-#: classes/pref/feeds.php:1589
-#: classes/pref/feeds.php:1659
-#: plugins/instances/init.php:287
+#: classes/feeds.php:84 classes/pref/users.php:345 classes/pref/labels.php:275
+#: classes/pref/filters.php:282 classes/pref/filters.php:330
+#: classes/pref/filters.php:648 classes/pref/filters.php:736
+#: classes/pref/filters.php:763 classes/pref/prefs.php:996
+#: classes/pref/feeds.php:1323 classes/pref/feeds.php:1589
+#: classes/pref/feeds.php:1659 plugins/instances/init.php:287
 msgid "All"
 msgstr "Alles"
 
@@ -1186,19 +1073,12 @@ msgstr "Alles"
 msgid "Invert"
 msgstr "Omkeren"
 
-#: classes/feeds.php:87
-#: classes/pref/users.php:347
-#: classes/pref/labels.php:277
-#: classes/pref/filters.php:284
-#: classes/pref/filters.php:332
-#: classes/pref/filters.php:650
-#: classes/pref/filters.php:738
-#: classes/pref/filters.php:765
-#: classes/pref/prefs.php:998
-#: classes/pref/feeds.php:1325
-#: classes/pref/feeds.php:1591
-#: classes/pref/feeds.php:1661
-#: plugins/instances/init.php:289
+#: classes/feeds.php:87 classes/pref/users.php:347 classes/pref/labels.php:277
+#: classes/pref/filters.php:284 classes/pref/filters.php:332
+#: classes/pref/filters.php:650 classes/pref/filters.php:738
+#: classes/pref/filters.php:765 classes/pref/prefs.php:998
+#: classes/pref/feeds.php:1325 classes/pref/feeds.php:1591
+#: classes/pref/feeds.php:1661 plugins/instances/init.php:289
 msgid "None"
 msgstr "Niets"
 
@@ -1220,49 +1100,43 @@ msgstr "Geef score"
 
 #: classes/feeds.php:107
 msgid "Archive"
-msgstr "Archief"
+msgstr "Archiveer"
 
 #: classes/feeds.php:109
 msgid "Move back"
 msgstr "Terugzetten"
 
-#: classes/feeds.php:110
-#: classes/pref/filters.php:291
-#: classes/pref/filters.php:339
-#: classes/pref/filters.php:745
+#: classes/feeds.php:110 classes/pref/filters.php:291
+#: classes/pref/filters.php:339 classes/pref/filters.php:745
 #: classes/pref/filters.php:772
 msgid "Delete"
 msgstr "Verwijderen"
 
-#: classes/feeds.php:115
-#: classes/feeds.php:120
-#: plugins/mailto/init.php:25
+#: classes/feeds.php:115 classes/feeds.php:120 plugins/mailto/init.php:25
 #: plugins/mail/init.php:26
 msgid "Forward by email"
-msgstr "doorsturen per e-mail"
+msgstr "Doorsturen per e-mail"
 
 #: classes/feeds.php:124
 msgid "Feed:"
 msgstr "Feed:"
 
-#: classes/feeds.php:197
-#: classes/feeds.php:837
+#: classes/feeds.php:197 classes/feeds.php:837
 msgid "Feed not found."
 msgstr "Feed niet gevonden."
 
 #: classes/feeds.php:254
-#, fuzzy
 msgid "Never"
-msgstr "Nooit opschonen"
+msgstr "Nooit"
 
 #: classes/feeds.php:360
-#, fuzzy, php-format
+#, php-format
 msgid "Imported at %s"
-msgstr "Importeren"
+msgstr "Geïmporteerd op %s"
 
 #: classes/feeds.php:535
 msgid "mark as read"
-msgstr "Markeer als gelezen"
+msgstr "markeer als gelezen"
 
 #: classes/feeds.php:585
 msgid "Collapse article"
@@ -1281,22 +1155,24 @@ msgid "No starred articles found to display."
 msgstr "Er zijn geen artikelen met ster gevonden om weer te geven."
 
 #: classes/feeds.php:748
-#, fuzzy
-msgid "No articles found to display. You can assign articles to labels manually from article header context menu (applies to all selected articles) or use a filter."
-msgstr "Geen artikelen gevonden voor weergave. U kunt artikelen handmatig aan labels toekennen (zie het Actie menu hierboven) of een filter gebruiken."
+msgid ""
+"No articles found to display. You can assign articles to labels manually "
+"from article header context menu (applies to all selected articles) or use a "
+"filter."
+msgstr ""
+"Geen artikelen gevonden voor weergave. U kunt handmatig labels aan artikels "
+"toekennen (zie het Actie menu hierboven) of een filter gebruiken."
 
 #: classes/feeds.php:750
 msgid "No articles found to display."
 msgstr "Geen artikelen gevonden om weer te geven."
 
-#: classes/feeds.php:765
-#: classes/feeds.php:932
+#: classes/feeds.php:765 classes/feeds.php:932
 #, php-format
 msgid "Feeds last updated at %s"
 msgstr "Feeds laatst bijgewerkt op %s"
 
-#: classes/feeds.php:775
-#: classes/feeds.php:942
+#: classes/feeds.php:775 classes/feeds.php:942
 msgid "Some feeds have update errors (click for details)"
 msgstr "Sommige feeds hebben update fouten (klik voor details)"
 
@@ -1304,14 +1180,11 @@ msgstr "Sommige feeds hebben update fouten (klik voor details)"
 msgid "No feed selected."
 msgstr "Geen feeds geselecteerd."
 
-#: classes/feeds.php:975
-#: classes/feeds.php:983
+#: classes/feeds.php:975 classes/feeds.php:983
 msgid "Feed or site URL"
 msgstr "Feed of website URL"
 
-#: classes/feeds.php:989
-#: classes/pref/feeds.php:592
-#: classes/pref/feeds.php:824
+#: classes/feeds.php:989 classes/pref/feeds.php:592 classes/pref/feeds.php:824
 #: classes/pref/feeds.php:1817
 msgid "Place in category:"
 msgstr "Plaats in categorie:"
@@ -1320,25 +1193,19 @@ msgstr "Plaats in categorie:"
 msgid "Available feeds"
 msgstr "Beschikbare feeds"
 
-#: classes/feeds.php:1009
-#: classes/pref/users.php:139
-#: classes/pref/feeds.php:622
-#: classes/pref/feeds.php:860
+#: classes/feeds.php:1009 classes/pref/users.php:139
+#: classes/pref/feeds.php:622 classes/pref/feeds.php:860
 msgid "Authentication"
 msgstr "Authenticatie"
 
-#: classes/feeds.php:1013
-#: classes/pref/users.php:402
-#: classes/pref/feeds.php:628
-#: classes/pref/feeds.php:864
+#: classes/feeds.php:1013 classes/pref/users.php:402
+#: classes/pref/feeds.php:628 classes/pref/feeds.php:864
 #: classes/pref/feeds.php:1831
 msgid "Login"
 msgstr "LoginID"
 
-#: classes/feeds.php:1016
-#: classes/pref/prefs.php:260
-#: classes/pref/feeds.php:641
-#: classes/pref/feeds.php:870
+#: classes/feeds.php:1016 classes/pref/prefs.php:260
+#: classes/pref/feeds.php:641 classes/pref/feeds.php:870
 #: classes/pref/feeds.php:1834
 msgid "Password"
 msgstr "Wachtwoord"
@@ -1347,9 +1214,7 @@ msgstr "Wachtwoord"
 msgid "This feed requires authentication."
 msgstr "Deze feed vereist authenticatie."
 
-#: classes/feeds.php:1031
-#: classes/feeds.php:1087
-#: classes/pref/feeds.php:1852
+#: classes/feeds.php:1031 classes/feeds.php:1087 classes/pref/feeds.php:1852
 msgid "Subscribe"
 msgstr "Abonneren"
 
@@ -1357,12 +1222,8 @@ msgstr "Abonneren"
 msgid "More feeds"
 msgstr "Meer feeds"
 
-#: classes/feeds.php:1057
-#: classes/feeds.php:1148
-#: classes/pref/users.php:332
-#: classes/pref/filters.php:641
-#: classes/pref/feeds.php:1316
-#: js/tt-rss.js:173
+#: classes/feeds.php:1057 classes/feeds.php:1148 classes/pref/users.php:332
+#: classes/pref/filters.php:641 classes/pref/feeds.php:1316 js/tt-rss.js:173
 msgid "Search"
 msgstr "Zoeken"
 
@@ -1376,14 +1237,11 @@ msgstr "Feed archief"
 
 #: classes/feeds.php:1065
 msgid "limit:"
-msgstr "Beperking:"
-
-#: classes/feeds.php:1088
-#: classes/pref/users.php:358
-#: classes/pref/labels.php:284
-#: classes/pref/filters.php:398
-#: classes/pref/filters.php:667
-#: classes/pref/feeds.php:746
+msgstr "beperking:"
+
+#: classes/feeds.php:1088 classes/pref/users.php:358
+#: classes/pref/labels.php:284 classes/pref/filters.php:398
+#: classes/pref/filters.php:667 classes/pref/feeds.php:746
 #: plugins/instances/init.php:294
 msgid "Remove"
 msgstr "Verwijderen"
@@ -1402,7 +1260,7 @@ msgstr "Deze feed"
 
 #: classes/backend.php:33
 msgid "Other interface tips are available in the Tiny Tiny RSS wiki."
-msgstr "andere interface tips zijn te vinden in de Tiny Tiny RSS wiki."
+msgstr "Andere interface tips zijn te vinden in de Tiny Tiny RSS wiki."
 
 #: classes/backend.php:38
 msgid "Keyboard Shortcuts"
@@ -1420,8 +1278,7 @@ msgstr "Ctrl"
 msgid "Help topic not found."
 msgstr "Help onderwerp niet gevonden."
 
-#: classes/opml.php:28
-#: classes/opml.php:33
+#: classes/opml.php:28 classes/opml.php:33
 msgid "OPML Utility"
 msgstr "OPML hulpprogramma"
 
@@ -1460,45 +1317,38 @@ msgstr "Instellen voorkeursleutel %s op %s"
 
 #: classes/opml.php:339
 msgid "Adding filter..."
-msgstr "filter toevoegen..."
+msgstr "Filter toevoegen..."
 
 #: classes/opml.php:416
 #, php-format
 msgid "Processing category: %s"
 msgstr "Verwerken categorie: %s"
 
-#: classes/opml.php:465
-#: plugins/import_export/init.php:418
+#: classes/opml.php:465 plugins/import_export/init.php:418
 #: plugins/googlereaderimport/init.php:66
 #, php-format
 msgid "Upload failed with error code %d"
-msgstr ""
+msgstr "Upload mislukt met fout nummer %d"
 
-#: classes/opml.php:479
-#: plugins/import_export/init.php:432
+#: classes/opml.php:479 plugins/import_export/init.php:432
 #: plugins/googlereaderimport/init.php:80
-#, fuzzy
 msgid "Unable to move uploaded file."
-msgstr "Fout: kan artikel niet laden."
+msgstr "Kan het geüploade bestand niet verplaatsen."
 
-#: classes/opml.php:483
-#: plugins/import_export/init.php:436
+#: classes/opml.php:483 plugins/import_export/init.php:436
 #: plugins/googlereaderimport/init.php:84
 msgid "Error: please upload OPML file."
-msgstr "Fout: OPML-bestand uploaden aub."
+msgstr "Fout: OPML bestand uploaden aub."
 
 #: classes/opml.php:492
-#, fuzzy
 msgid "Error: unable to find moved OPML file."
-msgstr "Fout: kan artikel niet laden."
+msgstr "Fout: kan het verplaatste OPML bestand niet vinden."
 
-#: classes/opml.php:499
-#: plugins/googlereaderimport/init.php:186
+#: classes/opml.php:499 plugins/googlereaderimport/init.php:186
 msgid "Error while parsing document."
-msgstr "Fout bij het parseren van het document."
+msgstr "Fout bij het parsen van het document."
 
-#: classes/pref/users.php:6
-#: classes/pref/system.php:8
+#: classes/pref/users.php:6 classes/pref/system.php:8
 #: plugins/instances/init.php:154
 msgid "Your access level is insufficient to open this tab."
 msgstr "Uw toegangsniveau is niet toereikend om deze tab te openen."
@@ -1507,8 +1357,7 @@ msgstr "Uw toegangsniveau is niet toereikend om deze tab te openen."
 msgid "User not found"
 msgstr "Gebruiker niet gevonden"
 
-#: classes/pref/users.php:53
-#: classes/pref/users.php:404
+#: classes/pref/users.php:53 classes/pref/users.php:404
 msgid "Registered"
 msgstr "Geregistreerd"
 
@@ -1532,8 +1381,7 @@ msgstr "Toegangsniveau:"
 msgid "Change password to"
 msgstr "Wijzig wachtwoord naar"
 
-#: classes/pref/users.php:161
-#: classes/pref/feeds.php:649
+#: classes/pref/users.php:161 classes/pref/feeds.php:649
 #: classes/pref/feeds.php:876
 msgid "Options"
 msgstr "Opties"
@@ -1558,35 +1406,25 @@ msgid "User <b>%s</b> already exists."
 msgstr "Gebruiker <b>%s</b> bestaat al."
 
 #: classes/pref/users.php:273
-#, fuzzy, php-format
+#, php-format
 msgid "Changed password of user <b>%s</b> to <b>%s</b>"
-msgstr ""
-"Wijzig wachtwoord van gebruiker<b>%s</b>\n"
-"\t\t\t\t naar <b>%s</b>"
+msgstr "Wachtwoord van gebruiker<b>%s</b> naar <b>%s</b> gewijzigd"
 
 #: classes/pref/users.php:275
-#, fuzzy, php-format
+#, php-format
 msgid "Sending new password of user <b>%s</b> to <b>%s</b>"
-msgstr ""
-"Wijzig wachtwoord van gebruiker<b>%s</b>\n"
-"\t\t\t\t naar <b>%s</b>"
+msgstr "Wachtwoord van gebruiker<b>%s</b>naar <b>%s</b> versturen"
 
 #: classes/pref/users.php:299
 msgid "[tt-rss] Password change notification"
 msgstr "[tt-rss] Melding verandering van wachtwoord"
 
-#: classes/pref/users.php:342
-#: classes/pref/labels.php:272
-#: classes/pref/filters.php:279
-#: classes/pref/filters.php:327
-#: classes/pref/filters.php:645
-#: classes/pref/filters.php:733
-#: classes/pref/filters.php:760
-#: classes/pref/prefs.php:993
-#: classes/pref/feeds.php:1320
-#: classes/pref/feeds.php:1586
-#: classes/pref/feeds.php:1656
-#: plugins/instances/init.php:284
+#: classes/pref/users.php:342 classes/pref/labels.php:272
+#: classes/pref/filters.php:279 classes/pref/filters.php:327
+#: classes/pref/filters.php:645 classes/pref/filters.php:733
+#: classes/pref/filters.php:760 classes/pref/prefs.php:993
+#: classes/pref/feeds.php:1320 classes/pref/feeds.php:1586
+#: classes/pref/feeds.php:1656 plugins/instances/init.php:284
 msgid "Select"
 msgstr "Selecteer"
 
@@ -1598,8 +1436,7 @@ msgstr "Gebruiker aanmaken"
 msgid "Details"
 msgstr "Details"
 
-#: classes/pref/users.php:356
-#: classes/pref/filters.php:660
+#: classes/pref/users.php:356 classes/pref/filters.php:660
 #: plugins/instances/init.php:293
 msgid "Edit"
 msgstr "Bewerken"
@@ -1612,10 +1449,9 @@ msgstr "Toegangsniveau"
 msgid "Last login"
 msgstr "Laatste loginID"
 
-#: classes/pref/users.php:426
-#: plugins/instances/init.php:334
+#: classes/pref/users.php:426 plugins/instances/init.php:334
 msgid "Click to edit"
-msgstr "Klik voor bewerken"
+msgstr "Klik om te bewerken"
 
 #: classes/pref/users.php:446
 msgid "No users defined."
@@ -1623,10 +1459,9 @@ msgstr "Geen gebruikers gedefinieerd."
 
 #: classes/pref/users.php:448
 msgid "No matching users found."
-msgstr "geen overeenkomstige gebruikers gevonden."
+msgstr "Geen overeenkomstige gebruikers gevonden."
 
-#: classes/pref/labels.php:22
-#: classes/pref/filters.php:268
+#: classes/pref/labels.php:22 classes/pref/filters.php:268
 #: classes/pref/filters.php:724
 msgid "Caption"
 msgstr "Onderschrift"
@@ -1646,7 +1481,7 @@ msgstr "Achtergrond:"
 #: classes/pref/labels.php:232
 #, php-format
 msgid "Created label <b>%s</b>"
-msgstr "aangemaakt label <b>%s</b>"
+msgstr "Label <b>%s</b> aangemaakt"
 
 #: classes/pref/labels.php:287
 msgid "Clear colors"
@@ -1658,73 +1493,66 @@ msgstr "Artikelen volgens dit filter:"
 
 #: classes/pref/filters.php:133
 msgid "No recent articles matching this filter have been found."
-msgstr "Er zijn geen recente artikelen die overeenkomen met dit filter gevonden."
+msgstr ""
+"Er zijn geen recente artikelen die overeenkomen met dit filter gevonden."
 
 #: classes/pref/filters.php:137
-msgid "Complex expressions might not give results while testing due to issues with database server regexp implementation."
-msgstr "complexe expressies kunnen geen resultaat geven bij het testen, tengevolge van problemen bij de database server's regexp implementatie."
+msgid ""
+"Complex expressions might not give results while testing due to issues with "
+"database server regexp implementation."
+msgstr ""
+"Complexe expressies kunnen geen resultaat geven bij het testen, tengevolge "
+"van problemen bij de database server's regexp implementatie."
 
-#: classes/pref/filters.php:274
-#: classes/pref/filters.php:728
+#: classes/pref/filters.php:274 classes/pref/filters.php:728
 #: classes/pref/filters.php:843
 msgid "Match"
 msgstr "Match"
 
-#: classes/pref/filters.php:288
-#: classes/pref/filters.php:336
-#: classes/pref/filters.php:742
-#: classes/pref/filters.php:769
+#: classes/pref/filters.php:288 classes/pref/filters.php:336
+#: classes/pref/filters.php:742 classes/pref/filters.php:769
 msgid "Add"
 msgstr "Toevoegen"
 
-#: classes/pref/filters.php:322
-#: classes/pref/filters.php:755
+#: classes/pref/filters.php:322 classes/pref/filters.php:755
 msgid "Apply actions"
 msgstr "Acties toepassen"
 
-#: classes/pref/filters.php:372
-#: classes/pref/filters.php:784
+#: classes/pref/filters.php:372 classes/pref/filters.php:784
 msgid "Enabled"
 msgstr "Ingeschakeld"
 
-#: classes/pref/filters.php:381
-#: classes/pref/filters.php:787
+#: classes/pref/filters.php:381 classes/pref/filters.php:787
 msgid "Match any rule"
 msgstr "Match elke regel"
 
-#: classes/pref/filters.php:390
-#: classes/pref/filters.php:790
-#, fuzzy
+#: classes/pref/filters.php:390 classes/pref/filters.php:790
 msgid "Inverse matching"
-msgstr "Omdraaien selectie"
+msgstr "Omgekeerde matching"
 
-#: classes/pref/filters.php:402
-#: classes/pref/filters.php:797
+#: classes/pref/filters.php:402 classes/pref/filters.php:797
 msgid "Test"
 msgstr "Test"
 
 #: classes/pref/filters.php:435
-#, fuzzy
 msgid "(inverse)"
-msgstr "Omgekeerd"
+msgstr "(omgekeerd)"
 
 #: classes/pref/filters.php:434
-#, fuzzy, php-format
+#, php-format
 msgid "%s on %s in %s %s"
-msgstr "%s op %s in %s"
+msgstr "%s op %s in %s %s"
 
 #: classes/pref/filters.php:657
 msgid "Combine"
 msgstr "Combineren"
 
-#: classes/pref/filters.php:663
-#: classes/pref/feeds.php:1336
+#: classes/pref/filters.php:663 classes/pref/feeds.php:1336
 #: classes/pref/feeds.php:1350
 msgid "Reset sort order"
 msgstr "Herstel sorteervolgorde"
 
-#: classes/pref/filters.php:671
-#: classes/pref/feeds.php:1375
+#: classes/pref/filters.php:671 classes/pref/feeds.php:1375
 msgid "Rescore articles"
 msgstr "Artikelen nieuwe score geven"
 
@@ -1734,14 +1562,13 @@ msgstr "Aanmaken"
 
 #: classes/pref/filters.php:855
 msgid "Inverse regular expression matching"
-msgstr ""
+msgstr "Omgekeerde regular expression matching"
 
 #: classes/pref/filters.php:857
 msgid "on field"
 msgstr "op veld"
 
-#: classes/pref/filters.php:863
-#: js/PrefFilterTree.js:45
+#: classes/pref/filters.php:863 js/PrefFilterTree.js:45
 #: plugins/digest/digest.js:242
 msgid "in"
 msgstr "in"
@@ -1750,14 +1577,13 @@ msgstr "in"
 msgid "Save rule"
 msgstr "Regel opslaan"
 
-#: classes/pref/filters.php:876
-#: js/functions.js:1013
+#: classes/pref/filters.php:876 js/functions.js:1013
 msgid "Add rule"
-msgstr "regel toevoegen"
+msgstr "Regel toevoegen"
 
 #: classes/pref/filters.php:899
 msgid "Perform Action"
-msgstr "Actie doorvoeren"
+msgstr "Actie uitvoeren"
 
 #: classes/pref/filters.php:925
 msgid "with parameters:"
@@ -1767,15 +1593,13 @@ msgstr "met parameters:"
 msgid "Save action"
 msgstr "Actie opslaan"
 
-#: classes/pref/filters.php:943
-#: js/functions.js:1039
+#: classes/pref/filters.php:943 js/functions.js:1039
 msgid "Add action"
 msgstr "Actie toevoegen"
 
 #: classes/pref/filters.php:966
-#, fuzzy
 msgid "[No caption]"
-msgstr "Onderschrift"
+msgstr "[Geen onderschrift]"
 
 #: classes/pref/prefs.php:18
 msgid "General"
@@ -1791,12 +1615,11 @@ msgstr "Geavanceerd"
 
 #: classes/pref/prefs.php:21
 msgid "Digest"
-msgstr ""
+msgstr "Samenvatting"
 
 #: classes/pref/prefs.php:25
-#, fuzzy
 msgid "Allow duplicate articles"
-msgstr "toestaan dubbele berichten"
+msgstr "Sta dubbele artikels  toe"
 
 #: classes/pref/prefs.php:26
 msgid "Assign articles to labels automatically"
@@ -1807,18 +1630,24 @@ msgid "Blacklisted tags"
 msgstr "Op de zwarte lijst geplaatste tags"
 
 #: classes/pref/prefs.php:27
-#, fuzzy
-msgid "When auto-detecting tags in articles these tags will not be applied (comma-separated list)."
-msgstr "Wanneer tags automatisch worden gedetecteerd in artikelen, zullen deze tags niet worden toegekend (komma-gescheiden lijst)."
+msgid ""
+"When auto-detecting tags in articles these tags will not be applied (comma-"
+"separated list)."
+msgstr ""
+"Wanneer tags automatisch worden gedetecteerd in artikelen, zullen deze tags "
+"niet worden toegekend (komma-gescheiden lijst)."
 
 #: classes/pref/prefs.php:28
 msgid "Automatically mark articles as read"
 msgstr "Artikelen automatisch als gelezen markeren"
 
 #: classes/pref/prefs.php:28
-#, fuzzy
-msgid "This option enables marking articles as read automatically while you scroll article list."
-msgstr "Deze optie schakelt het automatisch markeren als gelezen van artikelen in, terwijl u door de artikellijst scrolt."
+msgid ""
+"This option enables marking articles as read automatically while you scroll "
+"article list."
+msgstr ""
+"Deze optie schakelt het automatisch markeren als gelezen van artikelen "
+"(terwijl u door de artikellijst scrolt) in."
 
 #: classes/pref/prefs.php:29
 msgid "Automatically expand articles in combined mode"
@@ -1829,38 +1658,48 @@ msgid "Combined feed display"
 msgstr "Gecombineerde feed weergave"
 
 #: classes/pref/prefs.php:30
-msgid "Display expanded list of feed articles, instead of separate displays for headlines and article content"
-msgstr "Uitgeklapte lijst van artikelen weergeven in plaats van afzonderlijke weergave van kopteksten en artikelinhoud"
+msgid ""
+"Display expanded list of feed articles, instead of separate displays for "
+"headlines and article content"
+msgstr ""
+"Uitgeklapte lijst van artikelen weergeven in plaats van afzonderlijke "
+"weergave van kopteksten en artikelinhoud"
 
 #: classes/pref/prefs.php:31
 msgid "Confirm marking feed as read"
-msgstr "Bevestigen feed markeren als gelezen"
+msgstr "Bevestig feed markeren als gelezen"
 
 #: classes/pref/prefs.php:32
 msgid "Amount of articles to display at once"
 msgstr "Aantal tegelijkertijd weer te geven artikelen "
 
 #: classes/pref/prefs.php:33
-#, fuzzy
 msgid "Default feed update interval"
-msgstr "Standaard interval"
+msgstr "Standaard feed update interval"
 
 #: classes/pref/prefs.php:33
-msgid "Shortest interval at which a feed will be checked for updates regardless of update method"
+msgid ""
+"Shortest interval at which a feed will be checked for updates regardless of "
+"update method"
 msgstr ""
+"Kortste interval waarmee een feed wordt gecontroleerd op updates, "
+"onafhankelijk van upate methode"
 
 #: classes/pref/prefs.php:34
 msgid "Mark articles in e-mail digest as read"
 msgstr "Markeer artikelen in e-mail samenvatting als gelezen"
 
 #: classes/pref/prefs.php:35
-#, fuzzy
 msgid "Enable e-mail digest"
-msgstr "Inschakelen e-mail samenvatting"
+msgstr "Schakel e-mail samenvatting in"
 
 #: classes/pref/prefs.php:35
-msgid "This option enables sending daily digest of new (and unread) headlines on your configured e-mail address"
-msgstr "Deze optie schakelt het verzenden in van een dagelijkse samenvatting van nieuwe (en ongelezen) kopteksten naar het door u ingestelde e-mailadres"
+msgid ""
+"This option enables sending daily digest of new (and unread) headlines on "
+"your configured e-mail address"
+msgstr ""
+"Deze optie schakelt het verzenden van een dagelijkse samenvatting van nieuwe "
+"(en ongelezen) kopteksten naar het door u ingestelde e-mailadres in"
 
 #: classes/pref/prefs.php:36
 msgid "Try to send digests around specified time"
@@ -1872,11 +1711,11 @@ msgstr "Gebruikt UTC tijdzone"
 
 #: classes/pref/prefs.php:37
 msgid "Enable API access"
-msgstr ""
+msgstr "Sta API toegang toe"
 
 #: classes/pref/prefs.php:37
 msgid "Allows external clients to access this account through the API"
-msgstr ""
+msgstr "Laat externe clienten to tot dit account via de API"
 
 #: classes/pref/prefs.php:38
 msgid "Enable feed categories"
@@ -1891,12 +1730,10 @@ msgid "Maximum age of fresh articles (in hours)"
 msgstr "Maximum leeftijd van nieuwe artikelen (uren) "
 
 #: classes/pref/prefs.php:41
-#, fuzzy
 msgid "Hide feeds with no unread articles"
 msgstr "Feeds zonder ongelezen artikelen verbergen"
 
 #: classes/pref/prefs.php:42
-#, fuzzy
 msgid "Show special feeds when hiding read feeds"
 msgstr "Toon speciale feeds bij verbergen gelezen feeds"
 
@@ -1906,22 +1743,25 @@ msgstr "Lang datumformaat"
 
 #: classes/pref/prefs.php:44
 msgid "On catchup show next feed"
-msgstr "toon volgende feed na bijwerken"
+msgstr "Toon volgende feed na bijwerken"
 
 #: classes/pref/prefs.php:44
-msgid "Automatically open next feed with unread articles after marking one as read"
-msgstr "Automatisch volgende feed met ongelezen artikelen openen nadat er een is gemarkeerd als gelezen"
+msgid ""
+"Automatically open next feed with unread articles after marking one as read"
+msgstr ""
+"Automatisch volgende feed met ongelezen artikelen openen nadat er een is "
+"gemarkeerd als gelezen"
 
 #: classes/pref/prefs.php:45
 msgid "Purge articles after this number of days (0 - disables)"
-msgstr "Permanent verwijderen van artikelen na dit aantal dagen (0 - zet dit uit)"
+msgstr ""
+"Permanent verwijderen van artikelen na dit aantal dagen (0 - zet dit uit)"
 
 #: classes/pref/prefs.php:46
 msgid "Purge unread articles"
 msgstr "Ongelezen artikelen permanent verwijderen"
 
-#: classes/pref/prefs.php:47
-#: plugins/mobile/prefs.php:56
+#: classes/pref/prefs.php:47 plugins/mobile/prefs.php:56
 msgid "Reverse headline order (oldest first)"
 msgstr "Draai de koptekst volgorde om (oudste eerst)"
 
@@ -1931,7 +1771,7 @@ msgstr "Korte datumformaat"
 
 #: classes/pref/prefs.php:49
 msgid "Show content preview in headlines list"
-msgstr "toon voorbeeld van inhoud in lijst van kopteksten"
+msgstr "Toon voorbeeld van inhoud in lijst van kopteksten"
 
 #: classes/pref/prefs.php:50
 msgid "Sort headlines by feed date"
@@ -1939,7 +1779,9 @@ msgstr "Sorteer kopteksten op feed datum"
 
 #: classes/pref/prefs.php:50
 msgid "Use feed-specified date to sort headlines instead of local import date."
-msgstr "Door feed gespecificeerde data gebruiken om kopteksten te sorteren in plaats van lokaal geïmporteerde data."
+msgstr ""
+"Door feed gespecificeerde data gebruiken om kopteksten te sorteren in plaats "
+"van lokaal geïmporteerde data."
 
 #: classes/pref/prefs.php:51
 msgid "Login with an SSL certificate"
@@ -1959,10 +1801,11 @@ msgstr "Verwijder onveilige tags uit artikelen"
 
 #: classes/pref/prefs.php:53
 msgid "Strip all but most common HTML tags when reading articles."
-msgstr "Verwijder alles behalve de meest algemene HTML tags bij het lezen van artikelen."
+msgstr ""
+"Verwijder alles behalve de meest algemene HTML tags bij het lezen van "
+"artikelen."
 
-#: classes/pref/prefs.php:54
-#: js/prefs.js:1734
+#: classes/pref/prefs.php:54 js/prefs.js:1734
 msgid "Customize stylesheet"
 msgstr "Aanpassen opmaakmodel"
 
@@ -1971,7 +1814,6 @@ msgid "Customize CSS stylesheet to your liking"
 msgstr "Aanpassen CSS opmaakmodel aan uw voorkeur"
 
 #: classes/pref/prefs.php:55
-#, fuzzy
 msgid "Time zone"
 msgstr "Gebruiker's tijdzone"
 
@@ -1982,19 +1824,20 @@ msgstr "Kopteksten in virtuele feeds groeperen"
 #: classes/pref/prefs.php:56
 msgid "Special feeds, labels, and categories are grouped by originating feeds"
 msgstr ""
+"Speciale feeds, labels en categorieën worden gegroepeerd op oorspronkelijke "
+"feeds"
 
 #: classes/pref/prefs.php:57
-#, fuzzy
 msgid "Language"
-msgstr "Taal:"
+msgstr "Taal"
 
 #: classes/pref/prefs.php:58
 msgid "Theme"
-msgstr ""
+msgstr "Thema"
 
 #: classes/pref/prefs.php:58
 msgid "Select one of the available CSS themes"
-msgstr ""
+msgstr "Selecteer een van de beschikbare CSS themas"
 
 #: classes/pref/prefs.php:69
 msgid "Old password cannot be blank."
@@ -2027,7 +1870,7 @@ msgstr "Uw persoonlijke gegevens zijn opgeslagen."
 
 #: classes/pref/prefs.php:176
 msgid "Your preferences are now set to default values."
-msgstr ""
+msgstr "Je voorkeuren zijn nu ingesteld op de standaardwaarden."
 
 #: classes/pref/prefs.php:198
 msgid "Personal data / Authentication"
@@ -2039,7 +1882,7 @@ msgstr "Persoonlijke gegevens"
 
 #: classes/pref/prefs.php:228
 msgid "Full name"
-msgstr "volledige naam"
+msgstr "Volledige naam"
 
 #: classes/pref/prefs.php:232
 msgid "E-mail"
@@ -2059,7 +1902,7 @@ msgstr "Uw wachtwoord staat op de standaard waarde. Verander het aub."
 
 #: classes/pref/prefs.php:294
 msgid "Changing your current password will disable OTP."
-msgstr ""
+msgstr "Je wachtwoord wijzigen schakelt Eenmalig Wachtwoord uit."
 
 #: classes/pref/prefs.php:299
 msgid "Old password"
@@ -2071,7 +1914,7 @@ msgstr "Nieuw wachtwoord"
 
 #: classes/pref/prefs.php:307
 msgid "Confirm password"
-msgstr "Bevestigen wachtwoord"
+msgstr "Bevestig wachtwoord"
 
 #: classes/pref/prefs.php:317
 msgid "Change password"
@@ -2079,45 +1922,51 @@ msgstr "Wijzig wachtwoord"
 
 #: classes/pref/prefs.php:323
 msgid "One time passwords / Authenticator"
-msgstr "eenmalig wachtwoord / Authenticator"
+msgstr "Eenmalig wachtwoord / Authenticator"
 
 #: classes/pref/prefs.php:327
-msgid "One time passwords are currently enabled. Enter your current password below to disable."
+msgid ""
+"One time passwords are currently enabled. Enter your current password below "
+"to disable."
 msgstr ""
+"Eenmalig wachtwoord is geactiveerd. Voer je huidige wachtwoord in om dit uit "
+"te schakelen."
 
-#: classes/pref/prefs.php:352
-#: classes/pref/prefs.php:403
+#: classes/pref/prefs.php:352 classes/pref/prefs.php:403
 msgid "Enter your password"
 msgstr "Vul uw wachtwoord in"
 
 #: classes/pref/prefs.php:363
 msgid "Disable OTP"
-msgstr "EWW (Eenmalig wachtwoord) uitschakelen"
+msgstr "EW (Eenmalig wachtwoord) uitschakelen"
 
 #: classes/pref/prefs.php:369
-msgid "You will need a compatible Authenticator to use this. Changing your password would automatically disable OTP."
-msgstr "U heeft een compatibele Authenticator nodig om dit te gebruiken. Veranderen van wachtwoord schakelt automatisch EWW uit."
+msgid ""
+"You will need a compatible Authenticator to use this. Changing your password "
+"would automatically disable OTP."
+msgstr ""
+"U heeft een compatibele Authenticator nodig om dit te gebruiken. Veranderen "
+"van wachtwoord schakelt automatisch EW uit."
 
 #: classes/pref/prefs.php:371
 msgid "Scan the following code by the Authenticator application:"
 msgstr "Scan de volgende code met de Authenticator applicatie:"
 
 #: classes/pref/prefs.php:408
-#, fuzzy
 msgid "Enter the generated one time password"
-msgstr "Geef aub uw eenmalig wachtwoord:"
+msgstr "Geef aub uw eenmalig wachtwoord"
 
 #: classes/pref/prefs.php:422
 msgid "Enable OTP"
-msgstr "Inschakelen EWW"
+msgstr "Inschakelen EW"
 
 #: classes/pref/prefs.php:428
 msgid "PHP GD functions are required for OTP support."
-msgstr ""
+msgstr "PHP GD functies zijn noodzakelijk voor EW ondersteuning."
 
 #: classes/pref/prefs.php:471
 msgid "Some preferences are only available in default profile."
-msgstr ""
+msgstr "Sommige instellingen zijn alleen beschikbaar in het standaard profiel."
 
 #: classes/pref/prefs.php:569
 msgid "Customize"
@@ -2141,7 +1990,6 @@ msgid "Save configuration"
 msgstr "Configuratie opslaan"
 
 #: classes/pref/prefs.php:675
-#, fuzzy
 msgid "Save and exit preferences"
 msgstr "Verlaat voorkeuren"
 
@@ -2153,50 +2001,52 @@ msgstr "Profielbeheer"
 msgid "Reset to defaults"
 msgstr "Terugzetten naar de standaardwaarden"
 
-#: classes/pref/prefs.php:706
-#: classes/pref/prefs.php:708
+#: classes/pref/prefs.php:706 classes/pref/prefs.php:708
 msgid "Plugins"
 msgstr "Plug-ins"
 
 #: classes/pref/prefs.php:710
-msgid "You will need to reload Tiny Tiny RSS for plugin changes to take effect."
-msgstr ""
+msgid ""
+"You will need to reload Tiny Tiny RSS for plugin changes to take effect."
+msgstr "Je moet Tiny Tiny RSS herladen om wijzigingen te kunnen zien."
 
 #: classes/pref/prefs.php:712
-msgid "Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins\">wiki</a>."
+msgid ""
+"Download more plugins at tt-rss.org <a class=\"visibleLink\" target=\"_blank"
+"\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forums</a> or <a "
+"target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins"
+"\">wiki</a>."
 msgstr ""
+"Download meer plugins van tt-rss.org <a class=\"visibleLink\" target=\"_blank"
+"\" href=\"http://tt-rss.org/forum/viewforum.php?f=22\">forum</a> of <a "
+"target=\"_blank\" class=\"visibleLink\" href=\"http://tt-rss.org/wiki/Plugins"
+"\">wiki</a>."
 
 #: classes/pref/prefs.php:738
 msgid "System plugins"
 msgstr "Systeem plug-ins"
 
-#: classes/pref/prefs.php:742
-#: classes/pref/prefs.php:796
+#: classes/pref/prefs.php:742 classes/pref/prefs.php:796
 msgid "Plugin"
 msgstr "Plug-in"
 
-#: classes/pref/prefs.php:743
-#: classes/pref/prefs.php:797
+#: classes/pref/prefs.php:743 classes/pref/prefs.php:797
 msgid "Description"
 msgstr "Omschrijving"
 
-#: classes/pref/prefs.php:744
-#: classes/pref/prefs.php:798
+#: classes/pref/prefs.php:744 classes/pref/prefs.php:798
 msgid "Version"
 msgstr "Versie"
 
-#: classes/pref/prefs.php:745
-#: classes/pref/prefs.php:799
+#: classes/pref/prefs.php:745 classes/pref/prefs.php:799
 msgid "Author"
 msgstr "Auteur"
 
-#: classes/pref/prefs.php:774
-#: classes/pref/prefs.php:831
+#: classes/pref/prefs.php:774 classes/pref/prefs.php:831
 msgid "more info"
-msgstr ""
+msgstr "meer info"
 
-#: classes/pref/prefs.php:783
-#: classes/pref/prefs.php:840
+#: classes/pref/prefs.php:783 classes/pref/prefs.php:840
 msgid "Clear data"
 msgstr "Wis data"
 
@@ -2209,26 +2059,30 @@ msgid "Enable selected plugins"
 msgstr "Geselecteerd plug-ins inschakelen"
 
 #: classes/pref/prefs.php:922
-#, fuzzy
 msgid "Incorrect one time password"
-msgstr "Onjuist wachtwoord"
+msgstr "Onjuist Eenmalig Wachtwoord"
 
-#: classes/pref/prefs.php:925
-#: classes/pref/prefs.php:942
+#: classes/pref/prefs.php:925 classes/pref/prefs.php:942
 msgid "Incorrect password"
 msgstr "Onjuist wachtwoord"
 
 #: classes/pref/prefs.php:967
 #, php-format
-msgid "You can override colors, fonts and layout of your currently selected theme with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">This file</a> can be used as a baseline."
-msgstr "U kunt door de CSS-declaraties aan te passen de kleuren, lettertypen en lay-out van uw huidige thema hier aanpassen. <a target=\"_blank\" class=\"visibleLink\" href=\"%s\">Dit bestand</a> kan als richtlijn worden gebruikt."
+msgid ""
+"You can override colors, fonts and layout of your currently selected theme "
+"with custom CSS declarations here. <a target=\"_blank\" class=\"visibleLink"
+"\" href=\"%s\">This file</a> can be used as a baseline."
+msgstr ""
+"U kunt door de CSS-declaraties aan te passen de kleuren, lettertypen en lay-"
+"out van uw huidige thema hier aanpassen. <a target=\"_blank\" class="
+"\"visibleLink\" href=\"%s\">Dit bestand</a> kan als richtlijn worden "
+"gebruikt."
 
 #: classes/pref/prefs.php:1007
 msgid "Create profile"
 msgstr "Maak profiel"
 
-#: classes/pref/prefs.php:1030
-#: classes/pref/prefs.php:1060
+#: classes/pref/prefs.php:1030 classes/pref/prefs.php:1060
 msgid "(active)"
 msgstr "(actief)"
 
@@ -2248,53 +2102,49 @@ msgstr "Aanvinken om veld in te schakelen"
 msgid "Feed Title"
 msgstr "Feed titel"
 
-#: classes/pref/feeds.php:600
-#: classes/pref/feeds.php:835
+#: classes/pref/feeds.php:600 classes/pref/feeds.php:835
 msgid "Update"
 msgstr "Bijwerken"
 
-#: classes/pref/feeds.php:615
-#: classes/pref/feeds.php:851
+#: classes/pref/feeds.php:615 classes/pref/feeds.php:851
 msgid "Article purging:"
 msgstr "Artikelopschoning:"
 
 #: classes/pref/feeds.php:645
-msgid "<b>Hint:</b> you need to fill in your login information if your feed requires authentication, except for Twitter feeds."
-msgstr "<b>Hint:</b> U moet uw aanmeld informatie invullen als uw feed authenticatie vereist, behalve voor Twitter feeds."
+msgid ""
+"<b>Hint:</b> you need to fill in your login information if your feed "
+"requires authentication, except for Twitter feeds."
+msgstr ""
+"<b>Hint:</b> U moet uw aanmeld informatie invullen als uw feed authenticatie "
+"vereist, behalve voor Twitter feeds."
 
-#: classes/pref/feeds.php:661
-#: classes/pref/feeds.php:880
+#: classes/pref/feeds.php:661 classes/pref/feeds.php:880
 msgid "Hide from Popular feeds"
 msgstr "Verbergen voor populaire feeds"
 
-#: classes/pref/feeds.php:673
-#: classes/pref/feeds.php:886
+#: classes/pref/feeds.php:673 classes/pref/feeds.php:886
 msgid "Include in e-mail digest"
-msgstr "toevoegen aan e-mail samenvatting"
+msgstr "Toevoegen aan e-mail samenvatting"
 
-#: classes/pref/feeds.php:686
-#: classes/pref/feeds.php:892
+#: classes/pref/feeds.php:686 classes/pref/feeds.php:892
 msgid "Always display image attachments"
 msgstr "Altijd afbeeldingsbijlagen weergeven"
 
-#: classes/pref/feeds.php:699
-#: classes/pref/feeds.php:900
+#: classes/pref/feeds.php:699 classes/pref/feeds.php:900
 msgid "Do not embed images"
 msgstr "Afbeeldingen niet insluiten."
 
-#: classes/pref/feeds.php:712
-#: classes/pref/feeds.php:908
+#: classes/pref/feeds.php:712 classes/pref/feeds.php:908
 msgid "Cache images locally"
 msgstr "Afbeelding lokaal in cache plaatsen"
 
-#: classes/pref/feeds.php:724
-#: classes/pref/feeds.php:914
+#: classes/pref/feeds.php:724 classes/pref/feeds.php:914
 msgid "Mark updated articles as unread"
 msgstr "Markeer bijgewerkte artikelen als niet-gelezen"
 
 #: classes/pref/feeds.php:730
 msgid "Icon"
-msgstr "Icon"
+msgstr "Pictogram"
 
 #: classes/pref/feeds.php:744
 msgid "Replace"
@@ -2308,8 +2158,7 @@ msgstr "Herabonneren voor push updates"
 msgid "Resets PubSubHubbub subscription status for push-enabled feeds."
 msgstr "Herstelt PubSubHubbub abonnement status voor gepushte feeds."
 
-#: classes/pref/feeds.php:1169
-#: classes/pref/feeds.php:1222
+#: classes/pref/feeds.php:1169 classes/pref/feeds.php:1222
 msgid "All done."
 msgstr "Alles gedaan."
 
@@ -2325,8 +2174,7 @@ msgstr "Inactieve feeds"
 msgid "Edit selected feeds"
 msgstr "Bewerk geselecteerde feeds"
 
-#: classes/pref/feeds.php:1338
-#: js/prefs.js:1779
+#: classes/pref/feeds.php:1338 js/prefs.js:1779
 msgid "Batch subscribe"
 msgstr "Batchmatig abonneren"
 
@@ -2363,12 +2211,17 @@ msgid "OPML"
 msgstr "OPML"
 
 #: classes/pref/feeds.php:1427
-msgid "Using OPML you can export and import your feeds, filters, labels and Tiny Tiny RSS settings."
-msgstr "Met OPML kunt u feeds, filters, labels en Tiny Tiny RSS instellingen exporteren en importeren."
+msgid ""
+"Using OPML you can export and import your feeds, filters, labels and Tiny "
+"Tiny RSS settings."
+msgstr ""
+"Met OPML kunt u feeds, filters, labels en Tiny Tiny RSS instellingen "
+"exporteren en importeren."
 
 #: classes/pref/feeds.php:1429
 msgid "Only main settings profile can be migrated using OPML."
-msgstr "Alleen het hoofdprofiel van de instellingen kan worden overgebracht met OPML."
+msgstr ""
+"Alleen instellingen van het hoofdprofiel kunnen worden overgebracht met OPML."
 
 #: classes/pref/feeds.php:1442
 msgid "Import my OPML"
@@ -2380,19 +2233,27 @@ msgstr "Bestandsnaam:"
 
 #: classes/pref/feeds.php:1448
 msgid "Include settings"
-msgstr "toevoegingsinstellingen"
+msgstr "Toevoegingsinstellingen"
 
 #: classes/pref/feeds.php:1452
 msgid "Export OPML"
 msgstr "OPML exporteren"
 
 #: classes/pref/feeds.php:1456
-msgid "Your OPML can be published publicly and can be subscribed by anyone who knows the URL below."
-msgstr "Uw OPML kan openbaar worden gepubliceerd en er kan op worden geabonneerd door iedereen die de URL hieronder kent."
+msgid ""
+"Your OPML can be published publicly and can be subscribed by anyone who "
+"knows the URL below."
+msgstr ""
+"Uw OPML kan openbaar worden gepubliceerd en er kan op worden geabonneerd "
+"door iedereen die de URL hieronder kent."
 
 #: classes/pref/feeds.php:1458
-msgid "Published OPML does not include your Tiny Tiny RSS settings, feeds that require authentication or feeds hidden from Popular feeds."
-msgstr "De gepubliceerde OPML bevatten niet uw Tiny Tiny RSS instellingen, feeds die authenticatie vereisen of feeds verborgen voor Populaire feeds."
+msgid ""
+"Published OPML does not include your Tiny Tiny RSS settings, feeds that "
+"require authentication or feeds hidden from Popular feeds."
+msgstr ""
+"De gepubliceerde OPML bevatten niet uw Tiny Tiny RSS instellingen, feeds die "
+"authenticatie vereisen of feeds verborgen voor Populaire feeds."
 
 #: classes/pref/feeds.php:1460
 msgid "Public OPML URL"
@@ -2407,8 +2268,12 @@ msgid "Firefox integration"
 msgstr "Firefox integratie"
 
 #: classes/pref/feeds.php:1472
-msgid "This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the link below."
-msgstr "Deze Tiny Tiny RSS site kan gebruikt worden als een Firefox Feed Reader door op de link hieronder te klikken."
+msgid ""
+"This Tiny Tiny RSS site can be used as a Firefox Feed Reader by clicking the "
+"link below."
+msgstr ""
+"Deze Tiny Tiny RSS site kan gebruikt worden als een Firefox Feed Reader door "
+"op de link hieronder te klikken."
 
 #: classes/pref/feeds.php:1479
 msgid "Click here to register this site as a feed reader."
@@ -2423,8 +2288,12 @@ msgid "Published articles and generated feeds"
 msgstr "Gepubliceerde artikelen en gegenereerde feeds"
 
 #: classes/pref/feeds.php:1491
-msgid "Published articles are exported as a public RSS feed and can be subscribed by anyone who knows the URL specified below."
-msgstr "Gepubliceerde artikelen worden geëxporteerd als publieke RSS-feed en er kan door iedereen die de URL hieronder kent op worden geabonneerd."
+msgid ""
+"Published articles are exported as a public RSS feed and can be subscribed "
+"by anyone who knows the URL specified below."
+msgstr ""
+"Gepubliceerde artikelen worden geëxporteerd als publieke RSS-feed en er kan "
+"door iedereen die de URL hieronder kent op worden geabonneerd."
 
 #: classes/pref/feeds.php:1497
 msgid "Display URL"
@@ -2447,16 +2316,16 @@ msgid "Unshare all articles"
 msgstr "Delen alle artikelen teniet doen"
 
 #: classes/pref/feeds.php:1582
-msgid "These feeds have not been updated with new content for 3 months (oldest first):"
+msgid ""
+"These feeds have not been updated with new content for 3 months (oldest "
+"first):"
 msgstr "Deze feeds hebben al 3 maanden geen nieuwe inhoud (oudste eerst):"
 
-#: classes/pref/feeds.php:1619
-#: classes/pref/feeds.php:1689
+#: classes/pref/feeds.php:1619 classes/pref/feeds.php:1689
 msgid "Click to edit feed"
 msgstr "Klik om feed te bewerken"
 
-#: classes/pref/feeds.php:1637
-#: classes/pref/feeds.php:1709
+#: classes/pref/feeds.php:1637 classes/pref/feeds.php:1709
 msgid "Unsubscribe from selected feeds"
 msgstr "Abonnement opzeggen voor geselecteerde feeds"
 
@@ -2466,7 +2335,9 @@ msgstr "Deze feeds zijn niet bijgewerkt omdat er fouten zijn opgetreden:"
 
 #: classes/pref/feeds.php:1814
 msgid "Add one valid RSS feed per line (no feed detection is done)"
-msgstr "Een geldige RSS feed per regel toevoegen (geen feed detectie uitgevoerd)"
+msgstr ""
+"Een geldige RSS feed per regel toevoegen (er wordt geen feed detectie "
+"uitgevoerd)"
 
 #: classes/pref/feeds.php:1823
 msgid "Feeds to subscribe, One per line"
@@ -2478,37 +2349,35 @@ msgstr "Feeds vereisen authenticatie."
 
 #: classes/pref/system.php:25
 msgid "Error Log"
-msgstr ""
+msgstr "Fouten Log"
 
 #: classes/pref/system.php:36
-#, fuzzy
 msgid "Refresh"
-msgstr "Nieuw"
+msgstr "Herlaad"
 
 #: classes/pref/system.php:41
 msgid "Error"
-msgstr ""
+msgstr "Fout"
 
 #: classes/pref/system.php:42
-#, fuzzy
 msgid "Filename"
-msgstr "Bestandsnaam:"
+msgstr "Bestandsnaam"
 
 #: classes/pref/system.php:43
 msgid "Message"
-msgstr ""
+msgstr "Bericht"
 
 #: classes/pref/system.php:45
 msgid "Date"
 msgstr "Datum"
 
 #: plugins/digest/digest_body.php:57
-#, fuzzy
-msgid "Your browser doesn't support Javascript, which is required for this application to function properly. Please check your browser settings."
+msgid ""
+"Your browser doesn't support Javascript, which is required for this "
+"application to function properly. Please check your browser settings."
 msgstr ""
-"Uw browser ondersteunt geen Javascript. Dit is vereist voor\n"
-"\t\t\thet goed functioneren van deze applicatie. Controleer aub uw\n"
-"\t\t\tbrowser instellingen."
+"Uw browser ondersteunt geen Javascript. Dit is vereist voor het goed "
+"functioneren van deze applicatie. Controleer aub uw browser instellingen."
 
 #: plugins/digest/digest_body.php:72
 msgid "Hello,"
@@ -2522,8 +2391,7 @@ msgstr "Reguliere versie"
 msgid "Close article"
 msgstr "Sluit artikel"
 
-#: plugins/nsfw/init.php:29
-#: plugins/nsfw/init.php:40
+#: plugins/nsfw/init.php:29 plugins/nsfw/init.php:40
 msgid "Not work safe (click to toggle)"
 msgstr "NVVW (Niet Veilig Voor Werk) (klik om in/uit te schakelen)"
 
@@ -2556,10 +2424,9 @@ msgstr "Oud wachtwoord is onjuist."
 #: plugins/mobile/mobile-functions.php:176
 #: plugins/mobile/mobile-functions.php:203
 #: plugins/mobile/mobile-functions.php:239
-#: plugins/mobile/mobile-functions.php:376
-#: plugins/mobile/prefs.php:25
+#: plugins/mobile/mobile-functions.php:376 plugins/mobile/prefs.php:25
 msgid "Home"
-msgstr "Thuisbasis"
+msgstr "Startpagina"
 
 #: plugins/mobile/mobile-functions.php:412
 msgid "Nothing found (click to reload feed)."
@@ -2573,27 +2440,21 @@ msgstr "Open de reguliere versie"
 msgid "Enable categories"
 msgstr "Inschakelen categorieën"
 
-#: plugins/mobile/prefs.php:31
-#: plugins/mobile/prefs.php:36
-#: plugins/mobile/prefs.php:42
-#: plugins/mobile/prefs.php:47
-#: plugins/mobile/prefs.php:52
-#: plugins/mobile/prefs.php:57
+#: plugins/mobile/prefs.php:31 plugins/mobile/prefs.php:36
+#: plugins/mobile/prefs.php:42 plugins/mobile/prefs.php:47
+#: plugins/mobile/prefs.php:52 plugins/mobile/prefs.php:57
 msgid "ON"
 msgstr "AAN"
 
-#: plugins/mobile/prefs.php:31
-#: plugins/mobile/prefs.php:36
-#: plugins/mobile/prefs.php:42
-#: plugins/mobile/prefs.php:47
-#: plugins/mobile/prefs.php:52
-#: plugins/mobile/prefs.php:57
+#: plugins/mobile/prefs.php:31 plugins/mobile/prefs.php:36
+#: plugins/mobile/prefs.php:42 plugins/mobile/prefs.php:47
+#: plugins/mobile/prefs.php:52 plugins/mobile/prefs.php:57
 msgid "OFF"
 msgstr "UIT"
 
 #: plugins/mobile/prefs.php:35
 msgid "Browse categories like folders"
-msgstr "Browse categorieën als mappen"
+msgstr "Geef categorieën als mappen weer"
 
 #: plugins/mobile/prefs.php:41
 msgid "Show images in posts"
@@ -2605,17 +2466,14 @@ msgstr "Verberg gelezen artikelen en feeds"
 
 #: plugins/mobile/prefs.php:51
 msgid "Sort feeds by unread count"
-msgstr "sorteer feeds op ongelezen aantallen"
+msgstr "Sorteer feeds op ongelezen aantallen"
 
-#: plugins/mailto/init.php:49
-#: plugins/mailto/init.php:55
-#: plugins/mail/init.php:64
-#: plugins/mail/init.php:70
+#: plugins/mailto/init.php:49 plugins/mailto/init.php:55
+#: plugins/mail/init.php:64 plugins/mail/init.php:70
 msgid "[Forwarded]"
 msgstr "[Doorgestuurd]"
 
-#: plugins/mailto/init.php:49
-#: plugins/mail/init.php:64
+#: plugins/mailto/init.php:49 plugins/mail/init.php:64
 msgid "Multiple articles"
 msgstr "Meerdere artikelen"
 
@@ -2628,8 +2486,11 @@ msgid "Forward selected article(s) by email."
 msgstr "Geselecteerde artikel(en) doorsturen per e-mail."
 
 #: plugins/mailto/init.php:78
-msgid "You should be able to edit the message before sending in your mail client."
-msgstr "U zou in staat moeten zijn het bericht te bewerken vóórdat u het verzendt met uw e-mail cliënt."
+msgid ""
+"You should be able to edit the message before sending in your mail client."
+msgstr ""
+"U zou in staat moeten zijn het bericht te bewerken vóórdat u het verzendt "
+"met uw e-mail cliënt."
 
 #: plugins/mailto/init.php:83
 msgid "Close this dialog"
@@ -2640,8 +2501,13 @@ msgid "Bookmarklets"
 msgstr "Bookmarklets"
 
 #: plugins/bookmarklets/init.php:22
-msgid "Drag the link below to your browser toolbar, open the feed you're interested in in your browser and click on the link to subscribe to it."
-msgstr "Sleep de link hieronder naar uw browser's werkbalk, open de feed waar u geïnteresseerd in bent in uw browser en klik op de link om u er op te abonneren."
+msgid ""
+"Drag the link below to your browser toolbar, open the feed you're interested "
+"in in your browser and click on the link to subscribe to it."
+msgstr ""
+"Sleep de link hieronder naar uw browser's werkbalk, open de feed waar u "
+"geïnteresseerd in bent in uw browser en klik op de link om u er op te "
+"abonneren."
 
 #: plugins/bookmarklets/init.php:26
 #, php-format
@@ -2654,7 +2520,9 @@ msgstr "Abonneren in Tiny Tiny RSS"
 
 #: plugins/bookmarklets/init.php:32
 msgid "Use this bookmarklet to publish arbitrary pages using Tiny Tiny RSS"
-msgstr "Gebruik deze bookmarklet om arbitraire pagina's met Tiny Tiny RSS te publiceren"
+msgstr ""
+"Gebruik deze bookmarklet om willekeurige pagina's met Tiny Tiny RSS te "
+"publiceren"
 
 #: plugins/import_export/init.php:58
 msgid "Import and export"
@@ -2665,8 +2533,12 @@ msgid "Article archive"
 msgstr "Artikelarchief"
 
 #: plugins/import_export/init.php:62
-msgid "You can export and import your Starred and Archived articles for safekeeping or when migrating between tt-rss instances."
-msgstr "U kunt uw gearchiveerde of artikelen met ster exporteren en importeren om veilig te bewaren wanneer u migreert tussen tt-rss instanties."
+msgid ""
+"You can export and import your Starred and Archived articles for safekeeping "
+"or when migrating between tt-rss instances."
+msgstr ""
+"U kunt uw gearchiveerde of artikelen met ster exporteren en importeren om "
+"veilig te bewaren wanneer u migreert tussen tt-rss instanties."
 
 #: plugins/import_export/init.php:65
 msgid "Export my data"
@@ -2682,32 +2554,32 @@ msgstr "Kon niet importeren: onjuiste schema versie."
 
 #: plugins/import_export/init.php:222
 msgid "Could not import: unrecognized document format."
-msgstr "Kon niet importeren: onbekend documentformaat."
+msgstr "Kon niet importeren: onbekend documentindeling."
 
 #: plugins/import_export/init.php:381
 msgid "Finished: "
-msgstr ""
+msgstr "Klaar:"
 
 #: plugins/import_export/init.php:382
-#, fuzzy, php-format
+#, php-format
 msgid "%d article processed, "
 msgid_plural "%d articles processed, "
-msgstr[0] "Bewerk artikel notitie"
-msgstr[1] "Bewerk artikel notitie"
+msgstr[0] "%d artikel verwerkt, "
+msgstr[1] "%d artikels verwerkt, "
 
 #: plugins/import_export/init.php:383
 #, php-format
 msgid "%d imported, "
 msgid_plural "%d imported, "
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%d geïmporteerd, "
+msgstr[1] "%d geïmporteerd, "
 
 #: plugins/import_export/init.php:384
-#, fuzzy, php-format
+#, php-format
 msgid "%d feed created."
 msgid_plural "%d feeds created."
-msgstr[0] "Geen feeds geselecteerd."
-msgstr[1] "Geen feeds geselecteerd."
+msgstr[0] "%d feed gemaakt."
+msgstr[1] "%d feeds gemaakt."
 
 #: plugins/import_export/init.php:389
 msgid "Could not load XML document."
@@ -2717,10 +2589,9 @@ msgstr "Kon XML-document niet laden."
 msgid "Prepare data"
 msgstr "Voorbereiden data"
 
-#: plugins/import_export/init.php:444
-#: plugins/googlereaderimport/init.php:92
+#: plugins/import_export/init.php:444 plugins/googlereaderimport/init.php:92
 msgid "No file uploaded."
-msgstr ""
+msgstr "Geen bestand geupload."
 
 #: plugins/mail/init.php:85
 msgid "From:"
@@ -2736,10 +2607,9 @@ msgstr "Onderwerp:"
 
 #: plugins/mail/init.php:123
 msgid "Send e-mail"
-msgstr "Zend e-mail"
+msgstr "Verzend e-mail"
 
-#: plugins/note/init.php:26
-#: plugins/note/note.js:11
+#: plugins/note/init.php:26 plugins/note/note.js:11
 msgid "Edit article note"
 msgstr "Bewerk artikel notitie"
 
@@ -2758,57 +2628,51 @@ msgstr "Geef waarde"
 #: plugins/googlereaderimport/init.php:178
 #, php-format
 msgid "All done. %d out of %d articles imported."
-msgstr ""
+msgstr "Klaar. %d van de %d artikels geïmporteerd."
 
 #: plugins/googlereaderimport/init.php:182
 msgid "The document has incorrect format."
-msgstr ""
+msgstr "Het document heeft een onbekende indeling."
 
 #: plugins/googlereaderimport/init.php:353
 msgid "Import starred or shared items from Google Reader"
-msgstr ""
+msgstr "Importeer gedeelde items of items met ster van Google Reader"
 
 #: plugins/googlereaderimport/init.php:357
 msgid "Paste your starred.json or shared.json into the form below."
-msgstr ""
+msgstr "Plak je starred.json of shared.json hieronder."
 
 #: plugins/googlereaderimport/init.php:371
 msgid "Import my Starred items"
-msgstr ""
+msgstr "Importeer items met Ster"
 
 #: plugins/instances/init.php:141
 msgid "Linked"
 msgstr "Gekoppeld"
 
-#: plugins/instances/init.php:204
-#: plugins/instances/init.php:395
+#: plugins/instances/init.php:204 plugins/instances/init.php:395
 msgid "Instance"
 msgstr "Instantie"
 
-#: plugins/instances/init.php:215
-#: plugins/instances/init.php:312
+#: plugins/instances/init.php:215 plugins/instances/init.php:312
 #: plugins/instances/init.php:404
 msgid "Instance URL"
-msgstr "instantie URL"
+msgstr "Instantie URL"
 
-#: plugins/instances/init.php:226
-#: plugins/instances/init.php:414
+#: plugins/instances/init.php:226 plugins/instances/init.php:414
 msgid "Access key:"
 msgstr "Toegangssleutel:"
 
-#: plugins/instances/init.php:229
-#: plugins/instances/init.php:313
+#: plugins/instances/init.php:229 plugins/instances/init.php:313
 #: plugins/instances/init.php:417
 msgid "Access key"
 msgstr "Toegangssleutel"
 
-#: plugins/instances/init.php:233
-#: plugins/instances/init.php:421
+#: plugins/instances/init.php:233 plugins/instances/init.php:421
 msgid "Use one access key for both linked instances."
 msgstr "Gebruik één toegang-sleutel voor beide gekoppelde instanties."
 
-#: plugins/instances/init.php:241
-#: plugins/instances/init.php:429
+#: plugins/instances/init.php:241 plugins/instances/init.php:429
 msgid "Generate new key"
 msgstr "Genereer nieuwe sleutel"
 
@@ -2817,8 +2681,13 @@ msgid "Link instance"
 msgstr "Link instantie"
 
 #: plugins/instances/init.php:304
-msgid "You can connect other instances of Tiny Tiny RSS to this one to share Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:"
-msgstr "U kunt deze instantie verbinden met andere instanties van Tiny Tiny RSS om Populaire feeds te delen. Verbindt deze instantie van Tiny Tiny RSS  met deze URL:"
+msgid ""
+"You can connect other instances of Tiny Tiny RSS to this one to share "
+"Popular feeds. Link to this instance of Tiny Tiny RSS by using this URL:"
+msgstr ""
+"U kunt deze instantie verbinden met andere instanties van Tiny Tiny RSS om "
+"Populaire feeds te delen. Verbindt deze instantie van Tiny Tiny RSS  met "
+"deze URL:"
 
 #: plugins/instances/init.php:314
 msgid "Last connected"
@@ -2844,8 +2713,7 @@ msgstr "Deel via URL"
 msgid "You can share this article by the following unique URL:"
 msgstr "U kunt dit artikel delen via de volgende unieke URL:"
 
-#: plugins/updater/init.php:321
-#: plugins/updater/init.php:338
+#: plugins/updater/init.php:321 plugins/updater/init.php:338
 #: plugins/updater/updater.js:10
 msgid "Update Tiny Tiny RSS"
 msgstr "Tiny Tiny RSS bijwerken"
@@ -2855,85 +2723,87 @@ msgid "Your Tiny Tiny RSS installation is up to date."
 msgstr "Uw Tiny Tiny RSS installatie is up-to-date."
 
 #: plugins/updater/init.php:349
-#, fuzzy
 msgid "Do not close this dialog until updating is finished."
-msgstr "Sluit dit dialoogvenster niet voordat het bijwerken klaar is. Maak een back-up van uw tt-rss map alvorens verder te gaan."
+msgstr "Sluit dit dialoogvenster niet voordat het bijwerken klaar is."
 
 #: plugins/updater/init.php:358
 msgid "It is suggested to backup your tt-rss directory first."
-msgstr ""
+msgstr "Het is raadzaam eerst een backup van je tt-rss map te maken."
 
 #: plugins/updater/init.php:359
 msgid "Your database will not be modified."
-msgstr ""
+msgstr "Je database wordt niet aangepast."
 
 #: plugins/updater/init.php:360
-msgid "Your current tt-rss installation directory will not be modified. It will be renamed and left in the parent directory. You will be able to migrate all your customized files after update finishes."
+msgid ""
+"Your current tt-rss installation directory will not be modified. It will be "
+"renamed and left in the parent directory. You will be able to migrate all "
+"your customized files after update finishes."
 msgstr ""
+"Je huidige tt-rss installatie map wordt niet aangepast. Deze wordt hernoemd "
+"en in de hoofdmap gelaten. Je kan al je aangepaste bestanden overzetten "
+"nadat de update voltooid is."
 
 #: plugins/updater/init.php:361
 msgid "Ready to update."
-msgstr "Klaar voor bijwerken."
+msgstr "Klaar om bij te werken."
 
 #: plugins/updater/init.php:366
 msgid "Start update"
 msgstr "Start update"
 
-#: js/feedlist.js:395
-#: js/feedlist.js:423
-#: plugins/digest/digest.js:26
+#: js/feedlist.js:395 js/feedlist.js:423 plugins/digest/digest.js:26
 msgid "Mark all articles in %s as read?"
 msgstr "Markeer alle artikelen in %s als gelezen?"
 
 #: js/feedlist.js:414
-#, fuzzy
 msgid "Mark all articles in %s older than 1 day as read?"
-msgstr "Markeer alle artikelen in %s als gelezen?"
+msgstr "Markeer alle artikelen in %s ouder dan 1 dag als gelezen?"
 
 #: js/feedlist.js:417
-#, fuzzy
 msgid "Mark all articles in %s older than 1 week as read?"
-msgstr "Markeer alle artikelen in %s als gelezen?"
+msgstr "Markeer alle artikelen in %s ouder dan 1 week als gelezen?"
 
 #: js/feedlist.js:420
-#, fuzzy
 msgid "Mark all articles in %s older than 2 weeks as read?"
-msgstr "Markeer alle artikelen in %s als gelezen?"
+msgstr "Markeer alle artikelen in %s ouder dan 2 weken als gelezen?"
 
 #: js/functions.js:65
 msgid "The error will be reported to the configured log destination."
-msgstr ""
+msgstr "De fout wordt in het geconfigureerde log vastgelegd."
 
 #: js/functions.js:107
-msgid "Are you sure to report this exception to tt-rss.org? The report will include your browser information. Your IP would be saved in the database."
-msgstr "Weet u zeker dat u deze uitzondering wilt rapporteren aan tt-rss.org? Het rapport zal uw browser informatie bevatten. Uw IP-adres zal bewaard worden in een database."
+msgid ""
+"Are you sure to report this exception to tt-rss.org? The report will include "
+"your browser information. Your IP would be saved in the database."
+msgstr ""
+"Weet u zeker dat u deze uitzondering wilt rapporteren aan tt-rss.org? Het "
+"rapport zal uw browser informatie bevatten. Uw IP-adres zal bewaard worden "
+"in een database."
 
 #: js/functions.js:236
-#, fuzzy
 msgid "Click to close"
-msgstr "Klik voor pauze"
+msgstr "Klik om te sluiten"
 
 #: js/functions.js:612
 msgid "Error explained"
-msgstr ""
+msgstr "Fout uitleg"
 
 #: js/functions.js:694
 msgid "Upload complete."
-msgstr ""
+msgstr "Upload voltooid."
 
 #: js/functions.js:718
 msgid "Remove stored feed icon?"
 msgstr "Opgeslagen feed pictogram verwijderen?"
 
 #: js/functions.js:723
-#, fuzzy
 msgid "Removing feed icon..."
-msgstr "Opgeslagen feed pictogram verwijderen?"
+msgstr "Opgeslagen feed pictogram verwijderen..."
 
 #: js/functions.js:728
-#, fuzzy
 msgid "Feed icon removed."
-msgstr "Feed niet gevonden."
+msgstr "Feed pictogram verwijderd."
 
 #: js/functions.js:750
 msgid "Please select an image file to upload."
@@ -2944,9 +2814,8 @@ msgid "Upload new icon for this feed?"
 msgstr "Nieuw pictogram voor deze feed uploaden?"
 
 #: js/functions.js:753
-#, fuzzy
 msgid "Uploading, please wait..."
-msgstr "Aan 't laden, even wachten aub..."
+msgstr "Aan 't uploaden, even wachten aub..."
 
 #: js/functions.js:769
 msgid "Please enter label caption:"
@@ -2954,7 +2823,7 @@ msgstr "Geeft een onderschrift voor label:"
 
 #: js/functions.js:774
 msgid "Can't create label: missing caption."
-msgstr "Kan geen label aanmaken: onderschrift ontbreekt"
+msgstr "Kan label niet aanmaken: onderschrift ontbreekt."
 
 #: js/functions.js:817
 msgid "Subscribe to Feed"
@@ -2973,9 +2842,8 @@ msgid "Specified URL doesn't seem to contain any feeds."
 msgstr "Gespecificeerde URL lijkt geen feeds te bevatten."
 
 #: js/functions.js:862
-#, fuzzy
 msgid "Expand to select feed"
-msgstr "Bewerk geselecteerde feeds"
+msgstr "Uitklappen tot geselecteerde feed"
 
 #: js/functions.js:874
 msgid "Couldn't download the specified URL: %s"
@@ -2983,7 +2851,7 @@ msgstr "Kon de gespecificeerde URL: %s niet downloaden"
 
 #: js/functions.js:878
 msgid "XML validation failed: %s"
-msgstr ""
+msgstr "XML validatie mislukt: %s"
 
 #: js/functions.js:883
 msgid "You are already subscribed to this feed."
@@ -3002,22 +2870,24 @@ msgid "Create Filter"
 msgstr "Filter aanmaken"
 
 #: js/functions.js:1191
-msgid "Reset subscription? Tiny Tiny RSS will try to subscribe to the notification hub again on next feed update."
-msgstr "Abonnement opnieuw instellen? Tiny Tiny RSS zal proberen zich opnieuw op de notification hub te abonneren bij de volgende feed update."
+msgid ""
+"Reset subscription? Tiny Tiny RSS will try to subscribe to the notification "
+"hub again on next feed update."
+msgstr ""
+"Abonnement opnieuw instellen? Tiny Tiny RSS zal proberen zich opnieuw op de "
+"notification hub te abonneren bij de volgende feed update."
 
 #: js/functions.js:1202
-#, fuzzy
 msgid "Subscription reset."
-msgstr "Abonneren op feed..."
+msgstr "Abonnement hersteld."
 
-#: js/functions.js:1212
-#: js/tt-rss.js:650
+#: js/functions.js:1212 js/tt-rss.js:650
 msgid "Unsubscribe from %s?"
 msgstr "Abonnement opzeggen voor %s?"
 
 #: js/functions.js:1215
 msgid "Removing feed..."
-msgstr ""
+msgstr "Feed wordt verwijderd..."
 
 #: js/functions.js:1324
 msgid "Please enter category title:"
@@ -3025,64 +2895,53 @@ msgstr "Vul titel van categorie in aub:"
 
 #: js/functions.js:1355
 msgid "Generate new syndication address for this feed?"
-msgstr "nieuw syndicatie-adres voor deze feed genereren?"
+msgstr "Nieuw syndicatie-adres voor deze feed genereren?"
 
-#: js/functions.js:1359
-#: js/prefs.js:1231
+#: js/functions.js:1359 js/prefs.js:1231
 msgid "Trying to change address..."
-msgstr ""
+msgstr "Adres aan het aanpassen..."
 
-#: js/functions.js:1546
-#: js/tt-rss.js:421
-#: js/tt-rss.js:631
+#: js/functions.js:1546 js/tt-rss.js:421 js/tt-rss.js:631
 msgid "You can't edit this kind of feed."
 msgstr "U kunt dit type feed niet bewerken."
 
 #: js/functions.js:1561
 msgid "Edit Feed"
-msgstr "Bewerken feed"
+msgstr "Bewerk feed"
 
-#: js/functions.js:1567
-#: js/prefs.js:194
-#: js/prefs.js:749
-#, fuzzy
+#: js/functions.js:1567 js/prefs.js:194 js/prefs.js:749
 msgid "Saving data..."
-msgstr "Gegevens opslaan"
+msgstr "Gegevens opslaan..."
 
 #: js/functions.js:1599
 msgid "More Feeds"
 msgstr "Meer feeds"
 
-#: js/functions.js:1660
-#: js/functions.js:1770
-#: js/prefs.js:397
-#: js/prefs.js:427
-#: js/prefs.js:459
-#: js/prefs.js:642
-#: js/prefs.js:662
-#: js/prefs.js:1207
+#: js/functions.js:1660 js/functions.js:1770 js/prefs.js:397 js/prefs.js:427
+#: js/prefs.js:459 js/prefs.js:642 js/prefs.js:662 js/prefs.js:1207
 #: js/prefs.js:1352
 msgid "No feeds are selected."
 msgstr "Er zijn geen feeds geselecteerd."
 
 #: js/functions.js:1702
-msgid "Remove selected feeds from the archive? Feeds with stored articles will not be removed."
-msgstr "Geselecteerde feeds uit het archief verwijderen? Feeds met opgeslagen artikelen zullen niet worden verwijderd."
+msgid ""
+"Remove selected feeds from the archive? Feeds with stored articles will not "
+"be removed."
+msgstr ""
+"Geselecteerde feeds uit het archief verwijderen? Feeds met opgeslagen "
+"artikelen zullen niet worden verwijderd."
 
 #: js/functions.js:1741
 msgid "Feeds with update errors"
 msgstr "Feeds met update fouten"
 
-#: js/functions.js:1752
-#: js/prefs.js:1189
+#: js/functions.js:1752 js/prefs.js:1189
 msgid "Remove selected feeds?"
 msgstr "Geselecteerde feeds verwijderen?"
 
-#: js/functions.js:1755
-#: js/prefs.js:1192
-#, fuzzy
+#: js/functions.js:1755 js/prefs.js:1192
 msgid "Removing selected feeds..."
-msgstr "Geselecteerde feeds verwijderen?"
+msgstr "Geselecteerde feeds verwijderen..."
 
 #: js/functions.js:1853
 msgid "Help"
@@ -3106,16 +2965,15 @@ msgstr "Geef loginID aub:"
 
 #: js/prefs.js:62
 msgid "Can't create user: no login specified."
-msgstr "Kan geen gebruiker aanmaken: geen loginID gespecificeerd."
+msgstr "Kan gebruiker niet aanmaken: geen loginID gespecificeerd."
 
 #: js/prefs.js:66
-#, fuzzy
 msgid "Adding user..."
-msgstr "filter toevoegen..."
+msgstr "Gebruiker toevoegen..."
 
 #: js/prefs.js:94
 msgid "User Editor"
-msgstr "Gebruiker's Editor"
+msgstr "Gebruikers bewerken"
 
 #: js/prefs.js:117
 msgid "Edit Filter"
@@ -3126,37 +2984,34 @@ msgid "Remove filter?"
 msgstr "Filter verwijderen?"
 
 #: js/prefs.js:169
-#, fuzzy
 msgid "Removing filter..."
-msgstr "filter toevoegen..."
+msgstr "Filter verwijderen..."
 
 #: js/prefs.js:279
 msgid "Remove selected labels?"
 msgstr "Geselecteerde labels verwijderen?"
 
 #: js/prefs.js:282
-#, fuzzy
 msgid "Removing selected labels..."
-msgstr "Geselecteerde labels verwijderen?"
+msgstr "Geselecteerde labels verwijderen..."
 
-#: js/prefs.js:295
-#: js/prefs.js:1393
+#: js/prefs.js:295 js/prefs.js:1393
 msgid "No labels are selected."
 msgstr "Er zijn geen labels geselecteerd."
 
 #: js/prefs.js:309
-msgid "Remove selected users? Neither default admin nor your account will be removed."
-msgstr "Geselecteerde gebruikers verwijderen? Noch de standaard admin gebruiker, noch uw eigen account zal worden verwijderd."
+msgid ""
+"Remove selected users? Neither default admin nor your account will be "
+"removed."
+msgstr ""
+"Geselecteerde gebruikers verwijderen? Noch de standaard admin gebruiker, "
+"noch uw eigen account zal worden verwijderd."
 
 #: js/prefs.js:312
-#, fuzzy
 msgid "Removing selected users..."
-msgstr "Geselecteerde filters verwijderen?"
+msgstr "Geselecteerde gebruikers verwijderen..."
 
-#: js/prefs.js:326
-#: js/prefs.js:507
-#: js/prefs.js:528
-#: js/prefs.js:567
+#: js/prefs.js:326 js/prefs.js:507 js/prefs.js:528 js/prefs.js:567
 msgid "No users are selected."
 msgstr "Er zijn geen gebruikers geselecteerd."
 
@@ -3165,13 +3020,10 @@ msgid "Remove selected filters?"
 msgstr "Geselecteerde filters verwijderen?"
 
 #: js/prefs.js:347
-#, fuzzy
 msgid "Removing selected filters..."
-msgstr "Geselecteerde filters verwijderen?"
+msgstr "Geselecteerde filters verwijderen..."
 
-#: js/prefs.js:359
-#: js/prefs.js:597
-#: js/prefs.js:616
+#: js/prefs.js:359 js/prefs.js:597 js/prefs.js:616
 msgid "No filters are selected."
 msgstr "Er zijn geen filters geselecteerd."
 
@@ -3180,9 +3032,8 @@ msgid "Unsubscribe from selected feeds?"
 msgstr "Abonnement opzeggen voor geselecteerde feeds?"
 
 #: js/prefs.js:382
-#, fuzzy
 msgid "Unsubscribing from selected feeds..."
-msgstr "Abonnement opzeggen voor geselecteerde feeds"
+msgstr "Abonnement opzeggen voor geselecteerde feeds..."
 
 #: js/prefs.js:412
 msgid "Please select only one feed."
@@ -3193,31 +3044,27 @@ msgid "Erase all non-starred articles in selected feed?"
 msgstr "Alle artikelen zonder ster in deze feed wissen?"
 
 #: js/prefs.js:421
-#, fuzzy
 msgid "Clearing selected feed..."
-msgstr "Bewerk geselecteerde feeds"
+msgstr "Geselecteerde feed opruimen..."
 
 #: js/prefs.js:440
 msgid "How many days of articles to keep (0 - use default)?"
-msgstr "hoeveel dagen moeten artikelen worden bewaard (0 = gebruik Standaard)?"
+msgstr ""
+"Hoeveel dagen moeten artikelen worden bewaard (0 = gebruik standaardwaarde)?"
 
 #: js/prefs.js:443
-#, fuzzy
 msgid "Purging selected feed..."
-msgstr "Bewerk geselecteerde feeds"
+msgstr "Geselecteerde feeds opschonen..."
 
 #: js/prefs.js:478
 msgid "Login field cannot be blank."
 msgstr "Het loginID veld kan niet leeg zijn."
 
 #: js/prefs.js:482
-#, fuzzy
 msgid "Saving user..."
-msgstr "filter toevoegen..."
+msgstr "Gebruiker opslaan..."
 
-#: js/prefs.js:512
-#: js/prefs.js:533
-#: js/prefs.js:572
+#: js/prefs.js:512 js/prefs.js:533 js/prefs.js:572
 msgid "Please select only one user."
 msgstr "Selecteer aub slechts één gebruiker."
 
@@ -3226,9 +3073,8 @@ msgid "Reset password of selected user?"
 msgstr "Wachtwoord van geselecteerde gebruiker opnieuw instellen?"
 
 #: js/prefs.js:540
-#, fuzzy
 msgid "Resetting password for selected user..."
-msgstr "Wachtwoord van geselecteerde gebruiker opnieuw instellen?"
+msgstr "Wachtwoord van geselecteerde gebruiker opnieuw instellen..."
 
 #: js/prefs.js:585
 msgid "User details"
@@ -3243,9 +3089,8 @@ msgid "Combine selected filters?"
 msgstr "Geselecteerde filters combineren?"
 
 #: js/prefs.js:623
-#, fuzzy
 msgid "Joining filters..."
-msgstr "filter toevoegen..."
+msgstr "Filters samenvoegen..."
 
 #: js/prefs.js:684
 msgid "Edit Multiple Feeds"
@@ -3263,34 +3108,33 @@ msgstr "OPML import"
 msgid "Please choose an OPML file first."
 msgstr "kies eerst een OPML-bestand aub."
 
-#: js/prefs.js:815
-#: plugins/import_export/import_export.js:115
+#: js/prefs.js:815 plugins/import_export/import_export.js:115
 #: plugins/googlereaderimport/init.js:45
-#, fuzzy
 msgid "Importing, please wait..."
-msgstr "Aan 't laden, even wachten aub..."
+msgstr "Aan 't importeren, even wachten aub..."
 
 #: js/prefs.js:982
 msgid "Reset to defaults?"
 msgstr "Terugzetten naar de standaardwaarden?"
 
 #: js/prefs.js:1096
-msgid "Remove category %s? Any nested feeds would be placed into Uncategorized."
-msgstr "Categorie %s verwijderen? elke genestelde feed zal in de rubriek 'Ongecategoriseerd' worden geplaatst."
+msgid ""
+"Remove category %s? Any nested feeds would be placed into Uncategorized."
+msgstr ""
+"Categorie %s verwijderen? elke genestelde feed zal in de rubriek "
+"'Ongecategoriseerd' worden geplaatst."
 
 #: js/prefs.js:1102
-#, fuzzy
 msgid "Removing category..."
-msgstr "Categorie verwijderen"
+msgstr "Categorie verwijderen..."
 
 #: js/prefs.js:1123
 msgid "Remove selected categories?"
 msgstr "Geselecteerde categorieën verwijderen?"
 
 #: js/prefs.js:1126
-#, fuzzy
 msgid "Removing selected categories..."
-msgstr "Geselecteerde categorieën verwijderen?"
+msgstr "Geselecteerde categorieën verwijderen..."
 
 #: js/prefs.js:1139
 msgid "No categories are selected."
@@ -3301,9 +3145,8 @@ msgid "Category title:"
 msgstr "Categorie titel:"
 
 #: js/prefs.js:1151
-#, fuzzy
 msgid "Creating category..."
-msgstr "Aanmaken filter…"
+msgstr "Aanmaken categorie…"
 
 #: js/prefs.js:1178
 msgid "Feeds without recent updates"
@@ -3311,30 +3154,28 @@ msgstr "Feeds zonder recente updates"
 
 #: js/prefs.js:1227
 msgid "Replace current OPML publishing address with a new one?"
-msgstr "huidig OPML publicatieadres vervangen door een nieuwe?"
+msgstr "Huidig OPML publicatieadres vervangen door een nieuwe?"
 
 #: js/prefs.js:1316
-#, fuzzy
 msgid "Clearing feed..."
-msgstr "Wis feed data"
+msgstr "Feed opruimen..."
 
 #: js/prefs.js:1336
 msgid "Rescore articles in selected feeds?"
 msgstr "Artikelen in geselecteerde feeds opnieuw een score geven?"
 
 #: js/prefs.js:1339
-#, fuzzy
 msgid "Rescoring selected feeds..."
-msgstr "Artikelen in geselecteerde feeds opnieuw een score geven?"
+msgstr "Geselecteerde feeds nieuwe score geven..."
 
 #: js/prefs.js:1359
 msgid "Rescore all articles? This operation may take a lot of time."
-msgstr "Alle artikelen opnieuw een score geven? Dit kan veel tjid in beslag nemen."
+msgstr ""
+"Alle artikelen opnieuw een score geven? Dit kan veel tijd in beslag nemen."
 
 #: js/prefs.js:1362
-#, fuzzy
 msgid "Rescoring feeds..."
-msgstr "Feed opnieuw score geven"
+msgstr "Feed opnieuw score geven..."
 
 #: js/prefs.js:1379
 msgid "Reset selected labels to default colors?"
@@ -3345,46 +3186,43 @@ msgid "Settings Profiles"
 msgstr "Instellingsprofielen"
 
 #: js/prefs.js:1425
-msgid "Remove selected profiles? Active and default profiles will not be removed."
-msgstr "Geselecteerde profielen verwijderen? Actieve en standaard profielen zullen niet worden verwijderd."
+msgid ""
+"Remove selected profiles? Active and default profiles will not be removed."
+msgstr ""
+"Geselecteerde profielen verwijderen? Actieve en standaard profielen zullen "
+"niet worden verwijderd."
 
 #: js/prefs.js:1428
-#, fuzzy
 msgid "Removing selected profiles..."
-msgstr "Verwijder geselecteerde profielen"
+msgstr "Geselecteerde profielen verwijderen..."
 
 #: js/prefs.js:1443
 msgid "No profiles are selected."
 msgstr "Er zijn geen profielen geselecteerd."
 
-#: js/prefs.js:1451
-#: js/prefs.js:1504
+#: js/prefs.js:1451 js/prefs.js:1504
 msgid "Activate selected profile?"
 msgstr "Geselecteerd profiel activeren?"
 
-#: js/prefs.js:1467
-#: js/prefs.js:1520
+#: js/prefs.js:1467 js/prefs.js:1520
 msgid "Please choose a profile to activate."
 msgstr "Kies een te activeren profiel aub."
 
 #: js/prefs.js:1472
-#, fuzzy
 msgid "Creating profile..."
-msgstr "Maak profiel"
+msgstr "Profiel aanmaken..."
 
 #: js/prefs.js:1528
 msgid "This will invalidate all previously generated feed URLs. Continue?"
 msgstr "Dit zal alle eerder gegenereerde feed-URL's ongeldig maken. Doorgaan?"
 
-#: js/prefs.js:1531
-#: js/prefs.js:1550
+#: js/prefs.js:1531 js/prefs.js:1550
 msgid "Clearing URLs..."
-msgstr ""
+msgstr "URLs opruimen..."
 
 #: js/prefs.js:1538
-#, fuzzy
 msgid "Generated URLs cleared."
-msgstr "Genereer nieuwe URL"
+msgstr "Genereerde URLs gewist."
 
 #: js/prefs.js:1547
 msgid "This will invalidate all previously shared article URLs. Continue?"
@@ -3392,7 +3230,7 @@ msgstr "Dit zal all eerder gedeelde artikel-URL's ongeldig maken. Doorgaan?"
 
 #: js/prefs.js:1557
 msgid "Shared URLs cleared."
-msgstr ""
+msgstr "Gedeelde URLs opgeruimd."
 
 #: js/prefs.js:1663
 msgid "Label Editor"
@@ -3411,9 +3249,8 @@ msgid "Mark all articles as read?"
 msgstr "Markeer alle artikelen als gelezen?"
 
 #: js/tt-rss.js:132
-#, fuzzy
 msgid "Marking all feeds as read..."
-msgstr "Markeer alle feeds als gelezen"
+msgstr "Alle feeds als gelezen markeren..."
 
 #: js/tt-rss.js:380
 msgid "Please enable mail plugin first."
@@ -3421,7 +3258,7 @@ msgstr "Eerst de e-mail plug-in inschakelen aub."
 
 #: js/tt-rss.js:492
 msgid "Please enable embed_original plugin first."
-msgstr "embed_original plug-in inschakelen aub."
+msgstr "Eerst embed_original plug-in inschakelen aub."
 
 #: js/tt-rss.js:618
 msgid "Select item(s) by tags"
@@ -3431,8 +3268,7 @@ msgstr "Selecteer item(s) via tags"
 msgid "You can't unsubscribe from the category."
 msgstr "U kunt het abonnementen niet opzeggen in deze categorie."
 
-#: js/tt-rss.js:644
-#: js/tt-rss.js:798
+#: js/tt-rss.js:644 js/tt-rss.js:798
 msgid "Please select some feed first."
 msgstr "Selecteer aub eerst een feed."
 
@@ -3445,9 +3281,8 @@ msgid "Rescore articles in %s?"
 msgstr "Artikelen in %s opnieuw een score geven?"
 
 #: js/tt-rss.js:806
-#, fuzzy
 msgid "Rescoring articles..."
-msgstr "Artikelen nieuwe score geven"
+msgstr "Artikelen nieuwe score geven..."
 
 #: js/tt-rss.js:940
 msgid "New version available!"
@@ -3457,98 +3292,83 @@ msgstr "Nieuwe versie beschikbaar!"
 msgid "Cancel search"
 msgstr "Zoeken annuleren"
 
-#: js/viewfeed.js:453
-#: plugins/digest/digest.js:258
+#: js/viewfeed.js:453 plugins/digest/digest.js:258
 #: plugins/digest/digest.js:714
 msgid "Unstar article"
 msgstr "Ster weghalen bij artikel"
 
-#: js/viewfeed.js:457
-#: plugins/digest/digest.js:260
+#: js/viewfeed.js:457 plugins/digest/digest.js:260
 #: plugins/digest/digest.js:718
 msgid "Star article"
 msgstr "Geef artikel een ster"
 
-#: js/viewfeed.js:497
-#: plugins/digest/digest.js:263
+#: js/viewfeed.js:497 plugins/digest/digest.js:263
 #: plugins/digest/digest.js:749
 msgid "Unpublish article"
 msgstr "Ongepubliceerd artikel"
 
-#: js/viewfeed.js:501
-#: plugins/digest/digest.js:265
+#: js/viewfeed.js:501 plugins/digest/digest.js:265
 #: plugins/digest/digest.js:754
 msgid "Publish article"
 msgstr "Artikel publiceren"
 
 #: js/viewfeed.js:653
-#, fuzzy
 msgid "%d article selected"
 msgid_plural "%d articles selected"
-msgstr[0] "Geen artikel geselecteerd."
-msgstr[1] "Geen artikel geselecteerd."
-
-#: js/viewfeed.js:725
-#: js/viewfeed.js:753
-#: js/viewfeed.js:780
-#: js/viewfeed.js:843
-#: js/viewfeed.js:877
-#: js/viewfeed.js:997
-#: js/viewfeed.js:1040
-#: js/viewfeed.js:1093
-#: js/viewfeed.js:2091
-#: plugins/mailto/init.js:7
+msgstr[0] "%d artikel geselecteerd"
+msgstr[1] "%d artikelen geselecteerd"
+
+#: js/viewfeed.js:725 js/viewfeed.js:753 js/viewfeed.js:780 js/viewfeed.js:843
+#: js/viewfeed.js:877 js/viewfeed.js:997 js/viewfeed.js:1040
+#: js/viewfeed.js:1093 js/viewfeed.js:2091 plugins/mailto/init.js:7
 #: plugins/mail/mail.js:7
 msgid "No articles are selected."
 msgstr "Geen artikelen geselecteerd."
 
 #: js/viewfeed.js:1005
-#, fuzzy
 msgid "Delete %d selected article in %s?"
 msgid_plural "Delete %d selected articles in %s?"
-msgstr[0] "Verwijder %d geselecteerde artikelen in %s?"
+msgstr[0] "Verwijder %d geselecteerd artikel in %s?"
 msgstr[1] "Verwijder %d geselecteerde artikelen in %s?"
 
 #: js/viewfeed.js:1007
-#, fuzzy
 msgid "Delete %d selected article?"
 msgid_plural "Delete %d selected articles?"
-msgstr[0] "Verwijder %d geselecteerde artikelen?"
+msgstr[0] "Verwijder %d geselecteerd artikel?"
 msgstr[1] "Verwijder %d geselecteerde artikelen?"
 
 #: js/viewfeed.js:1049
-#, fuzzy
 msgid "Archive %d selected article in %s?"
 msgid_plural "Archive %d selected articles in %s?"
-msgstr[0] "%d geselecteerd artikelen archiveren in %s?"
+msgstr[0] "%d geselecteerd artikel archiveren in %s?"
 msgstr[1] "%d geselecteerd artikelen archiveren in %s?"
 
 #: js/viewfeed.js:1052
-#, fuzzy
 msgid "Move %d archived article back?"
 msgid_plural "Move %d archived articles back?"
-msgstr[0] "%d gearchiveerde artikelen terugzetten?"
+msgstr[0] "%d gearchiveerd artikel terugzetten?"
 msgstr[1] "%d gearchiveerde artikelen terugzetten?"
 
 #: js/viewfeed.js:1054
-msgid "Please note that unstarred articles might get purged on next feed update."
+msgid ""
+"Please note that unstarred articles might get purged on next feed update."
 msgstr ""
+"Let op, artikels zonder ster kunnen verloren gaan bij de volgende feed "
+"update."
 
 #: js/viewfeed.js:1099
-#, fuzzy
 msgid "Mark %d selected article in %s as read?"
 msgid_plural "Mark %d selected articles in %s as read?"
-msgstr[0] "Markeer %d geselecteerde artikelen in %s als gelezen?"
+msgstr[0] "Markeer %d geselecteerd artikel in %s als gelezen?"
 msgstr[1] "Markeer %d geselecteerde artikelen in %s als gelezen?"
 
 #: js/viewfeed.js:1123
 msgid "Edit article Tags"
-msgstr "Bewerken artikel tags"
+msgstr "Bewerk artikel tags"
 
 #: js/viewfeed.js:1129
-#, fuzzy
 msgid "Saving article tags..."
-msgstr "Bewerken artikel tags"
+msgstr "Artikel tags opslaan..."
 
 #: js/viewfeed.js:1335
 msgid "No article is selected."
@@ -3559,11 +3379,10 @@ msgid "No articles found to mark"
 msgstr "Geen artikelen gevonden om te markeren"
 
 #: js/viewfeed.js:1372
-#, fuzzy
 msgid "Mark %d article as read?"
 msgid_plural "Mark %d articles as read?"
-msgstr[0] "Markeer %d artikel(en) als gelezen?"
-msgstr[1] "Markeer %d artikel(en) als gelezen?"
+msgstr[0] "Markeer %d artikel als gelezen?"
+msgstr[1] "Markeer %d artikelen als gelezen?"
 
 #: js/viewfeed.js:1895
 msgid "Open original article"
@@ -3574,9 +3393,8 @@ msgid "Display article URL"
 msgstr "Toon artikel URL"
 
 #: js/viewfeed.js:1920
-#, fuzzy
 msgid "Toggle marked"
-msgstr "In/uitschakelen sterren"
+msgstr "Markeer als (on)gelezen"
 
 #: js/viewfeed.js:2001
 msgid "Assign label"
@@ -3599,10 +3417,9 @@ msgid "Article URL:"
 msgstr "Artikel URL:"
 
 #: plugins/digest/digest.js:72
-#, fuzzy
 msgid "Mark %d displayed article as read?"
 msgid_plural "Mark %d displayed articles as read?"
-msgstr[0] "Markeer %d getoonde artikelen als gelezen?"
+msgstr[0] "Markeer %d getoond artikel als gelezen?"
 msgstr[1] "Markeer %d getoonde artikelen als gelezen?"
 
 #: plugins/digest/digest.js:290
@@ -3614,7 +3431,6 @@ msgid "Click to expand article."
 msgstr "Klik om artikel uit te klappen."
 
 #: plugins/digest/digest.js:535
-#, fuzzy
 msgid "%d more..."
 msgid_plural "%d more..."
 msgstr[0] "%d meer…"
@@ -3632,8 +3448,7 @@ msgstr "Laad meer..."
 msgid "Sorry, your browser does not support sandboxed iframes."
 msgstr "Sorry, uw browser lijkt iframes in een sandbox niet te ondersteunen."
 
-#: plugins/mailto/init.js:21
-#: plugins/mail/mail.js:21
+#: plugins/mailto/init.js:21 plugins/mail/mail.js:21
 msgid "Forward article by email"
 msgstr "Artikel doorsturen per e-mail"
 
@@ -3642,33 +3457,38 @@ msgid "Export Data"
 msgstr "Data exporteren"
 
 #: plugins/import_export/import_export.js:40
-#, fuzzy
-msgid "Finished, exported %d article. You can download the data <a class='visibleLink' href='%u'>here</a>."
-msgid_plural "Finished, exported %d articles. You can download the data <a class='visibleLink' href='%u'>here</a>."
-msgstr[0] "Klaar met exporteren van %d artikelen. U kunt de data <a class='visibleLink' href='%u'>hier</a> downloaden. "
-msgstr[1] "Klaar met exporteren van %d artikelen. U kunt de data <a class='visibleLink' href='%u'>hier</a> downloaden. "
+msgid ""
+"Finished, exported %d article. You can download the data <a "
+"class='visibleLink' href='%u'>here</a>."
+msgid_plural ""
+"Finished, exported %d articles. You can download the data <a "
+"class='visibleLink' href='%u'>here</a>."
+msgstr[0] ""
+"Klaar met exporteren van %d artikel. U kunt de data <a class='visibleLink' "
+"href='%u'>hier</a> downloaden."
+msgstr[1] ""
+"Klaar met exporteren van %d artikelen. U kunt de data <a class='visibleLink' "
+"href='%u'>hier</a> downloaden."
 
 #: plugins/import_export/import_export.js:93
 msgid "Data Import"
-msgstr "Data import"
+msgstr "Data importeren"
 
 #: plugins/import_export/import_export.js:112
 msgid "Please choose the file first."
 msgstr "Kies het bestand eerst aub."
 
 #: plugins/note/note.js:17
-#, fuzzy
 msgid "Saving article note..."
-msgstr "Bewerk artikel notitie"
+msgstr "Artikel notitie opslaan..."
 
 #: plugins/googlereaderimport/init.js:18
 msgid "Google Reader Import"
-msgstr ""
+msgstr "Google Reader Importeerder"
 
 #: plugins/googlereaderimport/init.js:42
-#, fuzzy
 msgid "Please choose a file first."
-msgstr "Kies het bestand eerst aub."
+msgstr "Kies eerst een bestand aub."
 
 #: plugins/instances/instances.js:10
 msgid "Link Instance"
@@ -3683,12 +3503,10 @@ msgid "Remove selected instances?"
 msgstr "Geselecteerde instanties verwijderen?"
 
 #: plugins/instances/instances.js:125
-#, fuzzy
 msgid "Removing selected instances..."
-msgstr "Geselecteerde instanties verwijderen?"
+msgstr "Geselecteerde instanties verwijderen..."
 
-#: plugins/instances/instances.js:139
-#: plugins/instances/instances.js:151
+#: plugins/instances/instances.js:139 plugins/instances/instances.js:151
 msgid "No instances are selected."
 msgstr "Er zijn geen instanties geselecteerd."
 
@@ -3701,9 +3519,12 @@ msgid "Share article by URL"
 msgstr "Deel artikel via URL"
 
 #: plugins/updater/updater.js:58
-#, fuzzy
-msgid "Backup your tt-rss directory before continuing. Please type 'yes' to continue."
-msgstr "Live updaten is nog experimenteel. Maak een back-up van uw tt-rss map alvorens door te gaan. Typ 'ja' om door te gaan. "
+msgid ""
+"Backup your tt-rss directory before continuing. Please type 'yes' to "
+"continue."
+msgstr ""
+"Maak een back-up van uw tt-rss map alvorens door te gaan. Typ 'yes' om door "
+"te gaan. "
 
 #~ msgid "Switch to digest..."
 #~ msgstr "Omschakelen naar samenvatting…"
@@ -3731,7 +3552,9 @@ msgstr "Live updaten is nog experimenteel. Maak een back-up van uw tt-rss map al
 #~ msgstr "aan 't afspelen..."
 
 #, fuzzy
-#~ msgid "Could not upload file. You might need to adjust upload_max_filesize in PHP.ini (current value = %s)"
+#~ msgid ""
+#~ "Could not upload file. You might need to adjust upload_max_filesize in "
+#~ "PHP.ini (current value = %s)"
 #~ msgstr ""
 #~ "Kon bestand niet uploaden. U moet misschien de upload_max_filesize\n"
 #~ "\t\t\t\tin PHP.ini aanpassen (huidige waarde = %s)"
@@ -3754,8 +3577,12 @@ msgstr "Live updaten is nog experimenteel. Maak een back-up van uw tt-rss map al
 #~ msgid "Please backup your database before proceeding."
 #~ msgstr "Maak aub een back-up van uw database voordat u verder gaat."
 
-#~ msgid "Your Tiny Tiny RSS database needs update to the latest version (<b>%d</b> to <b>%d</b>)."
-#~ msgstr "Uw Tiny Tiny RSS database moet worden geüpdate naar de laatste versie (<b>%d</b> naar <b>%d</b>)."
+#~ msgid ""
+#~ "Your Tiny Tiny RSS database needs update to the latest version (<b>%d</b> "
+#~ "to <b>%d</b>)."
+#~ msgstr ""
+#~ "Uw Tiny Tiny RSS database moet worden geüpdate naar de laatste versie (<b>"
+#~ "%d</b> naar <b>%d</b>)."
 
 #~ msgid "Performing updates..."
 #~ msgstr "Uitvoeren van updates..."
@@ -3774,7 +3601,8 @@ msgstr "Live updaten is nog experimenteel. Maak een back-up van uw tt-rss map al
 
 #, fuzzy
 #~ msgid "Finished. Performed <b>%d</b> update up to schema version <b>%d</b>."
-#~ msgid_plural "Finished. Performed <b>%d</b> updates up to schema version <b>%d</b>."
+#~ msgid_plural ""
+#~ "Finished. Performed <b>%d</b> updates up to schema version <b>%d</b>."
 #~ msgstr[0] ""
 #~ "Klaar. <b>%d</b> update(s) uitgevoerd volgens schema naar\n"
 #~ "\t\t\tversie <b>%d</b>."
@@ -3788,8 +3616,12 @@ msgstr "Live updaten is nog experimenteel. Maak een back-up van uw tt-rss map al
 #~ msgid "Found schema version: <b>%d</b>, required: <b>%d</b>."
 #~ msgstr "Versie schema gevonden: <b>%d</b>, vereist: <b>%d</b>."
 
-#~ msgid "Schema upgrade impossible. Please update Tiny Tiny RSS files to the newer version and continue."
-#~ msgstr "Schema update onmogelijk. Update Tiny Tiny RSS bestanden naar de nieuwere versie en gaan door."
+#~ msgid ""
+#~ "Schema upgrade impossible. Please update Tiny Tiny RSS files to the newer "
+#~ "version and continue."
+#~ msgstr ""
+#~ "Schema update onmogelijk. Update Tiny Tiny RSS bestanden naar de nieuwere "
+#~ "versie en gaan door."
 
 #, fuzzy
 #~ msgid "Mark feed as read"
@@ -3798,8 +3630,12 @@ msgstr "Live updaten is nog experimenteel. Maak een back-up van uw tt-rss map al
 #~ msgid "Enable external API"
 #~ msgstr "Inschakelen externe API"
 
-#~ msgid "When this option is enabled, headlines in Special feeds and Labels are grouped by feeds"
-#~ msgstr "Als deze optie is ingeschakeld worden kopteksten in de Speciale feedsrubriek en Labels gegroepeerd per feed"
+#~ msgid ""
+#~ "When this option is enabled, headlines in Special feeds and Labels are "
+#~ "grouped by feeds"
+#~ msgstr ""
+#~ "Als deze optie is ingeschakeld worden kopteksten in de Speciale "
+#~ "feedsrubriek en Labels gegroepeerd per feed"
 
 #~ msgid "Title or Content"
 #~ msgstr "Titel of inhoud"
@@ -3825,8 +3661,15 @@ msgstr "Live updaten is nog experimenteel. Maak een back-up van uw tt-rss map al
 #~ msgid "Modify score"
 #~ msgstr "verander de score"
 
-#~ msgid "This option is useful when you are reading several planet-type aggregators with partially colliding userbase. When disabled, it forces same posts from different feeds to appear only once."
-#~ msgstr "Deze optie is nuttig als u verscheidene planet-type nieuws aggregators leest met een ten dele overeenkomende gebruikersgroep. Indien uitgeschakeld forceert het berichten van verschillende feeds slechts eenmaal te verschijnen."
+#~ msgid ""
+#~ "This option is useful when you are reading several planet-type "
+#~ "aggregators with partially colliding userbase. When disabled, it forces "
+#~ "same posts from different feeds to appear only once."
+#~ msgstr ""
+#~ "Deze optie is nuttig als u verscheidene planet-type nieuws aggregators "
+#~ "leest met een ten dele overeenkomende gebruikersgroep. Indien "
+#~ "uitgeschakeld forceert het berichten van verschillende feeds slechts "
+#~ "eenmaal te verschijnen."
 
 #~ msgid "Date syntax appears to be correct:"
 #~ msgstr "Data syntax lijkt correct:"
@@ -3891,14 +3734,19 @@ msgstr "Live updaten is nog experimenteel. Maak een back-up van uw tt-rss map al
 #~ msgid "Back to feeds"
 #~ msgstr "Terug naar de feeds"
 
-#~ msgid "This will clear your stored authentication information for Twitter. Continue?"
-#~ msgstr "Dit zal uw opgeslagen authenticatie informatie voor Twitter verwijderen. Doorgaan?"
+#~ msgid ""
+#~ "This will clear your stored authentication information for Twitter. "
+#~ "Continue?"
+#~ msgstr ""
+#~ "Dit zal uw opgeslagen authenticatie informatie voor Twitter verwijderen. "
+#~ "Doorgaan?"
 
 #~ msgid "Updated"
 #~ msgstr "Bijgewerkt"
 
 #~ msgid "Finished: %d articles processed, %d imported, %d feeds created."
-#~ msgstr "Klaar: %d artikelen afgehandeld, %d geïmporteerd, %d feeds aangemaakt."
+#~ msgstr ""
+#~ "Klaar: %d artikelen afgehandeld, %d geïmporteerd, %d feeds aangemaakt."
 
 #~ msgid "Related"
 #~ msgstr "Gerelateerd"
index 62b3b4dcfdc5a193e2927eea0457df6b20fcfc10..a97502b12a7ebfd988916722ddc71f7f63496c6f 100644 (file)
@@ -114,7 +114,7 @@ class Af_Unburn extends Plugin {
                                preg_match("/(Location:|URI:)[^(\n)]*/", $header, $matches);
                                $url = trim(str_replace($matches[1],"",$matches[0]));
                                $url_parsed = parse_url($url);
-                               return (isset($url_parsed))? geturl($url, $referer):'';
+                               return (isset($url_parsed))? geturl($url):'';
                        }
                        $oline='';
                        foreach($status as $key=>$eline){$oline.='['.$key.']'.$eline.' ';}
index 79a8e8cb39895e00a07311095729d15c64ef61e0..87c8555c082c9851af8ed8cfb7812e6a9359ff95 100644 (file)
@@ -51,7 +51,7 @@ class Auth_Internal extends Plugin implements IAuthModule {
                                                        $return = urlencode($_REQUEST["return"]);
                                                        ?><html>
                                                                <head><title>Tiny Tiny RSS</title></head>
-                                                               <?php echo stylesheet_tag("utility.css") ?>
+                                                               <?php stylesheet_tag("utility.css") ?>
                                                        <body class="otp"><div class="content">
                                                        <form action="public.php?return=<?php echo $return ?>"
                                                                        method="POST" class="otpform">
index 2bf090d5404a2ed86e20d4e4f004a94e3f928d19..2ec2c87b232ca9e0e33c7d00b27763efb95e5041 100644 (file)
@@ -45,7 +45,7 @@ class Auth_Remote extends Plugin implements IAuthModule {
 #              if (!$try_login) $try_login = "test_qqq";
 
                if ($try_login) {
-                       $user_id = $this->base->auto_create_user($try_login);
+                       $user_id = $this->base->auto_create_user($try_login, $password);
 
                        if ($user_id) {
                                $_SESSION["fake_login"] = $try_login;
index e45605558385bf8eb4507a1733e991c7cb39237d..4c4d95d498973647203bd4ec647463018ceddbb3 100644 (file)
@@ -19,7 +19,7 @@ class Bookmarklets extends Plugin {
 
                print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"".__('Bookmarklets')."\">";
 
-               print "<p>" . __("Drag the link below to your browser toolbar, open the feed you're interested in in your browser and click on the link to subscribe to it.") . "</p>";
+               print_notice(__("Drag the link below to your browser toolbar, open the feed you're interested in in your browser and click on the link to subscribe to it."));
 
                $bm_subscribe_url = str_replace('%s', '', add_feed_url());
 
@@ -27,14 +27,20 @@ class Bookmarklets extends Plugin {
 
                $bm_url = htmlspecialchars("javascript:{if(confirm('$confirm_str'.replace('%s',window.location.href)))window.location.href='$bm_subscribe_url'+window.location.href}");
 
+               print "<p>";
                print "<a href=\"$bm_url\" class='bookmarklet'>" . __('Subscribe in Tiny Tiny RSS'). "</a>";
+               print "</p>";
 
-               print "<p>" . __("Use this bookmarklet to publish arbitrary pages using Tiny Tiny RSS") . "</p>";
+               print_notice(__("Use this bookmarklet to publish arbitrary pages using Tiny Tiny RSS"));
+
+               print "<p>";
 
                $bm_url = htmlspecialchars("javascript:(function(){var d=document,w=window,e=w.getSelection,k=d.getSelection,x=d.selection,s=(e?e():(k)?k():(x?x.createRange().text:0)),f='".SELF_URL_PATH."/public.php?op=sharepopup',l=d.location,e=encodeURIComponent,g=f+'&title='+((e(s))?e(s):e(document.title))+'&url='+e(l.href);function a(){if(!w.open(g,'t','toolbar=0,resizable=0,scrollbars=1,status=1,width=500,height=250')){l.href=g;}}a();})()");
 
                print "<a href=\"$bm_url\" class='bookmarklet'>" . __('Share with Tiny Tiny RSS'). "</a>";
 
+               print "</p>";
+
                print "</div>"; #pane
 
         }
diff --git a/plugins/digest/digest.css b/plugins/digest/digest.css
deleted file mode 100644 (file)
index 54568e3..0000000
+++ /dev/null
@@ -1,337 +0,0 @@
-body#ttrssDigest {
-       color : black;
-       font-family : sans-serif;
-       font-size : 12px;
-       margin : 0px;
-       background : url("images/tile.png");
-}
-
-a {
-       color : #0069D8;
-       text-decoration : none;
-}
-
-a:hover {
-       color : gray;
-}
-
-#header a, #footer a {
-       color : gray;
-}
-
-#header a:hover, #footer a:hover {
-       color : #0069D8;
-}
-
-#header {
-       font-size : 13px;
-       font-family : "Segoe UI", Tahoma, sans-serif;
-       padding : 5px 5px 5px 1.5em;
-       color : gray;
-       position : absolute;
-       top : 0px;
-       height : 30px;
-       left : 0px;
-       right : 0px;
-       color : #a0a0a0;
-}
-
-#header span.title {
-       font-weight : bold;
-       font-style : italic;
-}
-
-#header div.links {
-       position : absolute;
-       right : 1.5em;
-}
-
-#search {
-       float : right;
-       clear : left;
-
-}
-
-#title {
-}
-
-#latest {
-       padding : 5px;
-}
-
-#content {
-       position : absolute;
-       left : 0px;
-       top : 30px;
-       right : 0px;
-       bottom : 0px;
-       -webkit-transition: left 0.2s linear, right 0.2s linear;
-       -moz-transition: left 0.2s linear, right 0.2s linear;
-       transition: left 0.2s linear, right 0.2s linear;
-}
-
-#article {
-       position : absolute;
-       overflow : auto;
-       right : 0px;
-       width : 60%;
-       bottom : 0px;
-       top : 30px;
-       background : white;
-       z-index : -1;
-       opacity : 0;
-       -webkit-transition: opacity 0.2s linear;
-       -moz-transition: opacity 0.2s linear;
-       transition: opacity 0.2s linear;
-}
-
-#article.visible {
-       opacity : 1;
-}
-
-#article #article-content h1 {
-       margin : 0px 0px 10px 0px;
-       padding : 0px 0px 5px 0px;
-       font-family : "Segoe UI", Tahoma, sans-serif;
-       font-size : 21px;
-       font-weight : bold;
-       border-width : 0px 0px 3px 0px;
-       border-style : solid;
-       border-color : #e0e0e0;
-       color : gray;
-}
-
-#article #article-content #toolbar {
-       border-width : 0px 0px 1px 0px;
-       border-color : #e0e0e0;
-       border-style : solid;
-       background : #fafafa;
-       font-size : 14px;
-       font-weight : bold;
-       padding : 5px 10px 5px 10px;
-       margin : 0px 0px 0px 0px;
-}
-
-#article #article-content {
-       padding : 0px;
-       font-size : 16px;
-}
-
-#article #article-content #tags {
-       color : #a0a0a0;
-}
-
-#article #article-content #ops {
-       float : right;
-}
-
-#article #article-content #ops img {
-       cursor : pointer;
-       margin-right : 0px;
-       margin-left : 10px;
-}
-
-#article #article-content #inner {
-       padding : 20px;
-}
-
-#article #article-content img {
-       max-width : 90%;
-}
-
-#content.move {
-       left : -300px;
-       right : 60%
-}
-
-#feeds {
-       position : absolute;
-       left : 0px;
-       width : 300px;
-       top : -30px;
-       bottom : 0px;
-       font-size : 14px;
-       overflow : auto;
-       border-width : 0px 3px 0px 0px;
-       border-color : #88b0f0;
-       border-style : solid;
-       background : #eee;
-}
-
-#feeds ul#feeds-content img {
-       width : 16px;
-       height : 16px;
-       vertical-align : middle;
-       margin-right : 5px;
-}
-
-#feeds ul#feeds-content div.unread-ctr {
-       color : #d0d0d0;
-       padding-left : 10px;
-       float : right;
-}
-
-#feeds ul#feeds-content li {
-       padding : 10px;
-       clear : both;
-       cursor : pointer;
-       color : #303030;
-       white-space : nowrap;
-}
-
-#feeds ul#feeds-content li.selected {
-       background : white;
-}
-
-#feeds ul#feeds-content {
-       list-style-type : none;
-       font-weight : bold;
-       margin : 0px;
-       padding : 0px;
-}
-
-#headlines {
-       font-size : 14px;
-       position : absolute;
-       left : 303px;
-       top : 0px;
-       bottom : 0px;
-       right : 0px;
-       overflow : auto;
-       border-width : 0px 3px 0px 0px;
-       border-style : solid;
-       border-color : #88b0f0;
-}
-
-#headlines h1 a {
-       color : #684C99;
-}
-
-#headlines ul#headlines-content .cb {
-       vertical-align : middle;
-       margin-right : 5px;
-       float : left;
-}
-
-#headlines ul#headlines-content img.icon {
-       width : 16px;
-       height : 16px;
-       vertical-align : middle;
-       margin-right : 5px;
-       float : right;
-}
-
-#headlines ul#headlines-content {
-       list-style-type : none;
-       color : gray;
-       margin : 0px;
-       padding : 0px;
-}
-
-#headlines ul#headlines-content li {
-       margin : 0px 0px 0px 0px;
-       padding : 10px;
-       color : gray;
-       clear : left;
-       border-width : 0px 0px 1px 0px;
-       border-style : solid;
-       border-color : #e0e0e0;
-       background : #eee;
-}
-
-#headlines ul#headlines-content a.title {
-       font-size : 14px;
-       font-weight : bold;
-       display : block;
-       margin-left : 21px;
-       position : relative;
-}
-
-#headlines ul#headlines-content li.fresh a.title {
-       color : #007FFF;
-}
-
-#headlines ul#headlines-content li.unread a.title {
-       color : black;
-       /* color : #8DB1D6; */
-}
-
-#headlines ul#headlines-content li.read a.title {
-       color : gray;
-}
-
-#headlines ul#headlines-content li.unread,
-#headlines ul#headlines-content li.fresh {
-       background-color : white;
-}
-
-#headlines ul#headlines-content li.selected {
-       background-color : #fff7d5;
-       border-color : white white #e0e0e0;
-}
-
-#headlines ul#headlines-content img#H-LOADING-IMG {
-       margin-left : 5px;
-}
-
-#headlines ul#headlines-content div.excerpt {
-       color : #404040;
-       cursor : pointer;
-       margin-top : 5px;
-}
-
-#headlines ul#headlines-content div.content {
-       color : #404040;
-}
-
-#headlines ul#headlines-content div.content img {
-       max-width : 75%;
-}
-
-#headlines ul#headlines-content div.body {
-       margin-left : 21px;
-       /*margin-left : 42px;*/
-}
-
-#headlines ul#headlines-content div.info {
-       font-size : 11px;
-       margin-top : 5px;
-}
-
-#headlines ul#headlines-content div.info a {
-       color : gray;
-}
-
-#overlay {
-       background : white;
-       left : 0;
-       top : 0;
-       height : 100%;
-       width : 100%;
-       z-index : 100;
-       position : absolute;
-       text-align : center;
-}
-
-#overlay_inner {
-       margin : 1em;
-}
-
-#overlay img {
-       vertical-align : middle;
-}
-
-div.fatalError button {
-       margin-top : 5px;
-}
-
-div.fatalError textarea {
-       width : 100%;
-       height : 100px;
-}
-
-div.insensitive {
-       color : gray;
-}
-
-
diff --git a/plugins/digest/digest.js b/plugins/digest/digest.js
deleted file mode 100644 (file)
index e3cb1e2..0000000
+++ /dev/null
@@ -1,924 +0,0 @@
-var last_feeds = [];
-var init_params = {};
-var hotkeys_map = false;
-var hotkey_prefix = false;
-var mobile_mode = false;
-
-var _active_feed_id = false;
-var _update_timeout = false;
-var _view_update_timeout = false;
-var _feedlist_expanded = false;
-var _update_seq = 1;
-
-function article_appear(article_id) {
-       try {
-               new Effect.Appear('A-' + article_id);
-       } catch (e) {
-               exception_error("article_appear", e);
-       }
-}
-
-function catchup_feed(feed_id, callback) {
-       try {
-
-               var fn = find_feed(last_feeds, feed_id).title;
-
-               if (confirm(__("Mark all articles in %s as read?").replace("%s", fn))) {
-
-                       var is_cat = "";
-
-                       if (feed_id < 0) is_cat = "true"; // KLUDGE
-
-                       var query = "op=rpc&method=catchupFeed&feed_id=" +
-                               feed_id + "&is_cat=" + is_cat;
-
-                       new Ajax.Request("backend.php", {
-                               parameters: query,
-                               onComplete: function(transport) {
-                                       if (callback) callback(transport);
-
-                                       update();
-                               } });
-               }
-
-       } catch (e) {
-               exception_error("catchup_article", e);
-       }
-}
-
-function get_visible_article_ids() {
-       try {
-               var elems = $("headlines-content").getElementsByTagName("LI");
-               var ids = [];
-
-               for (var i = 0; i < elems.length; i++) {
-                       if (elems[i].id && elems[i].id.match("A-")) {
-                       ids.push(elems[i].id.replace("A-", ""));
-                       }
-               }
-
-               return ids;
-
-       } catch (e) {
-               exception_error("get_visible_article_ids", e);
-       }
-}
-
-function catchup_visible_articles(callback) {
-       try {
-
-               var ids = get_visible_article_ids();
-
-               if (confirm(ngettext("Mark %d displayed article as read?", "Mark %d displayed articles as read?", ids.length).replace("%d", ids.length))) {
-
-                       var query = "op=rpc&method=catchupSelected" +
-                               "&cmode=0&ids=" + param_escape(ids);
-
-                       new Ajax.Request("backend.php", {
-                               parameters: query,
-                               onComplete: function(transport) {
-                                       if (callback) callback(transport);
-
-                                       viewfeed(_active_feed_id, 0);
-                               } });
-
-                       }
-
-       } catch (e) {
-               exception_error("catchup_visible_articles", e);
-       }
-}
-
-function catchup_article(article_id, callback) {
-       try {
-               var query = "op=rpc&method=catchupSelected" +
-                       "&cmode=0&ids=" + article_id;
-
-               new Ajax.Request("backend.php", {
-                       parameters: query,
-                       onComplete: function(transport) {
-                               if (callback) callback(transport);
-                       } });
-
-       } catch (e) {
-               exception_error("catchup_article", e);
-       }
-}
-
-function set_selected_article(article_id) {
-       try {
-               $$("#headlines-content > li[id*=A-]").each(function(article) {
-                               var id = article.id.replace("A-", "");
-
-                               var cb = article.getElementsByTagName("INPUT")[0];
-
-                               if (id == article_id) {
-                                       article.addClassName("selected");
-                                       cb.checked = true;
-                               } else {
-                                       article.removeClassName("selected");
-                                       cb.checked = false;
-                               }
-
-               });
-
-       } catch (e) {
-               exception_error("set_selected_article", e);
-       }
-}
-
-
-function set_selected_feed(feed_id) {
-       try {
-               var feeds = $("feeds-content").getElementsByTagName("LI");
-
-               for (var i = 0; i < feeds.length; i++) {
-                       if (feeds[i].id == "F-" + feed_id)
-                               feeds[i].className = "selected";
-                       else
-                               feeds[i].className = "";
-               }
-
-               _active_feed_id = feed_id;
-
-       } catch (e) {
-               exception_error("set_selected_feed", e);
-       }
-}
-
-function load_more() {
-       try {
-               var pr = $("H-LOADING-IMG");
-
-               if (pr) Element.show(pr);
-
-               var offset = $$("#headlines-content > li[id*=A-][class*=fresh],li[id*=A-][class*=unread]").length;
-
-               viewfeed(false, offset, false, false, true,
-                       function() {
-                               var pr = $("H-LOADING-IMG");
-
-                               if (pr) Element.hide(pr);
-                       });
-       } catch (e) {
-               exception_error("load_more", e);
-       }
-}
-
-function update(callback) {
-       try {
-               console.log('updating feeds...');
-
-               window.clearTimeout(_update_timeout);
-
-               new Ajax.Request("backend.php", {
-                       parameters: "op=digest&method=digestinit",
-                       onComplete: function(transport) {
-                               fatal_error_check(transport);
-                               parse_feeds(transport);
-                               set_selected_feed(_active_feed_id);
-
-                               if (callback) callback(transport);
-                               } });
-
-               _update_timeout = window.setTimeout('update()', 5*1000);
-       } catch (e) {
-               exception_error("update", e);
-       }
-}
-
-function remove_headline_entry(article_id) {
-       try {
-               var elem = $('A-' + article_id);
-
-               if (elem) {
-                       elem.parentNode.removeChild(elem);
-               }
-
-       } catch (e) {
-               exception_error("remove_headline_entry", e);
-       }
-}
-
-function view_update() {
-       try {
-               viewfeed(_active_feed_id, _active_feed_offset, false, true, true);
-               update();
-       } catch (e) {
-               exception_error("view_update", e);
-       }
-}
-
-function view(article_id) {
-       try {
-               $("content").addClassName("move");
-
-               var a = $("A-" + article_id);
-               var h = $("headlines");
-
-               setTimeout(function() {
-                       // below or above viewport, reposition headline
-                       if (a.offsetTop > h.scrollTop + h.offsetHeight || a.offsetTop+a.offsetHeight < h.scrollTop+a.offsetHeight)
-                               h.scrollTop = a.offsetTop - (h.offsetHeight/2 - a.offsetHeight/2);
-                       }, 500);
-
-               new Ajax.Request("backend.php", {
-                       parameters: "op=digest&method=digestgetcontents&article_id=" +
-                               article_id,
-                       onComplete: function(transport) {
-                               fatal_error_check(transport);
-
-                               var reply = JSON.parse(transport.responseText);
-
-                               if (reply) {
-                                       var article = reply['article'];
-
-                                       var mark_part = "";
-                                       var publ_part = "";
-
-                                       var tags_part = "";
-
-                                       if (article.tags.length > 0) {
-                                               tags_part = " " + __("in") + " ";
-
-                                               for (var i = 0; i < Math.min(5, article.tags.length); i++) {
-                                                       //tags_part += "<a href=\"#\" onclick=\"viewfeed('" +
-                                                       //              article.tags[i] + "')\">" +
-                                                       //      article.tags[i] + "</a>, ";
-
-                                                       tags_part += article.tags[i] + ", ";
-                                               }
-
-                                               tags_part = tags_part.replace(/, $/, "");
-                                               tags_part = "<span class=\"tags\">" + tags_part + "</span>";
-
-                                       }
-
-                                       if (article.marked)
-                                               mark_part = "<img title='"+ __("Unstar article")+"' onclick=\"toggle_mark(this, "+article.id+")\" src='images/mark_set.svg'>";
-                                       else
-                                               mark_part =     "<img title='"+__("Star article")+"' onclick=\"toggle_mark(this, "+article.id+")\" src='images/mark_unset.svg'>";
-
-                                       if (article.published)
-                                               publ_part = "<img title='"+__("Unpublish article")+"' onclick=\"toggle_pub(this, "+article.id+")\" src='images/pub_set.svg'>";
-                                       else
-                                               publ_part =     "<img title='"+__("Publish article")+"' onclick=\"toggle_pub(this, "+article.id+")\" src='images/pub_unset.svg'>";
-
-                                       var tmp = "<div id=\"inner\">" +
-                                               "<div id=\"ops\">" +
-                                               mark_part +
-                                               publ_part +
-                                               "</div>" +
-                                               "<h1>" + "<a target=\"_blank\" href=\""+article.url+"\">" +
-                                                       article.title + "</a>" + "</h1>" +
-                                               "<div id=\"tags\">" +
-                                               tags_part +
-                                               "</div>" +
-                                               article.content + "</div>";
-
-                                       $("article-content").innerHTML = tmp;
-                                       $("article").addClassName("visible");
-
-                                       set_selected_article(article.id);
-
-                                       catchup_article(article_id,
-                                               function() {
-                                                       $("A-" + article_id).addClassName("read");
-                                       });
-
-                               } else {
-                                       elem.innerHTML = __("Error: unable to load article.");
-                               }
-                       }
-               });
-
-
-               return false;
-       } catch (e) {
-               exception_error("view", e);
-       }
-}
-
-function close_feed() {
-       $("headlines").removeClassName("move");
-
-       if (mobile_mode) set_selected_feed(false);
-}
-
-function go_back() {
-       if ($("article").hasClassName("visible")) {
-               close_article();
-       } else {
-               close_feed();
-       }
-}
-
-function close_article() {
-       $("content").removeClassName("move");
-       $("article").removeClassName("visible");
-}
-
-function viewfeed(feed_id, offset, replace, no_effects, no_indicator, callback) {
-       try {
-
-               $("headlines").addClassName("move");
-
-               if (!feed_id) feed_id = _active_feed_id;
-               if (offset == undefined) offset = 0;
-               if (replace == undefined) replace = (offset == 0);
-
-               _update_seq = _update_seq + 1;
-
-               if (!offset) $("headlines").scrollTop = 0;
-
-               var query = "op=digest&method=digestupdate&feed_id=" +
-                               param_escape(feed_id) + "&offset=" + offset +
-                               "&seq=" + _update_seq;
-
-               console.log(query);
-
-               var img = false;
-
-               if ($("F-" + feed_id)) {
-                       img = $("F-" + feed_id).getElementsByTagName("IMG")[0];
-
-                       if (img && !no_indicator) {
-                               img.setAttribute("orig_src", img.src);
-                               img.src = 'images/indicator_tiny.gif';
-                       }
-               }
-
-               new Ajax.Request("backend.php", {
-                       parameters: query,
-                       onComplete: function(transport) {
-                               Element.hide("overlay");
-
-                               fatal_error_check(transport);
-                               parse_headlines(transport, replace, no_effects);
-                               set_selected_feed(feed_id);
-                               _active_feed_offset = offset;
-
-                               if (img && !no_indicator)
-                                       img.src = img.getAttribute("orig_src");
-
-                               if (callback) callback(transport);
-
-                       } });
-
-       } catch (e) {
-               exception_error("view", e);
-       }
-}
-
-function find_article(articles, article_id) {
-       try {
-               for (var i = 0; i < articles.length; i++) {
-                       if (articles[i].id == article_id)
-                               return articles[i];
-               }
-
-               return false;
-
-       } catch (e) {
-               exception_error("find_article", e);
-       }
-}
-
-function find_feed(feeds, feed_id) {
-       try {
-               for (var i = 0; i < feeds.length; i++) {
-                       if (feeds[i].id == feed_id)
-                               return feeds[i];
-               }
-
-               return false;
-
-       } catch (e) {
-               exception_error("find_feed", e);
-       }
-}
-
-function get_feed_icon(feed) {
-       try {
-               if (feed.has_icon)
-                       return getInitParam('icons_url') + "/" + feed.id + '.ico';
-
-               if (feed.id == -1)
-                       return 'images/mark_set.svg';
-
-               if (feed.id == -2)
-                       return 'images/pub_set.svg';
-
-               if (feed.id == -3)
-                       return 'images/fresh.png';
-
-               if (feed.id == -4)
-                       return 'images/tag.png';
-
-               if (feed.id < -10)
-                       return 'images/label.png';
-
-               return 'images/blank_icon.gif';
-
-       } catch (e) {
-               exception_error("get_feed_icon", e);
-       }
-}
-
-function add_feed_entry(feed) {
-       try {
-               var icon_part = "";
-
-               icon_part = "<img src='" + get_feed_icon(feed) + "'/>";
-
-               var title = (feed.title.length > 30) ?
-                       feed.title.substring(0, 30) + "&hellip;" :
-                       feed.title;
-
-               var tmp_html = "<li id=\"F-"+feed.id+"\" onclick=\"viewfeed("+feed.id+")\">" +
-                       "<div class='unread-ctr'>" + "<span class=\"unread\">" + feed.unread + "</span></div>" +
-                       icon_part + title +
-                       "</li>";
-
-               $("feeds-content").innerHTML += tmp_html;
-
-
-       } catch (e) {
-               exception_error("add_feed_entry", e);
-       }
-}
-
-function add_headline_entry(article, feed, no_effects) {
-       try {
-
-               var icon_part = "";
-
-               icon_part = "<img class='icon' src='" + get_feed_icon(feed) + "'/>";
-
-
-               var style = "";
-
-               //if (!no_effects) style = "style=\"display : none\"";
-
-               if (article.excerpt.trim() == "")
-                       article.excerpt = __("Click to expand article.");
-
-               var li_class = "unread";
-
-               var fresh_max = getInitParam("fresh_article_max_age") * 60 * 60;
-               var d = new Date();
-
-               if (d.getTime() / 1000 - article.updated < fresh_max)
-                       li_class = "fresh";
-
-               var checkbox_part = "<input type=\"checkbox\" class=\"cb\" onclick=\"toggle_select_article(this)\"/>";
-
-               var date = new Date(article.updated * 1000);
-
-               var date_part = date.toString().substring(0,21);
-
-               var tmp_html = "<li id=\"A-"+article.id+"\" "+style+" class=\""+li_class+"\">" +
-                       checkbox_part +
-                       icon_part +
-                       "<a target=\"_blank\" href=\""+article.link+"\""+
-                               "onclick=\"return view("+article.id+")\" class='title'>" +
-                               article.title + "</a>" +
-                       "<div class='body'>" +
-                       "<div onclick=\"view("+article.id+")\" class='excerpt'>" +
-                               article.excerpt + "</div>" +
-                       "<div onclick=\"view("+article.id+")\" class='info'>";
-
-/*             tmp_html += "<a href=\#\" onclick=\"viewfeed("+feed.id+")\">" +
-                                       feed.title + "</a> " + " @ "; */
-
-               tmp_html += date_part + "</div>" +
-                       "</div></li>";
-
-               $("headlines-content").innerHTML += tmp_html;
-
-               if (!no_effects)
-                       window.setTimeout('article_appear(' + article.id + ')', 100);
-
-       } catch (e) {
-               exception_error("add_headline_entry", e);
-       }
-}
-
-function expand_feeds() {
-       try {
-               _feedlist_expanded = true;
-
-               redraw_feedlist(last_feeds);
-
-       } catch (e) {
-               exception_error("expand_feeds", e);
-       }
-}
-
-function redraw_feedlist(feeds) {
-       try {
-
-               $('feeds-content').innerHTML = "";
-
-               var limit = 10;
-
-               if (_feedlist_expanded) limit = feeds.length;
-
-               for (var i = 0; i < Math.min(limit, feeds.length); i++) {
-                       add_feed_entry(feeds[i]);
-               }
-
-               if (feeds.length > limit) {
-                       $('feeds-content').innerHTML += "<li id='F-MORE-PROMPT'>" +
-                               "<img src='images/blank_icon.gif'>" +
-                               "<a href=\"#\" onclick=\"expand_feeds()\">" +
-                               ngettext("%d more...", "%d more...", feeds.length-10).replace("%d", feeds.length-10) +
-                               "</a>" + "</li>";
-               }
-
-               if (feeds.length == 0) {
-                       $('feeds-content').innerHTML =
-                               "<div class='insensitive' style='text-align : center'>" +
-                                       __("No unread feeds.") + "</div>";
-               }
-
-               if (_active_feed_id)
-                       set_selected_feed(_active_feed_id);
-
-       } catch (e) {
-               exception_error("redraw_feedlist", e);
-       }
-}
-
-function parse_feeds(transport) {
-       try {
-               var reply = JSON.parse(transport.responseText);
-
-               if (!reply) return;
-
-               var feeds = reply['feeds'];
-
-               if (feeds) {
-
-                       feeds.sort( function (a,b)
-                               {
-                                       if (b.unread != a.unread)
-                                               return (b.unread - a.unread);
-                                       else
-                                               if (a.title > b.title)
-                                                       return 1;
-                                               else if (a.title < b.title)
-                                                       return -1;
-                                               else
-                                                       return 0;
-                               });
-
-                       var all_articles = find_feed(feeds, -4);
-
-                       update_title(all_articles.unread);
-
-                       last_feeds = feeds;
-
-                       redraw_feedlist(feeds);
-               }
-
-               if (reply['hotkeys']) {
-                       hotkeys_map = reply['hotkeys'];
-               }
-
-       } catch (e) {
-               console.log(e);
-               //exception_error("parse_feeds", e);
-       }
-}
-
-function parse_headlines(transport, replace, no_effects) {
-       try {
-               var reply = JSON.parse(transport.responseText);
-               if (!reply) return;
-
-               var seq = reply['seq'];
-
-               if (seq) {
-                       if (seq != _update_seq) {
-                               console.log("parse_headlines: wrong sequence received.");
-                               return;
-                       }
-               } else {
-                       return;
-               }
-
-               var headlines = reply['headlines']['content'];
-               var headlines_title = reply['headlines']['title'];
-
-               if (headlines && headlines_title) {
-
-                       if (replace) {
-                               $('headlines-content').innerHTML = '';
-                       }
-
-                       var pr = $('H-MORE-PROMPT');
-
-                       if (pr) pr.parentNode.removeChild(pr);
-
-                       var inserted = false;
-
-                       for (var i = 0; i < headlines.length; i++) {
-
-                               if (!$('A-' + headlines[i].id)) {
-                                       add_headline_entry(headlines[i],
-                                                       find_feed(last_feeds, headlines[i].feed_id), !no_effects);
-
-                               }
-                       }
-
-                       console.log(inserted.id);
-
-                       var ids = get_visible_article_ids();
-
-                       if (ids.length > 0) {
-                               if (pr) {
-                                       $('headlines-content').appendChild(pr);
-
-                               } else {
-                                       $('headlines-content').innerHTML += "<li id='H-MORE-PROMPT'>" +
-                                               "<div class='body'>" +
-                                               "<a href=\"#\" onclick=\"catchup_visible_articles()\">" +
-                                               __("Mark as read") + "</a> | " +
-                                               "<a href=\"javascript:load_more()\">" +
-                                               __("Load more...") + "</a>" +
-                                               "<img style=\"display : none\" "+
-                                               "id=\"H-LOADING-IMG\" src='images/indicator_tiny.gif'>" +
-                                               "</div></li>";
-                               }
-                       } else {
-                               // FIXME : display some kind of "nothing to see here" prompt here
-                       }
-
-//                     if (replace && !no_effects)
-//                             new Effect.Appear('headlines-content', {duration : 0.3});
-
-                       //new Effect.Appear('headlines-content');
-               }
-
-       } catch (e) {
-               exception_error("parse_headlines", e);
-       }
-}
-
-function init_second_stage() {
-       try {
-               new Ajax.Request("backend.php", {
-                       parameters: "op=digest&method=digestinit&init=1",
-                       onComplete: function(transport) {
-                               parse_feeds(transport);
-                               Element.hide("overlay");
-
-                               document.onkeydown = hotkey_handler;
-
-                               if (!mobile_mode)
-                                       window.setTimeout('viewfeed(-4)', 100);
-                                       _update_timeout = window.setTimeout('update()', 5*1000);
-                                       } });
-
-       } catch (e) {
-               exception_error("init_second_stage", e);
-       }
-}
-
-function init(mobile) {
-       try {
-               mobile_mode = mobile;
-
-               new Ajax.Request("backend.php", {
-                       parameters: {op: "rpc", method: "sanityCheck"},
-                       onComplete: function(transport) {
-                               backend_sanity_check_callback(transport);
-                       } });
-
-       } catch (e) {
-               exception_error("digest_init", e);
-       }
-}
-
-function toggle_mark(img, id) {
-
-       try {
-
-               var query = "op=rpc&id=" + id + "&method=mark";
-
-               if (!img) return;
-
-               if (img.src.match("mark_unset")) {
-                       img.src = img.src.replace("mark_unset", "mark_set");
-                       img.alt = __("Unstar article");
-                       query = query + "&mark=1";
-               } else {
-                       img.src = img.src.replace("mark_set", "mark_unset");
-                       img.alt = __("Star article");
-                       query = query + "&mark=0";
-               }
-
-               new Ajax.Request("backend.php", {
-                       parameters: query,
-                       onComplete: function(transport) {
-                               update();
-                       } });
-
-       } catch (e) {
-               exception_error("toggle_mark", e);
-       }
-}
-
-function toggle_pub(img, id, note) {
-
-       try {
-
-               var query = "op=rpc&id=" + id + "&method=publ";
-
-               if (note != undefined) {
-                       query = query + "&note=" + param_escape(note);
-               } else {
-                       query = query + "&note=undefined";
-               }
-
-               if (!img) return;
-
-               if (img.src.match("pub_unset") || note != undefined) {
-                       img.src = img.src.replace("pub_unset", "pub_set");
-                       img.alt = __("Unpublish article");
-                       query = query + "&pub=1";
-
-               } else {
-                       img.src = img.src.replace("pub_set", "pub_unset");
-                       img.alt = __("Publish article");
-                       query = query + "&pub=0";
-               }
-
-               new Ajax.Request("backend.php", {
-                       parameters: query,
-                       onComplete: function(transport) {
-                               update();
-                       } });
-
-       } catch (e) {
-               exception_error("toggle_pub", e);
-       }
-}
-
-function fatal_error(code, msg) {
-       try {
-
-               if (code == 6) {
-                       window.location.href = "digest.php";
-               } else if (code == 5) {
-                       window.location.href = "public.php?op=dbupdate";
-               } else {
-
-                       if (msg == "") msg = "Unknown error";
-
-                       console.error("Fatal error: " + code + "\n" +
-                               msg);
-
-               }
-
-       } catch (e) {
-               exception_error("fatalError", e);
-       }
-}
-
-function fatal_error_check(transport) {
-       try {
-               if (transport.responseXML) {
-                       var error = transport.responseXML.getElementsByTagName("error")[0];
-
-                       if (error) {
-                               var code = error.getAttribute("error-code");
-                               var msg = error.getAttribute("error-msg");
-                               if (code != 0) {
-                                       fatal_error(code, msg);
-                                       return false;
-                               }
-                       }
-               }
-       } catch (e) {
-               exception_error("fatal_error_check", e);
-       }
-       return true;
-}
-
-function update_title(unread) {
-       try {
-               document.title = "Tiny Tiny RSS";
-
-               if (unread > 0)
-                       document.title += " (" + unread + ")";
-
-       } catch (e) {
-               exception_error("update_title", e);
-       }
-}
-
-function toggle_select_article(elem) {
-       try {
-               var article = elem.parentNode;
-
-               if (article.hasClassName("selected"))
-                       article.removeClassName("selected");
-               else
-                       article.addClassName("selected");
-
-       } catch (e) {
-               exception_error("toggle_select_article", e);
-       }
-}
-
-function hotkey_handler(e) {
-       try {
-
-               if (e.target.nodeName == "INPUT" || e.target.nodeName == "TEXTAREA") return;
-
-               var keycode = false;
-               var shift_key = false;
-
-               var cmdline = $('cmdline');
-
-               try {
-                       shift_key = e.shiftKey;
-               } catch (e) {
-
-               }
-
-               if (window.event) {
-                       keycode = window.event.keyCode;
-               } else if (e) {
-                       keycode = e.which;
-               }
-
-               var keychar = String.fromCharCode(keycode);
-
-               if (!shift_key) keychar = keychar.toLowerCase();
-
-               if (keycode == 16) return; // ignore lone shift
-               if (keycode == 17) return; // ignore lone ctrl
-
-               var hotkey = keychar.search(/[a-zA-Z0-9]/) != -1 ? keychar : "(" + keycode + ")";
-               hotkey = hotkey_prefix ? hotkey_prefix + " " + hotkey : hotkey;
-               hotkey_prefix = false;
-
-               var hotkey_action = false;
-               var hotkeys = getInitParam("hotkeys");
-
-               for (sequence in hotkeys[1]) {
-                       if (sequence == hotkey) {
-                               hotkey_action = hotkeys[1][sequence];
-                               break;
-                       }
-               }
-
-               switch (keycode) {
-               case 27: // esc
-                       go_back();
-                       return false;
-               }
-
-               switch (hotkey_action) {
-               case "next_feed":
-                       var feeds = $$("#feeds li");
-                       for (var i = 0; i < feeds.length; i++) {
-                               var base_id = feeds[i].id.replace("F-", "");
-
-                               if (base_id == _active_feed_id) {
-                                       if (feeds[i+1]) {
-                                               viewfeed(feeds[i+1].id.replace("F-", ""));
-                                       }
-                                       break;
-                               }
-                       }
-                       return false;
-               case "prev_feed":
-                       var feeds = $$("#feeds li");
-                       for (var i = 0; i < feeds.length; i++) {
-                               var base_id = feeds[i].id.replace("F-", "");
-
-                               if (base_id == _active_feed_id) {
-                                       if (feeds[i-1]) {
-                                               viewfeed(feeds[i-1].id.replace("F-", ""));
-                                       }
-                                       break;
-                               }
-                       }
-                       return false;
-               case "next_article":
-                       return false;
-               case "prev_article":
-                       return false;
-               default:
-                       console.log("unhandled action: " + hotkey_action + "; hotkey: " + hotkey);
-               }
-
-
-       } catch (e) {
-               exception_error("hotkey_handler", e);
-       }
-}
diff --git a/plugins/digest/digest_body.php b/plugins/digest/digest_body.php
deleted file mode 100644 (file)
index 18932e5..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html>
-<head>
-       <title>Tiny Tiny RSS</title>
-
-       <?php
-               require_once "lib/Mobile_Detect.php";
-               $mobile = new Mobile_Detect();
-
-               if ($mobile->isMobile() || @$_REQUEST['mode'] == 'mobile') {
-                       $_SESSION["digest_mobile"] = 1;
-                       echo stylesheet_tag("plugins/digest/mobile.css");
-               } else {
-                       $_SESSION["digest_mobile"] = 0;
-                       echo stylesheet_tag("plugins/digest/digest.css");
-               }
-       ?>
-
-       <meta name="viewport" content="width=device-width,
-               minimum-scale=1.0, maximum-scale=1.0" />
-
-       <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-
-       <?php print_user_stylesheet(); ?>
-
-       <link rel="shortcut icon" type="image/png" href="images/favicon.png"/>
-
-       <?php
-       foreach (array("lib/prototype.js",
-                               "lib/scriptaculous/scriptaculous.js?load=effects,dragdrop,controls",
-                               "js/functions.js",
-                               "plugins/digest/digest.js",
-                               "errors.php?mode=js") as $jsfile) {
-
-               echo javascript_tag($jsfile);
-       } ?>
-
-       <script type="text/javascript">
-       <?php init_js_translations(); ?>
-       </script>
-
-       <script type="text/javascript" src="plugins/digest/digest.js"></script>
-
-       <script type="text/javascript">
-               Event.observe(window, 'load', function() {
-                       init(<?php echo $_SESSION["digest_mobile"] ?>);
-               });
-       </script>
-</head>
-<body id="ttrssDigest">
-       <div id="overlay" style="display : block">
-               <div id="overlay_inner">
-               <noscript>
-                       <p>
-                       <?php print_error(__("Your browser doesn't support Javascript, which is required for this application to function properly. Please check your browser settings.")) ?></p>
-               </noscript>
-
-               <img src="images/indicator_white.gif"/>
-                       <?php echo __("Loading, please wait...") ?>
-               </div>
-       </div>
-
-       <div id="header">
-       <a style="float : left" href="#" onclick="go_back()">
-               <?php echo __("Go back") ?></a>
-
-       <div class="links">
-
-       <?php if (!$_SESSION["hide_hello"]) { ?>
-                       <?php echo __('Hello,') ?> <b><?php echo $_SESSION["name"] ?></b> |
-       <?php } ?>
-       <?php if (!$_SESSION["hide_logout"]) { ?>
-                       <a href="backend.php?op=logout"><?php echo __('Logout') ?></a> |
-       <?php } ?>
-                       <a href='<?php echo get_self_url_prefix() ?>/index.php?mobile=false'>
-                       <?php echo __("Regular version") ?></a>
-
-       </div>
-       </div>
-
-       <div id="article"><div id="article-content">&nbsp;</div></div>
-
-       <div id="content">
-
-               <div id="feeds">
-                       <ul id="feeds-content"> </ul>
-               </div>
-
-               <div id="headlines">
-                       <ul id="headlines-content"> </ul>
-               </div>
-       </div>
-
-</body>
-</html>
diff --git a/plugins/digest/images/tile.png b/plugins/digest/images/tile.png
deleted file mode 100644 (file)
index 72f2f45..0000000
Binary files a/plugins/digest/images/tile.png and /dev/null differ
diff --git a/plugins/digest/init.php b/plugins/digest/init.php
deleted file mode 100644 (file)
index aee351c..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-<?php
-// TODO: digest should register digest specific hotkey actions within tt-rss
-class Digest extends Plugin implements IHandler {
-       private $host;
-
-       function about() {
-               return array(1.0,
-                       "Digest mode for tt-rss (tablet friendly UI)",
-                       "fox",
-                       true);
-       }
-
-       function init($host) {
-               $this->link = $host->get_link();
-               $this->host = $host;
-
-               $host->add_handler("digest", "*", $this);
-       }
-
-       function index() {
-               header("Content-type: text/html; charset=utf-8");
-
-               login_sequence();
-
-               require_once dirname(__FILE__) . "/digest_body.php";
-       }
-
-       /* function get_js() {
-               return file_get_contents(dirname(__FILE__) . "/digest.js");
-       } */
-
-       function csrf_ignore($method) {
-               return in_array($method, array("index"));
-       }
-
-       function before($method) {
-               return true;
-       }
-
-       function after() {
-
-       }
-
-       function digestgetcontents() {
-               $article_id = db_escape_string($_REQUEST['article_id']);
-
-               $result = db_query("SELECT content,title,link,marked,published
-                       FROM ttrss_entries, ttrss_user_entries
-                       WHERE id = '$article_id' AND ref_id = id AND owner_uid = ".$_SESSION['uid']);
-
-               $content = sanitize(db_fetch_result($result, 0, "content"));
-               $title = strip_tags(db_fetch_result($result, 0, "title"));
-               $article_url = htmlspecialchars(db_fetch_result($result, 0, "link"));
-               $marked = sql_bool_to_bool(db_fetch_result($result, 0, "marked"));
-               $published = sql_bool_to_bool(db_fetch_result($result, 0, "published"));
-
-               print json_encode(array("article" =>
-                       array("id" => $article_id, "url" => $article_url,
-                               "tags" => get_article_tags($article_id),
-                               "marked" => $marked, "published" => $published,
-                               "title" => $title, "content" => $content)));
-       }
-
-       function digestupdate() {
-               $feed_id = db_escape_string($_REQUEST['feed_id']);
-               $offset = db_escape_string($_REQUEST['offset']);
-               $seq = db_escape_string($_REQUEST['seq']);
-
-               if (!$feed_id) $feed_id = -4;
-               if (!$offset) $offset = 0;
-
-               $reply = array();
-
-               $reply['seq'] = $seq;
-
-               $headlines = API::api_get_headlines($feed_id, 30, $offset,
-                               '', ($feed_id == -4), true, false, "unread", "updated DESC", 0, 0);
-
-               $reply['headlines'] = array();
-               $reply['headlines']['title'] = getFeedTitle($feed_id);
-               $reply['headlines']['content'] = $headlines;
-
-               print json_encode($reply);
-       }
-
-       function digestinit() {
-               $tmp_feeds = API::api_get_feeds(-4, true, false, 0);
-
-               $params = array();
-               $feeds = array();
-
-               foreach ($tmp_feeds as $f) {
-                       if ($f['id'] > 0 || $f['id'] == -4) array_push($feeds, $f);
-               }
-
-               if ($_REQUEST["init"] == 1) {
-                       $params["hotkeys"] = get_hotkeys_map();
-               }
-               $params["feeds"] = $feeds;
-
-               print json_encode($params);
-       }
-
-       function api_version() {
-               return 2;
-       }
-
-}
-?>
diff --git a/plugins/digest/mobile.css b/plugins/digest/mobile.css
deleted file mode 100644 (file)
index 89989df..0000000
+++ /dev/null
@@ -1,345 +0,0 @@
-body#ttrssDigest {
-       color : black;
-       font-family : sans-serif;
-       font-size : 12px;
-       margin : 0px;
-       background : url("images/tile.png");
-}
-
-a {
-       color : #0069D8;
-       text-decoration : none;
-}
-
-a:hover {
-       color : gray;
-}
-
-#header a, #footer a {
-       color : gray;
-}
-
-#header a:hover, #footer a:hover {
-       color : #0069D8;
-}
-
-#header {
-       font-size : 14px;
-       font-weight : bold;
-       font-family : "Segoe UI", Tahoma, sans-serif;
-       padding : 5px 5px 5px 1.5em;
-       color : gray;
-       position : absolute;
-       top : 0px;
-       height : 30px;
-       left : 0px;
-       right : 0px;
-       color : #a0a0a0;
-}
-
-#header span.title {
-       font-weight : bold;
-       font-style : italic;
-}
-
-#header div.links {
-       position : absolute;
-       right : 1.5em;
-}
-
-#search {
-       float : right;
-       clear : left;
-
-}
-
-#title {
-}
-
-#latest {
-       padding : 5px;
-}
-
-#content {
-       position : absolute;
-       left : 0px;
-       top : 30px;
-       right : 0px;
-       bottom : 0px;
-       -webkit-transition: left 0.2s linear, right 0.2s linear;
-       -moz-transition: left 0.2s linear, right 0.2s linear;
-       transition: left 0.2s linear, right 0.2s linear;
-}
-
-#article {
-       position : absolute;
-       overflow : auto;
-       right : 0px;
-       width : 100%;
-       bottom : 0px;
-       top : 30px;
-       background : white;
-       opacity : 0;
-       -webkit-transition: opacity 0.2s linear;
-       -moz-transition: opacity 0.2s linear;
-       transition: opacity 0.2s linear;
-}
-
-#article.visible {
-       opacity : 1;
-}
-
-#article #article-content h1 {
-       margin : 0px;
-       padding : 0px;
-       font-family : "Segoe UI", Tahoma, sans-serif;
-       font-size : 21px;
-       font-weight : bold;
-       border-width : 0px 0px 3px 0px;
-       border-style : solid;
-       border-color : #e0e0e0;
-       color : gray;
-}
-
-#article #article-content #toolbar {
-       border-width : 0px 0px 1px 0px;
-       border-color : #e0e0e0;
-       border-style : solid;
-       background : #fafafa;
-       font-size : 14px;
-       font-weight : bold;
-       padding : 5px 10px 5px 10px;
-       margin : 0px 0px 0px 0px;
-}
-
-#article #article-content {
-       padding : 0px;
-       font-size : 16px;
-}
-
-#article #article-content #tags {
-       color : #a0a0a0;
-       margin-bottom : 5px;
-}
-
-#article #article-content #ops {
-       float : right;
-}
-
-#article #article-content #ops img {
-       cursor : pointer;
-       margin-right : 0px;
-       margin-left : 10px;
-}
-
-#article #article-content #inner {
-       padding : 10px;
-}
-
-#article #article-content img {
-       max-width : 90%;
-}
-
-#content.move {
-       left : 0px;
-       right : 100%;
-}
-
-#feeds {
-       position : absolute;
-       left : 0px;
-       top : 0px;
-       right : 0px;
-       bottom : 0px;
-       font-size : 14px;
-       overflow : auto;
-       background : white;
-}
-
-#feeds ul#feeds-content img {
-       width : 16px;
-       height : 16px;
-       vertical-align : middle;
-       margin-right : 5px;
-}
-
-#feeds ul#feeds-content div.unread-ctr {
-       color : #d0d0d0;
-       padding-left : 10px;
-       float : right;
-}
-
-#feeds ul#feeds-content li {
-       padding : 10px;
-       clear : both;
-       cursor : pointer;
-       color : #303030;
-       white-space : nowrap;
-}
-
-#feeds ul#feeds-content li.selected {
-       background : white;
-}
-
-#feeds ul#feeds-content {
-       list-style-type : none;
-       font-weight : bold;
-       margin : 0px;
-       padding : 0px;
-}
-
-#headlines {
-       font-size : 14px;
-       position : absolute;
-       top : 0px;
-       bottom : 0px;
-       right : 0px;
-       overflow : auto;
-       background : white;
-       border-width : 0px 3px 0px 0px;
-       border-style : solid;
-       border-color : #88b0f0;
-       left : 100%;
-
-       -webkit-transition: left 0.2s linear, right 0.2s linear;
-       -moz-transition: left 0.2s linear, right 0.2s linear;
-       transition: left 0.2s linear, right 0.2s linear;
-
-}
-
-#headlines.move {
-       left : 0px;
-}
-
-#headlines h1 a {
-       color : #684C99;
-}
-
-#headlines ul#headlines-content .cb {
-       vertical-align : middle;
-       margin-right : 5px;
-       float : left;
-}
-
-#headlines ul#headlines-content img.icon {
-       width : 16px;
-       height : 16px;
-       vertical-align : middle;
-       margin-right : 5px;
-       float : right;
-}
-
-#headlines ul#headlines-content {
-       list-style-type : none;
-       color : gray;
-       margin : 0px;
-       padding : 0px;
-}
-
-#headlines ul#headlines-content li {
-       margin : 0px 0px 0px 0px;
-       padding : 10px;
-       color : gray;
-       clear : left;
-       border-width : 0px 0px 1px 0px;
-       border-style : solid;
-       border-color : #e0e0e0;
-       background : #eee;
-}
-
-#headlines ul#headlines-content a.title {
-       font-size : 14px;
-       font-weight : bold;
-       display : block;
-       margin-left : 21px;
-       position : relative;
-}
-
-#headlines ul#headlines-content li.fresh a.title {
-       color : #007FFF;
-}
-
-#headlines ul#headlines-content li.unread a.title {
-       color : black;
-       /* color : #8DB1D6; */
-}
-
-#headlines ul#headlines-content li.read a.title {
-       color : gray;
-}
-
-#headlines ul#headlines-content li.unread,
-#headlines ul#headlines-content li.fresh {
-       background-color : white;
-}
-
-#headlines ul#headlines-content li.selected {
-       background-color : #fff7d5;
-       border-color : white white #e0e0e0;
-}
-
-#headlines ul#headlines-content img#H-LOADING-IMG {
-       margin-left : 5px;
-}
-
-#headlines ul#headlines-content div.excerpt {
-       color : #404040;
-       cursor : pointer;
-       margin-top : 5px;
-}
-
-#headlines ul#headlines-content div.content {
-       color : #404040;
-}
-
-#headlines ul#headlines-content div.content img {
-       max-width : 75%;
-}
-
-#headlines ul#headlines-content div.body {
-       margin-left : 21px;
-       /*margin-left : 42px;*/
-}
-
-#headlines ul#headlines-content div.info {
-       font-size : 11px;
-       margin-top : 5px;
-}
-
-#headlines ul#headlines-content div.info a {
-       color : gray;
-}
-
-#overlay {
-       background : white;
-       left : 0;
-       top : 0;
-       height : 100%;
-       width : 100%;
-       z-index : 100;
-       position : absolute;
-       text-align : center;
-}
-
-#overlay_inner {
-       margin : 1em;
-}
-
-#overlay img {
-       vertical-align : middle;
-}
-
-div.fatalError button {
-       margin-top : 5px;
-}
-
-div.fatalError textarea {
-       width : 100%;
-       height : 100px;
-}
-
-div.insensitive {
-       color : gray;
-}
-
-
diff --git a/plugins/example/example.js b/plugins/example/example.js
deleted file mode 100644 (file)
index a31f2c2..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-function example(value) {
-       alert("Value saved: " + value);
-}
diff --git a/plugins/example/init.php b/plugins/example/init.php
deleted file mode 100644 (file)
index 67f5027..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-<?php
-class Example extends Plugin {
-
-       // Demonstrates how to add a separate panel to the preferences screen and inject Javascript/save data using Dojo forms.
-       private $host;
-
-       function about() {
-               return array(1.0,
-                       "Example plugin #1",
-                       "fox",
-                       true,
-                       "http://site.com");
-       }
-
-       function init($host) {
-               $this->host = $host;
-
-               $host->add_hook($host::HOOK_PREFS_TAB, $this);
-       }
-
-       function save() {
-               $example_value = db_escape_string($_POST["example_value"]);
-
-               $this->host->set($this, "example", $example_value);
-
-               echo "Value set to $example_value";
-       }
-
-       function get_prefs_js() {
-               return file_get_contents(dirname(__FILE__) . "/example.js");
-       }
-
-       function hook_prefs_tab($args) {
-               if ($args != "prefPrefs") return;
-
-               print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"".__("Example Pane")."\">";
-
-               print "<br/>";
-
-//             print_r($this->host->set($this, "example", rand(0,100)));
-//             print_r($this->host->get_all($this));
-
-               $value = $this->host->get($this, "example");
-
-               print "<form dojoType=\"dijit.form.Form\">";
-
-               print "<script type=\"dojo/method\" event=\"onSubmit\" args=\"evt\">
-                       evt.preventDefault();
-                       if (this.validate()) {
-                               console.log(dojo.objectToQuery(this.getValues()));
-                               new Ajax.Request('backend.php', {
-                                       parameters: dojo.objectToQuery(this.getValues()),
-                                       onComplete: function(transport) {
-                                               notify_info(transport.responseText);
-                                       }
-                               });
-                               //this.reset();
-                       }
-                       </script>";
-
-                       print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"op\" value=\"pluginhandler\">";
-                       print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"method\" value=\"save\">";
-                       print "<input dojoType=\"dijit.form.TextBox\" style=\"display : none\" name=\"plugin\" value=\"example\">";
-
-               print "<table width=\"100%\" class=\"prefPrefsList\">";
-
-                       print "<tr><td width=\"40%\">".__("Sample value")."</td>";
-                       print "<td class=\"prefValue\"><input dojoType=\"dijit.form.ValidationTextBox\" required=\"1\" name=\"example_value\" value=\"$value\"></td></tr>";
-
-                       print "</table>";
-
-                       print "<p><button dojoType=\"dijit.form.Button\" type=\"submit\">".
-                               __("Set value")."</button>";
-
-                       print "</form>";
-
-               print "</div>"; #pane
-       }
-
-       function api_version() {
-               return 2;
-       }
-
-}
-?>
diff --git a/plugins/example_api/init.php b/plugins/example_api/init.php
deleted file mode 100644 (file)
index 1f896ba..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-class Example_Api extends Plugin {
-
-       // Demonstrates adding a method to the API
-       // Plugin methods return an array containint
-       // 1. status (STATUS_OK or STATUS_ERR)
-       // 2. arbitrary payload
-
-       private $host;
-
-       function about() {
-               return array(1.0,
-                       "Example plugin adding an API method",
-                       "fox",
-                       true,
-                       "http://tt-rss.org/");
-       }
-
-       function init($host) {
-               $this->host = $host;
-
-               $host->add_api_method("example_testmethod", $this);
-       }
-
-       function example_testmethod() {
-               return array(API::STATUS_OK, array("current_time" => time()));
-       }
-
-       function api_version() {
-               return 2;
-       }
-
-}
-?>
diff --git a/plugins/example_article/init.js b/plugins/example_article/init.js
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/plugins/example_article/init.php b/plugins/example_article/init.php
deleted file mode 100644 (file)
index 69902cb..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-class Example_Article extends Plugin {
-
-       private $host;
-
-       function about() {
-               return array(1.0,
-                       "Example plugin for HOOK_RENDER_ARTICLE",
-                       "fox",
-                       true);
-       }
-
-       function init($host) {
-               $this->host = $host;
-
-               $host->add_hook($host::HOOK_RENDER_ARTICLE, $this);
-       }
-
-       function get_prefs_js() {
-               return file_get_contents(dirname(__FILE__) . "/init.js");
-       }
-
-       function hook_render_article($article) {
-               $article["content"] = "Content changed: " . $article["content"];
-
-               return $article;
-       }
-
-       function api_version() {
-               return 2;
-       }
-
-}
-?>
diff --git a/plugins/example_feed/init.php b/plugins/example_feed/init.php
deleted file mode 100644 (file)
index 1d653a9..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-class Example_Feed extends Plugin {
-
-       // Demonstrates how to query data from the parsed feed object (SimplePie)
-       // don't enable unless debugging feed through f D hotkey or manually.
-
-       private $host;
-
-       function about() {
-               return array(1.0,
-                       "Example feed plugin",
-                       "fox",
-                       true);
-       }
-
-       function init($host) {
-               $this->host = $host;
-
-               $host->add_hook($host::HOOK_FEED_PARSED, $this);
-       }
-
-       function hook_feed_parsed($feed) {
-               _debug("I'm a little feed short and stout, here's my title: " . $feed->get_title());
-               _debug("... here's my link element: " . $feed->get_link());
-       }
-
-       function api_version() {
-               return 2;
-       }
-
-}
-?>
diff --git a/plugins/example_routing/init.php b/plugins/example_routing/init.php
deleted file mode 100644 (file)
index a7b19d7..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-class Example_Routing extends Plugin implements IHandler {
-
-       // Demonstrates adding a custom handler and method:
-       // backend.php?op=test&method=example
-       // and masking a system builtin public method:
-       // public.php?op=getUnread
-
-       // Plugin class must implelement IHandler interface and has
-       // a public method of same name as being registered.
-       //
-       // Any system method may be masked by plugins. You can mask
-       // entire handler by supplying "*" instead of a method name.
-
-       private $host;
-
-       function about() {
-               return array(1.0,
-                       "Example routing plugin",
-                       "fox",
-                       true);
-       }
-
-       function init($host) {
-               $this->host = $host;
-
-               $host->add_handler("test", "example", $this);
-               $host->add_handler("public", "getunread", $this);
-       }
-
-       function getunread() {
-               print rand(0,100); # yeah right
-       }
-
-       function example() {
-               print "example method called";
-       }
-
-       function csrf_ignore($method) {
-               return true;
-       }
-
-       function before($method) {
-               return true;
-       }
-
-       function after() {
-               return true;
-       }
-
-       function api_version() {
-               return 2;
-       }
-
-}
-?>
diff --git a/plugins/example_vfeed/init.php b/plugins/example_vfeed/init.php
deleted file mode 100644 (file)
index 3107619..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-<?php
-class Example_VFeed extends Plugin {
-
-       // Demonstrates how to create a dummy special feed and chain
-       // headline generation to queryFeedHeadlines();
-
-       // Not implemented yet: stuff for 3 panel mode
-
-       private $host;
-       private $dummy_id;
-
-       function about() {
-               return array(1.0,
-                       "Example vfeed plugin",
-                       "fox",
-                       false);
-       }
-
-       function init($host) {
-               $this->host = $host;
-
-               $this->dummy_id = $host->add_feed(-1, 'Dummy feed', 'images/pub_set.svg', $this);
-       }
-
-       function get_unread($feed_id) {
-               return 1234;
-       }
-
-       function get_headlines($feed_id, $options) {
-               $qfh_ret = queryFeedHeadlines(-4,
-                       $options['limit'],
-                       $options['view_mode'], $options['cat_view'],
-                       $options['search'],
-                       $options['search_mode'],
-                       $options['override_order'],
-                       $options['offset'],
-                       $options['owner_uid'],
-                       $options['filter'],
-                       $options['since_id'],
-                       $options['include_children']);
-
-               $qfh_ret[1] = 'Dummy feed';
-
-               return $qfh_ret;
-       }
-
-       function api_version() {
-               return 2;
-       }
-
-}
-?>
index 15c7dea9b3d6ba0ea6f5147b41fc911ba3ef1aaf..d4bdec826a83f1bf71179090a313842156165714 100644 (file)
@@ -57,9 +57,9 @@ class Import_Export extends Plugin implements IHandler {
 
                print "<div dojoType=\"dijit.layout.AccordionPane\" title=\"".__('Import and export')."\">";
 
-               print "<h3>" . __("Article archive") . "</h3>";
+               print_notice(__("You can export and import your Starred and Archived articles for safekeeping or when migrating between tt-rss instances of same version."));
 
-               print "<p>" . __("You can export and import your Starred and Archived articles for safekeeping or when migrating between tt-rss instances.") . "</p>";
+               print "<p>";
 
                print "<button dojoType=\"dijit.form.Button\" onclick=\"return exportData()\">".
                        __('Export my data')."</button> ";
@@ -82,6 +82,8 @@ class Import_Export extends Plugin implements IHandler {
 
                print "</form>";
 
+               print "</p>";
+
                print "</div>"; # pane
        }
 
diff --git a/plugins/mobile/article.php b/plugins/mobile/article.php
deleted file mode 100644 (file)
index 64768c9..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-       error_reporting(E_ERROR | E_WARNING | E_PARSE);
-
-       header('Content-Type: text/html; charset=utf-8');
-
-       define('MOBILE_VERSION', true);
-
-       $basedir = dirname(dirname(dirname(__FILE__)));
-
-       set_include_path(
-               dirname(__FILE__) . PATH_SEPARATOR .
-               $basedir . PATH_SEPARATOR .
-               "$basedir/include" . PATH_SEPARATOR .
-               get_include_path());
-
-       require_once "config.php";
-       require_once "mobile-functions.php";
-
-       login_sequence(true);
-
-       $id = db_escape_string($_REQUEST["id"]);
-       $feed_id = db_escape_string($_REQUEST["feed"]);
-       $cat_id = db_escape_string($_REQUEST["cat"]);
-       $is_cat = db_escape_string($_REQUEST["is_cat"]);
-
-       render_article($id, $feed_id, $cat_id, $is_cat);
-?>
-
diff --git a/plugins/mobile/backend.php b/plugins/mobile/backend.php
deleted file mode 100644 (file)
index 4065dc2..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-       error_reporting(E_ERROR | E_WARNING | E_PARSE);
-
-       header('Content-Type: text/html; charset=utf-8');
-
-       $basedir = dirname(dirname(dirname(__FILE__)));
-
-       set_include_path(
-               dirname(__FILE__) . PATH_SEPARATOR .
-               $basedir . PATH_SEPARATOR .
-               "$basedir/include" . PATH_SEPARATOR .
-               get_include_path());
-
-       define('MOBILE_VERSION', true);
-
-       require_once "config.php";
-       require_once "mobile-functions.php";
-
-       require_once "functions.php";
-       require_once "sessions.php";
-       require_once "version.php";
-       require_once "db-prefs.php";
-
-       if (!$_SESSION["uid"]) return;
-
-       $op = $_REQUEST["op"];
-
-       switch ($op) {
-       case "toggleMarked":
-               $cmode = db_escape_string($_REQUEST["mark"]);
-               $id = db_escape_string($_REQUEST["id"]);
-
-               markArticlesById(array($id), $cmode);
-               break;
-       case "togglePublished":
-               $cmode = db_escape_string($_REQUEST["pub"]);
-               $id = db_escape_string($_REQUEST["id"]);
-
-               publishArticlesById(array($id), $cmode);
-               break;
-       case "toggleUnread":
-               $cmode = db_escape_string($_REQUEST["unread"]);
-               $id = db_escape_string($_REQUEST["id"]);
-
-               catchupArticlesById(array($id), $cmode);
-               break;
-
-       case "setPref":
-               $id = db_escape_string($_REQUEST["id"]);
-               $value = db_escape_string($_REQUEST["to"]);
-               mobile_set_pref($id, $value);
-               print_r($_SESSION);
-               break;
-       default:
-               print json_encode(array("error", "UNKNOWN_METHOD"));
-               break;
-       }
-?>
-
diff --git a/plugins/mobile/cat.php b/plugins/mobile/cat.php
deleted file mode 100644 (file)
index 21d0455..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-       error_reporting(E_ERROR | E_WARNING | E_PARSE);
-
-       header('Content-Type: text/html; charset=utf-8');
-
-       define('MOBILE_VERSION', true);
-
-       $basedir = dirname(dirname(dirname(__FILE__)));
-
-       set_include_path(
-               dirname(__FILE__) . PATH_SEPARATOR .
-               $basedir . PATH_SEPARATOR .
-               "$basedir/include" . PATH_SEPARATOR .
-               get_include_path());
-
-       require_once "config.php";
-       require_once "mobile-functions.php";
-
-       login_sequence(true);
-
-       $cat_id = db_escape_string($_REQUEST["id"]);
-
-       render_category($cat_id);
-?>
-
diff --git a/plugins/mobile/feed.php b/plugins/mobile/feed.php
deleted file mode 100644 (file)
index 345026e..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-       error_reporting(E_ERROR | E_WARNING | E_PARSE);
-
-       header('Content-Type: text/html; charset=utf-8');
-
-       define('MOBILE_VERSION', true);
-
-       $basedir = dirname(dirname(dirname(__FILE__)));
-
-       set_include_path(
-               dirname(__FILE__) . PATH_SEPARATOR .
-               $basedir . PATH_SEPARATOR .
-               "$basedir/include" . PATH_SEPARATOR .
-               get_include_path());
-
-       require_once "config.php";
-       require_once "mobile-functions.php";
-
-       login_sequence(true);
-
-       $feed_id = db_escape_string($_REQUEST["id"]);
-       $cat_id = db_escape_string($_REQUEST["cat"]);
-       $offset = (int) db_escape_string($_REQUEST["skip"]);
-       $search = db_escape_string($_REQUEST["search"]);
-       $is_cat = (bool) db_escape_string($_REQUEST["is_cat"]);
-
-       render_headlines_list($feed_id, $cat_id, $offset, $search, $is_cat);
-?>
-
diff --git a/plugins/mobile/home.php b/plugins/mobile/home.php
deleted file mode 100644 (file)
index 3039635..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-       error_reporting(E_ERROR | E_WARNING | E_PARSE);
-
-       header('Content-Type: text/html; charset=utf-8');
-
-       define('MOBILE_VERSION', true);
-
-       $basedir = dirname(dirname(dirname(__FILE__)));
-
-       set_include_path(
-               dirname(__FILE__) . PATH_SEPARATOR .
-               $basedir . PATH_SEPARATOR .
-               "$basedir/include" . PATH_SEPARATOR .
-               get_include_path());
-
-       require_once "config.php";
-       require_once "mobile-functions.php";
-
-       login_sequence(true);
-
-       $use_cats = mobile_get_pref('ENABLE_CATS');
-       $offset = (int) db_escape_string($_REQUEST["skip"]);
-
-       if ($use_cats) {
-               render_categories_list($link);
-       } else {
-               render_flat_feed_list($offset);
-       }
-?>
diff --git a/plugins/mobile/index.php b/plugins/mobile/index.php
deleted file mode 100644 (file)
index 9e9c339..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-       error_reporting(E_ERROR | E_WARNING | E_PARSE);
-
-       header('Content-Type: text/html; charset=utf-8');
-
-       define('MOBILE_VERSION', true);
-
-       $basedir = dirname(dirname(dirname(__FILE__)));
-
-       set_include_path(
-               dirname(__FILE__) . PATH_SEPARATOR .
-               $basedir . PATH_SEPARATOR .
-               "$basedir/include" . PATH_SEPARATOR .
-               get_include_path());
-
-       require_once "config.php";
-       require_once "mobile-functions.php";
-
-       login_sequence(true);
-?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<title>Tiny Tiny RSS</title>
-<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>
-<link rel="apple-touch-icon" href="iui/iui-logo-touch-icon.png" />
-<meta name="apple-touch-fullscreen" content="YES" />
-<style type="text/css" media="screen">@import "iui/iui.css";</style>
-<script type="application/x-javascript" src="iui/iui.js"></script>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-<script type="text/javascript" src="../../lib/prototype.js"></script>
-<script type="text/javascript" src="mobile.js"></script>
-<style type="text/css" media="screen">@import "mobile.css";</style>
-</head>
-
-<style type="text/css">
-       img { max-width : 75%; }
-
-       li.oldItem {
-               color : gray;
-       }
-
-       #myBackButton {
-           display: none;
-           left: 6px;
-           right: auto;
-           padding: 0;
-           max-width: 55px;
-           border-width: 0 8px 0 14px;
-           -webkit-border-image: url(iui/backButton.png) 0 8 0 14;
-       }
-
-       img.tinyIcon {
-               max-width : 16px;
-               max-height : 16px;
-               margin-right : 10px;
-               vertical-align : middle;
-       }
-
-       a img {
-               border-width : 0px;
-       }
-</style>
-
-<body>
-    <div class="toolbar">
-        <h1 id="pageTitle"></h1>
-                 <a id="myBackButton" class="button" href="#"></a>
-        <a class="button" href="prefs.php">Preferences</a>
-    </div>
-
-       <?php
-       $use_cats = mobile_get_pref('ENABLE_CATS');
-       $offset = (int) db_escape_string($_REQUEST["skip"]);
-
-       if ($use_cats) {
-               render_categories_list($link);
-       } else {
-               render_flat_feed_list($offset);
-       }
-       ?>
-
-</body>
-</html>
diff --git a/plugins/mobile/init.php b/plugins/mobile/init.php
deleted file mode 100644 (file)
index 1a59fe3..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-class Mobile extends Plugin implements IHandler {
-       private $host;
-
-       function about() {
-               return array(1.0,
-                       "Classic mobile version for tt-rss (unsupported)",
-                       "fox",
-                       true);
-       }
-
-       function init($host) {
-               $this->host = $host;
-
-               $host->add_handler("mobile", "index", $this);
-       }
-
-       function index() {
-               header("Content-type: text/html; charset=utf-8");
-
-               header("Location: plugins/mobile/index.php");
-       }
-
-       /* function get_js() {
-               return file_get_contents(dirname(__FILE__) . "/digest.js");
-       } */
-
-       function csrf_ignore($method) {
-               return true; //in_array($method, array("index"));
-       }
-
-       function before($method) {
-               return true;
-       }
-
-       function after() {
-
-       }
-
-       function api_version() {
-               return 2;
-       }
-
-}
-?>
diff --git a/plugins/mobile/iui/LICENSE.txt b/plugins/mobile/iui/LICENSE.txt
deleted file mode 100644 (file)
index c9d2a0d..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-Copyright (c) 2007-2009, iUI Project Members
-
-All rights reserved.
-
-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 iUI Project 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.
diff --git a/plugins/mobile/iui/NOTICE.txt b/plugins/mobile/iui/NOTICE.txt
deleted file mode 100644 (file)
index 3a23f56..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-NOTICE.txt - iUI credits and copyright notices
-
-   iUI is Copyright (c) 2007-2009 by the iUI project members: 
-           M. Sean Gilligan (msgilligan)
-       Past members:    
-           Joe  Hewitt (joehewitt)
-           Christopher Allen (ChristopherA)
-
-CREDITS
-       schlueter - committed fixes for issues #9, #11, #63 -- added samples
-       ???       - created iUI icon
-       kris.tate - named it "iUI", created Google Code project, initial checkin
-       others    - let us know if we missed you
-       iUI users - thanks for your patience, feedback, and bug reports
-
-THIRD PARTY COMPONENTS
-
-   * iUI includes software developed by the Mozilla Project
-        Copyright (c) 1997-2007, Netscape Communications Corporation and others.
-        All rights reserved.
-        http://www.mozilla.org/rhino/
-
-   * iUI includes software developed by the Dojo Foundation
-        http://dojotoolkit.org/docs/shrinksafe
-
-   * iUI includes software developed by LCA Soft  Ltd.
-        http://www.lcasoft.com/compress-js.html
-
-   * iUI includes software developed by the ant-googlcode Project
-        http://code.google.com/p/ant-googlecode/
-
-
-
diff --git a/plugins/mobile/iui/backButton.png b/plugins/mobile/iui/backButton.png
deleted file mode 100644 (file)
index e27ea8c..0000000
Binary files a/plugins/mobile/iui/backButton.png and /dev/null differ
diff --git a/plugins/mobile/iui/blueButton.png b/plugins/mobile/iui/blueButton.png
deleted file mode 100644 (file)
index 0f92dfd..0000000
Binary files a/plugins/mobile/iui/blueButton.png and /dev/null differ
diff --git a/plugins/mobile/iui/cancel.png b/plugins/mobile/iui/cancel.png
deleted file mode 100644 (file)
index 5f6dcc8..0000000
Binary files a/plugins/mobile/iui/cancel.png and /dev/null differ
diff --git a/plugins/mobile/iui/grayButton.png b/plugins/mobile/iui/grayButton.png
deleted file mode 100644 (file)
index 0ce6a30..0000000
Binary files a/plugins/mobile/iui/grayButton.png and /dev/null differ
diff --git a/plugins/mobile/iui/iui-logo-touch-icon.png b/plugins/mobile/iui/iui-logo-touch-icon.png
deleted file mode 100644 (file)
index 8817b30..0000000
Binary files a/plugins/mobile/iui/iui-logo-touch-icon.png and /dev/null differ
diff --git a/plugins/mobile/iui/iui.css b/plugins/mobile/iui/iui.css
deleted file mode 100644 (file)
index 3933dba..0000000
+++ /dev/null
@@ -1,398 +0,0 @@
-/* iui.css (c) 2007-9 by iUI Project Members, see LICENSE.txt for license */
-body {
-    margin: 0;
-    font-family: Helvetica;
-    background: #FFFFFF;
-    color: #000000;
-    overflow-x: hidden;
-    -webkit-user-select: none;
-    -webkit-text-size-adjust: none;
-}
-
-body > *:not(.toolbar) {
-    display: none;
-    position: absolute;
-    margin: 0;
-    padding: 0;
-    left: 0;
-    top: 45px;
-    width: 100%;
-    min-height: 372px;
-    -webkit-transition-duration: 300ms;
-    -webkit-transition-property: -webkit-transform;
-    -webkit-transform: translateX(0%);
-}
-
-body[orient="landscape"] > *:not(.toolbar) {
-    min-height: 268px;
-}
-
-body > *[selected="true"] {
-    display: block;
-}
-
-a[selected], a:active {
-    background-color: #194fdb !important;
-    background-image: url(listArrowSel.png), url(selection.png) !important;
-    background-repeat: no-repeat, repeat-x;
-    background-position: right center, left top;
-    color: #FFFFFF !important;
-}
-
-a[selected="progress"] {
-    background-image: url(loading.gif), url(selection.png) !important;
-}
-
-/************************************************************************************************/
-
-body > .toolbar {
-    box-sizing: border-box;
-    -moz-box-sizing: border-box;
-    -webkit-box-sizing: border-box;
-    border-bottom: 1px solid #2d3642;
-    border-top: 1px solid #6d84a2;
-    padding: 10px;
-    height: 45px;
-    background: url(toolbar.png) #6d84a2 repeat-x;
-}
-
-.toolbar > h1 {
-    position: absolute;
-    overflow: hidden;
-    left: 50%;
-    margin: 1px 0 0 -75px;
-    height: 45px;
-    font-size: 20px;
-    width: 150px;
-    font-weight: bold;
-    text-shadow: rgba(0, 0, 0, 0.4) 0px -1px 0;
-    text-align: center;
-    text-overflow: ellipsis;
-    white-space: nowrap;
-    color: #FFFFFF;
-}
-
-body[orient="landscape"] > .toolbar > h1 {
-    margin-left: -125px;
-    width: 250px;
-}
-
-.button {
-    position: absolute;
-    overflow: hidden;
-    top: 8px;
-    right: 6px;
-    margin: 0;
-    border-width: 0 5px;
-    padding: 0 3px;
-    width: auto;
-    height: 30px;
-    line-height: 30px;
-    font-family: inherit;
-    font-size: 12px;
-    font-weight: bold;
-    color: #FFFFFF;
-    text-shadow: rgba(0, 0, 0, 0.6) 0px -1px 0;
-    text-overflow: ellipsis;
-    text-decoration: none;
-    white-space: nowrap;
-    background: none;
-    -webkit-border-image: url(toolButton.png) 0 5 0 5;
-}
-
-.blueButton {
-    -webkit-border-image: url(blueButton.png) 0 5 0 5;
-    border-width: 0 5px;
-}
-
-.leftButton {
-    left: 6px;
-    right: auto;
-}
-
-#backButton {
-    display: none;
-    left: 6px;
-    right: auto;
-    padding: 0;
-    max-width: 55px;
-    border-width: 0 8px 0 14px;
-    -webkit-border-image: url(backButton.png) 0 8 0 14;
-}
-
-.whiteButton,
-.redButton,
-.grayButton {
-    display: block;
-    border-width: 0 12px;
-    padding: 10px;
-    text-align: center;
-    font-size: 20px;
-    font-weight: bold;
-    text-decoration: inherit;
-    color: inherit;
-}
-
-.whiteButton {
-    -webkit-border-image: url(whiteButton.png) 0 12 0 12;
-    text-shadow: rgba(255, 255, 255, 0.7) 0 1px 0;
-}
-
-.redButton {
-    -webkit-border-image: url(redButton.png) 0 12 0 12;
-    color:#fff;
-    text-shadow: #7a0001 0 -1px 0;
-}
-
-.grayButton {
-    -webkit-border-image: url(grayButton.png) 0 12 0 12;
-    color: #FFFFFF;
-}
-
-/************************************************************************************************/
-
-body > ul > li {
-    position: relative;
-    margin: 0;
-    border-bottom: 1px solid #E0E0E0;
-    padding: 8px 0 8px 10px;
-    font-size: 20px;
-    font-weight: bold;
-    list-style: none;
-}
-
-body > ul > li.group {
-    position: relative;
-    top: -1px;
-    margin-bottom: -2px;
-    border-top: 1px solid #7d7d7d;
-    border-bottom: 1px solid #999999;
-    padding: 1px 10px;
-    background: url(listGroup.png) repeat-x;
-    font-size: 17px;
-    font-weight: bold;
-    text-shadow: rgba(0, 0, 0, 0.4) 0 1px 0;
-    color: #FFFFFF;
-}
-
-body > ul > li.group:first-child {
-    top: 0;
-    border-top: none;
-}
-
-body > ul > li > a {
-    display: block;
-    margin: -8px 0 -8px -10px;
-    padding: 8px 32px 8px 10px;
-    text-decoration: none;
-    color: inherit;
-    background: url(listArrow.png) no-repeat right center;
-}
-
-a[target="_replace"] {
-    box-sizing: border-box;
-    -webkit-box-sizing: border-box;
-    padding-top: 25px;
-    padding-bottom: 25px;
-    font-size: 18px;
-    color: cornflowerblue;
-    background-color: #FFFFFF;
-    background-image: none;
-}
-
-/************************************************************************************************/
-    
-body > .dialog {
-    top: 0;
-    width: 100%;
-    min-height: 417px;
-    z-index: 2;
-    background: rgba(0, 0, 0, 0.8);
-    padding: 0;
-    text-align: right;
-}
-
-.dialog > fieldset {
-    box-sizing: border-box;
-    -webkit-box-sizing: border-box;
-    width: 100%;
-    margin: 0;
-    border: none;
-    border-top: 1px solid #6d84a2;
-    padding: 10px 6px;
-    background: url(toolbar.png) #7388a5 repeat-x;
-}
-
-.dialog > fieldset > h1 {
-    margin: 0 10px 0 10px;
-    padding: 0;
-    font-size: 20px;
-    font-weight: bold;
-    color: #FFFFFF;
-    text-shadow: rgba(0, 0, 0, 0.4) 0px -1px 0;
-    text-align: center;
-}
-
-.dialog > fieldset > label {
-    position: absolute;
-    margin: 16px 0 0 6px;
-    font-size: 14px;
-    color: #999999;
-}
-
-/*input:not(input[type|=radio]):not(input[type|=checkbox]) {*/
-input[type|=text], input[type|=password] {
-    box-sizing: border-box;
-    -webkit-box-sizing: border-box;
-    width: 100%;
-    margin: 8px 0 0 0;
-    padding: 6px 6px 6px 44px;
-    font-size: 16px;
-    font-weight: normal;
-}
-
-/************************************************************************************************/
-
-body > .panel {
-    box-sizing: border-box;
-    -moz-box-sizing: border-box;
-    -webkit-box-sizing: border-box;
-    padding: 10px;
-    background: #c8c8c8 url(pinstripes.png);
-}
-
-.panel > fieldset {
-    position: relative;
-    margin: 0 0 20px 0;
-    padding: 0;
-    background: #FFFFFF;
-    -webkit-border-radius: 10px;
-    -moz-border-radius: 10px;
-    border: 1px solid #999999;
-    text-align: right;
-    font-size: 16px;
-}
-
-.row  {
-    position: relative;
-    min-height: 42px;
-    border-bottom: 1px solid #999999;
-    -webkit-border-radius: 0;
-    text-align: left;
-}
-
-fieldset > .row:last-child {
-    border-bottom: none !important;
-}
-
-/*.row > input:not(input[type|=radio]):not(input[type|=checkbox]) {*/
-.row > input[type|=text], .row > input[type|=password] {
-    box-sizing: border-box;
-    -moz-box-sizing: border-box;
-    -webkit-box-sizing: border-box;
-    margin: 0;
-    border: none;
-    padding: 12px 10px 0 110px;
-/*    height: 42px;*/
-    background: none;
-}
-.row > input[type|=radio], .row > input[type|=checkbox] {
-  margin: 7px 7px 0 0;
-  height: 25px;
-  width: 25px;
-}
-
-.row > label {
-    position: absolute;
-    margin: 0 0 0 14px;
-    line-height: 42px;
-    font-weight: bold;
-}
-
-.row > span {
-    position: absolute;
-    padding: 12px 10px 0 110px;
-    margin: 0;
-}
-
-.row > .toggle {
-    position: absolute;
-    top: 6px;
-    right: 6px;
-    width: 100px;
-    height: 28px;
-}
-
-.toggle {
-    border: 1px solid #888888;
-    -webkit-border-radius: 6px;
-    background: #FFFFFF url(toggle.png) repeat-x;
-    font-size: 19px;
-    font-weight: bold;
-    line-height: 30px;
-}
-
-.toggle[toggled="true"] {
-    border: 1px solid #143fae;
-    background: #194fdb url(toggleOn.png) repeat-x;
-}
-
-.toggleOn {
-    display: none;
-    position: absolute;
-    width: 60px;
-    text-align: center;
-    left: 0;
-    top: 0;
-    color: #FFFFFF;
-    text-shadow: rgba(0, 0, 0, 0.4) 0px -1px 0;
-}
-
-.toggleOff {
-    position: absolute;
-    width: 60px;
-    text-align: center;
-    right: 0;
-    top: 0;
-    color: #666666;
-}
-
-.toggle[toggled="true"] > .toggleOn {
-    display: block;
-}
-
-.toggle[toggled="true"] > .toggleOff {
-    display: none;
-}
-
-.thumb {
-    position: absolute;
-    top: -1px;
-    left: -1px;
-    width: 40px;
-    height: 28px;    
-    border: 1px solid #888888;
-    -webkit-border-radius: 6px;
-    background: #ffffff url(thumb.png) repeat-x;
-}
-
-.toggle[toggled="true"] > .thumb {
-    left: auto;
-    right: -1px;
-}
-
-.panel > h2 {
-    margin: 0 0 8px 14px;
-    font-size: inherit;
-    font-weight: bold;
-    color: #4d4d70;
-    text-shadow: rgba(255, 255, 255, 0.75) 2px 2px 0;
-}
-
-/************************************************************************************************/
-
-#preloader {
-    display: none;
-    background-image: url(loading.gif), url(selection.png),
-        url(blueButton.png), url(listArrowSel.png), url(listGroup.png);
-}
diff --git a/plugins/mobile/iui/iui.js b/plugins/mobile/iui/iui.js
deleted file mode 100644 (file)
index 0937afe..0000000
+++ /dev/null
@@ -1,542 +0,0 @@
-/*
-   Copyright (c) 2007-9, iUI Project Members
-   See LICENSE.txt for licensing terms
- */
-
-
-(function() {
-
-var slideSpeed = 20;
-var slideInterval = 0;
-
-var currentPage = null;
-var currentDialog = null;
-var currentWidth = 0;
-var currentHash = location.hash;
-var hashPrefix = "#_";
-var pageHistory = [];
-var newPageCount = 0;
-var checkTimer;
-var hasOrientationEvent = false;
-var portraitVal = "portrait";
-var landscapeVal = "landscape";
-
-// *************************************************************************************************
-
-window.iui =
-{
-       animOn: true,   // Slide animation with CSS transition is now enabled by default where supported
-
-       showPage: function(page, backwards)
-       {
-               if (page)
-               {
-                       if (currentDialog)
-                       {
-                               currentDialog.removeAttribute("selected");
-                               currentDialog = null;
-                       }
-
-                       if (hasClass(page, "dialog"))
-                               showDialog(page);
-                       else
-                       {
-                               var fromPage = currentPage;
-                               currentPage = page;
-
-                               if (fromPage)
-                                       setTimeout(slidePages, 0, fromPage, page, backwards);
-                               else
-                                       updatePage(page, fromPage);
-                       }
-               }
-       },
-
-       showPageById: function(pageId)
-       {
-               var page = $(pageId);
-               if (page)
-               {
-                       var index = pageHistory.indexOf(pageId);
-                       var backwards = index != -1;
-                       if (backwards)
-                               pageHistory.splice(index, pageHistory.length);
-
-                       iui.showPage(page, backwards);
-               }
-       },
-
-       showPageByHref: function(href, args, method, replace, cb, bw)
-       {
-               var req = new XMLHttpRequest();
-               req.onerror = function()
-               {
-                       if (cb)
-                               cb(false);
-               };
-               
-               req.onreadystatechange = function()
-               {
-                       if (req.readyState == 4)
-                       {
-                               if (replace)
-                                       replaceElementWithSource(replace, req.responseText);
-                               else
-                               {
-                                       var frag = document.createElement("div");
-                                       frag.innerHTML = req.responseText;
-                                       iui.insertPages(frag.childNodes, bw);
-                               }
-                               if (cb)
-                                       setTimeout(cb, 1000, true);
-                       }
-               };
-
-               if (args)
-               {
-                       req.open(method || "GET", href, true);
-                       req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
-                       req.setRequestHeader("Content-Length", args.length);
-                       req.send(args.join("&"));
-               }
-               else
-               {
-                       req.open(method || "GET", href, true);
-                       req.send(null);
-               }
-       },
-       
-       insertPages: function(nodes, bw)
-       {
-               var targetPage;
-               for (var i = 0; i < nodes.length; ++i)
-               {
-                       var child = nodes[i];
-                       if (child.nodeType == 1)
-                       {
-                               if (!child.id)
-                                       child.id = "__" + (++newPageCount) + "__";
-
-                               var clone = $(child.id);
-                               if (clone)
-                                       clone.parentNode.replaceChild(child, clone);
-                               else
-                                       document.body.appendChild(child);
-
-                               if (child.getAttribute("selected") == "true" || !targetPage)
-                                       targetPage = child;
-                               
-                               --i;
-                       }
-               }
-
-               if (targetPage)
-                       iui.showPage(targetPage, bw);    
-       },
-
-       getSelectedPage: function()
-       {
-               for (var child = document.body.firstChild; child; child = child.nextSibling)
-               {
-                       if (child.nodeType == 1 && child.getAttribute("selected") == "true")
-                               return child;
-               }        
-       },
-       isNativeUrl: function(href)
-       {
-               for(var i = 0; i < iui.nativeUrlPatterns.length; i++)
-               {
-                       if(href.match(iui.nativeUrlPatterns[i])) return true;
-               }
-               return false;
-       },
-       nativeUrlPatterns: [
-               new RegExp("^http:\/\/maps.google.com\/maps\?"),
-               new RegExp("^mailto:"),
-               new RegExp("^tel:"),
-               new RegExp("^http:\/\/www.youtube.com\/watch\\?v="),
-               new RegExp("^http:\/\/www.youtube.com\/v\/"),
-               new RegExp("^javascript:"),
-
-       ]
-};
-
-// *************************************************************************************************
-
-addEventListener("load", function(event)
-{
-       var page = iui.getSelectedPage();
-       var locPage = getPageFromLoc();
-               
-       if (page)
-                       iui.showPage(page);
-       
-       if (locPage && (locPage != page))
-               iui.showPage(locPage);
-       
-       setTimeout(preloadImages, 0);
-       if (typeof window.onorientationchange == "object")
-       {
-               window.onorientationchange=orientChangeHandler;
-               hasOrientationEvent = true;
-               setTimeout(orientChangeHandler, 0);
-       }
-       setTimeout(checkOrientAndLocation, 0);
-       checkTimer = setInterval(checkOrientAndLocation, 300);
-}, false);
-
-addEventListener("unload", function(event)
-{
-       return;
-}, false);
-       
-addEventListener("click", function(event)
-{
-       var link = findParent(event.target, "a");
-       if (link)
-       {
-               function unselect() { link.removeAttribute("selected"); }
-               
-               if (link.href && link.hash && link.hash != "#" && !link.target)
-               {
-                       link.setAttribute("selected", "true");
-                       iui.showPage($(link.hash.substr(1)));
-                       setTimeout(unselect, 500);
-               }
-               else if (link == $("backButton"))
-                       history.back();
-               else if (link.getAttribute("type") == "submit")
-               {
-                       var form = findParent(link, "form");
-                       if (form.target == "_self")
-                       {
-                           form.submit();
-                           return;  // return so we don't preventDefault
-                       }
-                       submitForm(form);
-               }
-               else if (link.getAttribute("type") == "cancel")
-                       cancelDialog(findParent(link, "form"));
-               else if (link.target == "_replace")
-               {
-                       link.setAttribute("selected", "progress");
-                       iui.showPageByHref(link.href, null, null, link, unselect);
-               }
-               else if (iui.isNativeUrl(link.href))
-               {
-                       return;
-               }
-               else if (link.target == "_webapp")
-               {
-                       location.href = link.href;
-               }
-               else if (!link.target)
-               {
-                       link.setAttribute("selected", "progress");
-                       var bw = link.getAttribute("backwards");
-                       iui.showPageByHref(link.href, null, null, null, unselect, bw);
-               }
-               else
-                       return;
-               
-               event.preventDefault();            
-       }
-}, true);
-
-addEventListener("click", function(event)
-{
-       var div = findParent(event.target, "div");
-       if (div && hasClass(div, "toggle"))
-       {
-               div.setAttribute("toggled", div.getAttribute("toggled") != "true");
-               event.preventDefault();            
-       }
-}, true);
-
-function getPageFromLoc()
-{
-       var page;
-       var result = location.hash.match(/#_([^\?_]+)/);
-       if (result)
-               page = result[1];
-       if (page)
-               page = $(page);
-       return page;
-}
-
-function orientChangeHandler()
-{
-       var orientation=window.orientation;
-       switch(orientation)
-       {
-       case 0:
-               setOrientation(portraitVal);
-               break;  
-               
-       case 90:
-       case -90: 
-               setOrientation(landscapeVal);
-               break;
-       }
-}
-
-
-function checkOrientAndLocation()
-{
-       if (!hasOrientationEvent)
-       {
-         if (window.innerWidth != currentWidth)
-         {       
-                 currentWidth = window.innerWidth;
-                 var orient = currentWidth == 320 ? portraitVal : landscapeVal;
-                 setOrientation(orient);
-         }
-       }
-
-       if (location.hash != currentHash)
-       {
-               var pageId = location.hash.substr(hashPrefix.length);
-               iui.showPageById(pageId);
-       }
-}
-
-function setOrientation(orient)
-{
-       document.body.setAttribute("orient", orient);
-       setTimeout(scrollTo, 100, 0, 1);
-}
-
-function showDialog(page)
-{
-       currentDialog = page;
-       page.setAttribute("selected", "true");
-       
-       if (hasClass(page, "dialog") && !page.target)
-               showForm(page);
-}
-
-function showForm(form)
-{
-       form.onsubmit = function(event)
-       {
-               event.preventDefault();
-               submitForm(form);
-       };
-       
-       form.onclick = function(event)
-       {
-               if (event.target == form && hasClass(form, "dialog"))
-                       cancelDialog(form);
-       };
-}
-
-function cancelDialog(form)
-{
-       form.removeAttribute("selected");
-}
-
-function updatePage(page, fromPage)
-{
-       if (!page.id)
-               page.id = "__" + (++newPageCount) + "__";
-
-       location.hash = currentHash = hashPrefix + page.id;
-       pageHistory.push(page.id);
-
-       var pageTitle = $("pageTitle");
-       if (page.title)
-               pageTitle.innerHTML = page.title;
-
-       if (page.localName.toLowerCase() == "form" && !page.target)
-               showForm(page);
-               
-       var backButton = $("backButton");
-       if (backButton)
-       {
-               var prevPage = $(pageHistory[pageHistory.length-2]);
-               if (prevPage && !page.getAttribute("hideBackButton"))
-               {
-                       backButton.style.display = "inline";
-                       backButton.innerHTML = prevPage.title ? prevPage.title : "Back";
-               }
-               else
-                       backButton.style.display = "none";
-       }       
-
-       var backButton = $("myBackButton");
-       if (backButton)
-       {
-               var label = page.getAttribute("myBackLabel");
-
-               if (label)
-               {
-                       backButton.style.display = "inline";
-                       backButton.innerHTML = label;
-                       backButton.href = page.getAttribute("myBackHref");
-                       //backButton.target = page.getAttribute("myBackTarget");
-                       target = page.getAttribute("myBackTarget");
-                       if (target == null)
-                               backButton.target = '';
-                   else
-                               backButton.target = target;
-                       backButton.setAttribute("backwards", "true");
-               }
-               else
-                       backButton.style.display = "none";
-       }        
-
-}
-
-function slidePages(fromPage, toPage, backwards)
-{               
-       var axis = (backwards ? fromPage : toPage).getAttribute("axis");
-
-       clearInterval(checkTimer);
-       
-       if (canDoSlideAnim() && axis != 'y')
-       {
-         slide2(fromPage, toPage, backwards, slideDone);
-       }
-       else
-       {
-         slide1(fromPage, toPage, backwards, axis, slideDone);
-       }
-
-       function slideDone()
-       {
-         if (!hasClass(toPage, "dialog"))
-                 fromPage.removeAttribute("selected");
-         checkTimer = setInterval(checkOrientAndLocation, 300);
-         setTimeout(updatePage, 0, toPage, fromPage);
-         fromPage.removeEventListener('webkitTransitionEnd', slideDone, false);
-       }
-}
-
-function canDoSlideAnim()
-{
-  return (iui.animOn) && (typeof WebKitCSSMatrix == "object");
-}
-
-function slide1(fromPage, toPage, backwards, axis, cb)
-{
-       if (axis == "y")
-               (backwards ? fromPage : toPage).style.top = "100%";
-       else
-               toPage.style.left = "100%";
-
-       scrollTo(0, 1);
-       toPage.setAttribute("selected", "true");
-       var percent = 100;
-       slide();
-       var timer = setInterval(slide, slideInterval);
-
-       function slide()
-       {
-               percent -= slideSpeed;
-               if (percent <= 0)
-               {
-                       percent = 0;
-                       clearInterval(timer);
-                       cb();
-               }
-       
-               if (axis == "y")
-               {
-                       backwards
-                               ? fromPage.style.top = (100-percent) + "%"
-                               : toPage.style.top = percent + "%";
-               }
-               else
-               {
-                       fromPage.style.left = (backwards ? (100-percent) : (percent-100)) + "%"; 
-                       toPage.style.left = (backwards ? -percent : percent) + "%"; 
-               }
-       }
-}
-
-
-function slide2(fromPage, toPage, backwards, cb)
-{
-       toPage.style.webkitTransitionDuration = '0ms'; // Turn off transitions to set toPage start offset
-       // fromStart is always 0% and toEnd is always 0%
-       // iPhone won't take % width on toPage
-       var toStart = 'translateX(' + (backwards ? '-' : '') + window.innerWidth +      'px)';
-       var fromEnd = 'translateX(' + (backwards ? '100%' : '-100%') + ')';
-       toPage.style.webkitTransform = toStart;
-       toPage.setAttribute("selected", "true");
-       toPage.style.webkitTransitionDuration = '';       // Turn transitions back on
-       function startTrans()
-       {
-               fromPage.style.webkitTransform = fromEnd;
-               toPage.style.webkitTransform = 'translateX(0%)'; //toEnd
-       }
-       fromPage.addEventListener('webkitTransitionEnd', cb, false);
-       setTimeout(startTrans, 0);
-}
-
-function preloadImages()
-{
-       var preloader = document.createElement("div");
-       preloader.id = "preloader";
-       document.body.appendChild(preloader);
-}
-
-function submitForm(form)
-{
-       iui.showPageByHref(form.action || "POST", encodeForm(form), form.method);
-}
-
-function encodeForm(form)
-{
-       function encode(inputs)
-       {
-               for (var i = 0; i < inputs.length; ++i)
-               {
-                       if (inputs[i].name)
-                               args.push(inputs[i].name + "=" + escape(inputs[i].value));
-               }
-       }
-
-       var args = [];
-       encode(form.getElementsByTagName("input"));
-       encode(form.getElementsByTagName("textarea"));
-       encode(form.getElementsByTagName("select"));
-       return args;    
-}
-
-function findParent(node, localName)
-{
-       while (node && (node.nodeType != 1 || node.localName.toLowerCase() != localName))
-               node = node.parentNode;
-       return node;
-}
-
-function hasClass(self, name)
-{
-       var re = new RegExp("(^|\\s)"+name+"($|\\s)");
-       return re.exec(self.getAttribute("class")) != null;
-}
-
-function replaceElementWithSource(replace, source)
-{
-       var page = replace.parentNode;
-       var parent = replace;
-       while (page.parentNode != document.body)
-       {
-               page = page.parentNode;
-               parent = parent.parentNode;
-       }
-
-       var frag = document.createElement(parent.localName);
-       frag.innerHTML = source;
-
-       page.removeChild(parent);
-
-       while (frag.firstChild)
-               page.appendChild(frag.firstChild);
-}
-
-function $(id) { return document.getElementById(id); }
-function ddd() { console.log.apply(console, arguments); }
-
-})();
diff --git a/plugins/mobile/iui/iuix.css b/plugins/mobile/iui/iuix.css
deleted file mode 100644 (file)
index 1df7e8a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-body{margin:0;font-family:Helvetica;background:#FFF;color:#000;overflow-x:hidden;-webkit-user-select:none;-webkit-text-size-adjust:none;}body>*:not(.toolbar){display:none;position:absolute;margin:0;padding:0;left:0;top:45px;width:100%;min-height:372px;-webkit-transition-duration:300ms;-webkit-transition-property:-webkit-transform;-webkit-transform:translateX(0%);}body[orient="landscape"]>*:not(.toolbar){min-height:268px;}body>*[selected="true"]{display:block;}a[selected],a:active{background-color:#194fdb!important;background-image:url(listArrowSel.png),url(selection.png)!important;background-repeat:no-repeat,repeat-x;background-position:right center,left top;color:#FFF!important;}a[selected="progress"]{background-image:url(loading.gif),url(selection.png)!important;}body>.toolbar{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;border-bottom:1px solid #2d3642;border-top:1px solid #6d84a2;padding:10px;height:45px;background:url(toolbar.png) #6d84a2 repeat-x;}.toolbar>h1{position:absolute;overflow:hidden;left:50%;margin:1px 0 0 -75px;height:45px;font-size:20px;width:150px;font-weight:bold;text-shadow:rgba(0,0,0,0.4) 0 -1px 0;text-align:center;text-overflow:ellipsis;white-space:nowrap;color:#FFF;}body[orient="landscape"]>.toolbar>h1{margin-left:-125px;width:250px;}.button{position:absolute;overflow:hidden;top:8px;right:6px;margin:0;border-width:0 5px;padding:0 3px;width:auto;height:30px;line-height:30px;font-family:inherit;font-size:12px;font-weight:bold;color:#FFF;text-shadow:rgba(0,0,0,0.6) 0 -1px 0;text-overflow:ellipsis;text-decoration:none;white-space:nowrap;background:none;-webkit-border-image:url(toolButton.png) 0 5 0 5;}.blueButton{-webkit-border-image:url(blueButton.png) 0 5 0 5;border-width:0 5px;}.leftButton{left:6px;right:auto;}#backButton{display:none;left:6px;right:auto;padding:0;max-width:55px;border-width:0 8px 0 14px;-webkit-border-image:url(backButton.png) 0 8 0 14;}.whiteButton,.redButton,.grayButton{display:block;border-width:0 12px;padding:10px;text-align:center;font-size:20px;font-weight:bold;text-decoration:inherit;color:inherit;}.whiteButton{-webkit-border-image:url(whiteButton.png) 0 12 0 12;text-shadow:rgba(255,255,255,0.7) 0 1px 0;}.redButton{-webkit-border-image:url(redButton.png) 0 12 0 12;color:#fff;text-shadow:#7a0001 0 -1px 0;}.grayButton{-webkit-border-image:url(grayButton.png) 0 12 0 12;color:#FFF;}body>ul>li{position:relative;margin:0;border-bottom:1px solid #E0E0E0;padding:8px 0 8px 10px;font-size:20px;font-weight:bold;list-style:none;}body>ul>li.group{position:relative;top:-1px;margin-bottom:-2px;border-top:1px solid #7d7d7d;border-bottom:1px solid #999;padding:1px 10px;background:url(listGroup.png) repeat-x;font-size:17px;font-weight:bold;text-shadow:rgba(0,0,0,0.4) 0 1px 0;color:#FFF;}body>ul>li.group:first-child{top:0;border-top:none;}body>ul>li>a{display:block;margin:-8px 0 -8px -10px;padding:8px 32px 8px 10px;text-decoration:none;color:inherit;background:url(listArrow.png) no-repeat right center;}a[target="_replace"]{box-sizing:border-box;-webkit-box-sizing:border-box;padding-top:25px;padding-bottom:25px;font-size:18px;color:cornflowerblue;background-color:#FFF;background-image:none;}body>.dialog{top:0;width:100%;min-height:417px;z-index:2;background:rgba(0,0,0,0.8);padding:0;text-align:right;}.dialog>fieldset{box-sizing:border-box;-webkit-box-sizing:border-box;width:100%;margin:0;border:none;border-top:1px solid #6d84a2;padding:10px 6px;background:url(toolbar.png) #7388a5 repeat-x;}.dialog>fieldset>h1{margin:0 10px 0 10px;padding:0;font-size:20px;font-weight:bold;color:#FFF;text-shadow:rgba(0,0,0,0.4) 0 -1px 0;text-align:center;}.dialog>fieldset>label{position:absolute;margin:16px 0 0 6px;font-size:14px;color:#999;}input:not(input[type|=radio]):not(input[type|=checkbox]){box-sizing:border-box;-webkit-box-sizing:border-box;width:100%;margin:8px 0 0 0;padding:6px 6px 6px 44px;font-size:16px;font-weight:normal;}body>.panel{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:10px;background:#c8c8c8 url(pinstripes.png);}.panel>fieldset{position:relative;margin:0 0 20px 0;padding:0;background:#FFF;-webkit-border-radius:10px;-moz-border-radius:10px;border:1px solid #999;text-align:right;font-size:16px;}.row{position:relative;min-height:42px;border-bottom:1px solid #999;-webkit-border-radius:0;text-align:right;}fieldset>.row:last-child{border-bottom:none!important;}.row>input:not(input[type|=radio]):not(input[type|=checkbox]){box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;margin:0;border:none;padding:12px 10px 0 110px;height:42px;background:none;}.row>input[type|=radio],.row>input[type|=checkbox]{margin:7px 7px 0 0;height:25px;width:25px;}.row>label{position:absolute;margin:0 0 0 14px;line-height:42px;font-weight:bold;}.row>span{position:absolute;padding:12px 10px 0 110px;margin:0;}.row>.toggle{position:absolute;top:6px;right:6px;width:100px;height:28px;}.toggle{border:1px solid #888;-webkit-border-radius:6px;background:#FFF url(toggle.png) repeat-x;font-size:19px;font-weight:bold;line-height:30px;}.toggle[toggled="true"]{border:1px solid #143fae;background:#194fdb url(toggleOn.png) repeat-x;}.toggleOn{display:none;position:absolute;width:60px;text-align:center;left:0;top:0;color:#FFF;text-shadow:rgba(0,0,0,0.4) 0 -1px 0;}.toggleOff{position:absolute;width:60px;text-align:center;right:0;top:0;color:#666;}.toggle[toggled="true"]>.toggleOn{display:block;}.toggle[toggled="true"]>.toggleOff{display:none;}.thumb{position:absolute;top:-1px;left:-1px;width:40px;height:28px;border:1px solid #888;-webkit-border-radius:6px;background:#fff url(thumb.png) repeat-x;}.toggle[toggled="true"]>.thumb{left:auto;right:-1px;}.panel>h2{margin:0 0 8px 14px;font-size:inherit;font-weight:bold;color:#4d4d70;text-shadow:rgba(255,255,255,0.75) 2px 2px 0;}#preloader{display:none;background-image:url(loading.gif),url(selection.png),url(blueButton.png),url(listArrowSel.png),url(listGroup.png);}
\ No newline at end of file
diff --git a/plugins/mobile/iui/iuix.js b/plugins/mobile/iui/iuix.js
deleted file mode 100644 (file)
index 09d2eb9..0000000
+++ /dev/null
@@ -1 +0,0 @@
-(function(){var _1=20;var _2=0;var _3=null;var _4=null;var _5=0;var _6=location.hash;var _7="#_";var _8=[];var _9=0;var _a;var _b=false;var _c="portrait";var _d="landscape";window.iui={animOn:true,showPage:function(_e,_f){if(_e){if(_4){_4.removeAttribute("selected");_4=null;}if(hasClass(_e,"dialog")){showDialog(_e);}else{var _10=_3;_3=_e;if(_10){setTimeout(slidePages,0,_10,_e,_f);}else{updatePage(_e,_10);}}}},showPageById:function(_11){var _12=$(_11);if(_12){var _13=_8.indexOf(_11);var _14=_13!=-1;if(_14){_8.splice(_13,_8.length);}iui.showPage(_12,_14);}},showPageByHref:function(_15,_16,_17,_18,cb){var req=new XMLHttpRequest();req.onerror=function(){if(cb){cb(false);}};req.onreadystatechange=function(){if(req.readyState==4){if(_18){replaceElementWithSource(_18,req.responseText);}else{var _1b=document.createElement("div");_1b.innerHTML=req.responseText;iui.insertPages(_1b.childNodes);}if(cb){setTimeout(cb,1000,true);}}};if(_16){req.open(_17||"GET",_15,true);req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");req.setRequestHeader("Content-Length",_16.length);req.send(_16.join("&"));}else{req.open(_17||"GET",_15,true);req.send(null);}},insertPages:function(_1c){var _1d;for(var i=0;i<_1c.length;++i){var _1f=_1c[i];if(_1f.nodeType==1){if(!_1f.id){_1f.id="__"+(++_9)+"__";}var _20=$(_1f.id);if(_20){_20.parentNode.replaceChild(_1f,_20);}else{document.body.appendChild(_1f);}if(_1f.getAttribute("selected")=="true"||!_1d){_1d=_1f;}--i;}}if(_1d){iui.showPage(_1d);}},getSelectedPage:function(){for(var _21=document.body.firstChild;_21;_21=_21.nextSibling){if(_21.nodeType==1&&_21.getAttribute("selected")=="true"){return _21;}}},isNativeUrl:function(_22){for(var i=0;i<iui.nativeUrlPatterns.length;i++){if(_22.match(iui.nativeUrlPatterns[i])){return true;}}return false;},nativeUrlPatterns:[new RegExp("^http://maps.google.com/maps?"),new RegExp("^mailto:"),new RegExp("^tel:"),new RegExp("^http://www.youtube.com/watch\\?v="),new RegExp("^http://www.youtube.com/v/"),new RegExp("^javascript:"),]};addEventListener("load",function(_24){var _25=iui.getSelectedPage();var _26=getPageFromLoc();if(_25){iui.showPage(_25);}if(_26&&(_26!=_25)){iui.showPage(_26);}setTimeout(preloadImages,0);if(typeof window.onorientationchange=="object"){window.onorientationchange=orientChangeHandler;_b=true;setTimeout(orientChangeHandler,0);}setTimeout(checkOrientAndLocation,0);_a=setInterval(checkOrientAndLocation,300);},false);addEventListener("unload",function(_27){return;},false);addEventListener("click",function(_28){var _29=findParent(_28.target,"a");if(_29){function unselect(){_29.removeAttribute("selected");}if(_29.href&&_29.hash&&_29.hash!="#"&&!_29.target){_29.setAttribute("selected","true");iui.showPage($(_29.hash.substr(1)));setTimeout(unselect,500);}else{if(_29==$("backButton")){history.back();}else{if(_29.getAttribute("type")=="submit"){var _2a=findParent(_29,"form");if(_2a.target=="_self"){_2a.submit();return;}submitForm(_2a);}else{if(_29.getAttribute("type")=="cancel"){cancelDialog(findParent(_29,"form"));}else{if(_29.target=="_replace"){_29.setAttribute("selected","progress");iui.showPageByHref(_29.href,null,null,_29,unselect);}else{if(iui.isNativeUrl(_29.href)){return;}else{if(_29.target=="_webapp"){location.href=_29.href;}else{if(!_29.target){_29.setAttribute("selected","progress");iui.showPageByHref(_29.href,null,null,null,unselect);}else{return;}}}}}}}}_28.preventDefault();}},true);addEventListener("click",function(_2b){var div=findParent(_2b.target,"div");if(div&&hasClass(div,"toggle")){div.setAttribute("toggled",div.getAttribute("toggled")!="true");_2b.preventDefault();}},true);function getPageFromLoc(){var _2d;var _2e=location.hash.match(/#_([^\?_]+)/);if(_2e){_2d=_2e[1];}if(_2d){_2d=$(_2d);}return _2d;}function orientChangeHandler(){var _2f=window.orientation;switch(_2f){case 0:setOrientation(_c);break;case 90:case -90:setOrientation(_d);break;}}function checkOrientAndLocation(){if(!_b){if(window.innerWidth!=_5){_5=window.innerWidth;var _30=_5==320?_c:_d;setOrientation(_30);}}if(location.hash!=_6){var _31=location.hash.substr(_7.length);iui.showPageById(_31);}}function setOrientation(_32){document.body.setAttribute("orient",_32);setTimeout(scrollTo,100,0,1);}function showDialog(_33){_4=_33;_33.setAttribute("selected","true");if(hasClass(_33,"dialog")&&!_33.target){showForm(_33);}}function showForm(_34){_34.onsubmit=function(_35){_35.preventDefault();submitForm(_34);};_34.onclick=function(_36){if(_36.target==_34&&hasClass(_34,"dialog")){cancelDialog(_34);}};}function cancelDialog(_37){_37.removeAttribute("selected");}function updatePage(_38,_39){if(!_38.id){_38.id="__"+(++_9)+"__";}location.hash=_6=_7+_38.id;_8.push(_38.id);var _3a=$("pageTitle");if(_38.title){_3a.innerHTML=_38.title;}if(_38.localName.toLowerCase()=="form"&&!_38.target){showForm(_38);}var _3b=$("backButton");if(_3b){var _3c=$(_8[_8.length-2]);if(_3c&&!_38.getAttribute("hideBackButton")){_3b.style.display="inline";_3b.innerHTML=_3c.title?_3c.title:"Back";}else{_3b.style.display="none";}}}function slidePages(_3d,_3e,_3f){var _40=(_3f?_3d:_3e).getAttribute("axis");clearInterval(_a);if(canDoSlideAnim()&&_40!="y"){slide2(_3d,_3e,_3f,slideDone);}else{slide1(_3d,_3e,_3f,_40,slideDone);}function slideDone(){if(!hasClass(_3e,"dialog")){_3d.removeAttribute("selected");}_a=setInterval(checkOrientAndLocation,300);setTimeout(updatePage,0,_3e,_3d);_3d.removeEventListener("webkitTransitionEnd",slideDone,false);}}function canDoSlideAnim(){return (iui.animOn)&&(typeof WebKitCSSMatrix=="object");}function slide1(_41,_42,_43,_44,cb){if(_44=="y"){(_43?_41:_42).style.top="100%";}else{_42.style.left="100%";}scrollTo(0,1);_42.setAttribute("selected","true");var _46=100;slide();var _47=setInterval(slide,_2);function slide(){_46-=_1;if(_46<=0){_46=0;clearInterval(_47);cb();}if(_44=="y"){_43?_41.style.top=(100-_46)+"%":_42.style.top=_46+"%";}else{_41.style.left=(_43?(100-_46):(_46-100))+"%";_42.style.left=(_43?-_46:_46)+"%";}}}function slide2(_48,_49,_4a,cb){_49.style.webkitTransitionDuration="0ms";var _4c="translateX("+(_4a?"-":"")+window.innerWidth+"px)";var _4d="translateX("+(_4a?"100%":"-100%")+")";_49.style.webkitTransform=_4c;_49.setAttribute("selected","true");_49.style.webkitTransitionDuration="";function startTrans(){_48.style.webkitTransform=_4d;_49.style.webkitTransform="translateX(0%)";}_48.addEventListener("webkitTransitionEnd",cb,false);setTimeout(startTrans,0);}function preloadImages(){var _4e=document.createElement("div");_4e.id="preloader";document.body.appendChild(_4e);}function submitForm(_4f){iui.showPageByHref(_4f.action||"POST",encodeForm(_4f),_4f.method);}function encodeForm(_50){function encode(_51){for(var i=0;i<_51.length;++i){if(_51[i].name){args.push(_51[i].name+"="+escape(_51[i].value));}}}var _53=[];encode(_50.getElementsByTagName("input"));encode(_50.getElementsByTagName("textarea"));encode(_50.getElementsByTagName("select"));return _53;}function findParent(_54,_55){while(_54&&(_54.nodeType!=1||_54.localName.toLowerCase()!=_55)){_54=_54.parentNode;}return _54;}function hasClass(_56,_57){var re=new RegExp("(^|\\s)"+_57+"($|\\s)");return re.exec(_56.getAttribute("class"))!=null;}function replaceElementWithSource(_59,_5a){var _5b=_59.parentNode;var _5c=_59;while(_5b.parentNode!=document.body){_5b=_5b.parentNode;_5c=_5c.parentNode;}var _5d=document.createElement(_5c.localName);_5d.innerHTML=_5a;_5b.removeChild(_5c);while(_5d.firstChild){_5b.appendChild(_5d.firstChild);}}function $(id){return document.getElementById(id);}function ddd(){console.log.apply(console,arguments);}})();
\ No newline at end of file
diff --git a/plugins/mobile/iui/listArrow.png b/plugins/mobile/iui/listArrow.png
deleted file mode 100644 (file)
index 6421a16..0000000
Binary files a/plugins/mobile/iui/listArrow.png and /dev/null differ
diff --git a/plugins/mobile/iui/listArrowSel.png b/plugins/mobile/iui/listArrowSel.png
deleted file mode 100644 (file)
index 86832eb..0000000
Binary files a/plugins/mobile/iui/listArrowSel.png and /dev/null differ
diff --git a/plugins/mobile/iui/listGroup.png b/plugins/mobile/iui/listGroup.png
deleted file mode 100644 (file)
index 221553a..0000000
Binary files a/plugins/mobile/iui/listGroup.png and /dev/null differ
diff --git a/plugins/mobile/iui/loading.gif b/plugins/mobile/iui/loading.gif
deleted file mode 100644 (file)
index 8522ddf..0000000
Binary files a/plugins/mobile/iui/loading.gif and /dev/null differ
diff --git a/plugins/mobile/iui/pinstripes.png b/plugins/mobile/iui/pinstripes.png
deleted file mode 100644 (file)
index c997775..0000000
Binary files a/plugins/mobile/iui/pinstripes.png and /dev/null differ
diff --git a/plugins/mobile/iui/redButton.png b/plugins/mobile/iui/redButton.png
deleted file mode 100644 (file)
index 210f156..0000000
Binary files a/plugins/mobile/iui/redButton.png and /dev/null differ
diff --git a/plugins/mobile/iui/selection.png b/plugins/mobile/iui/selection.png
deleted file mode 100644 (file)
index 537e3f0..0000000
Binary files a/plugins/mobile/iui/selection.png and /dev/null differ
diff --git a/plugins/mobile/iui/thumb.png b/plugins/mobile/iui/thumb.png
deleted file mode 100644 (file)
index cefa8fc..0000000
Binary files a/plugins/mobile/iui/thumb.png and /dev/null differ
diff --git a/plugins/mobile/iui/toggle.png b/plugins/mobile/iui/toggle.png
deleted file mode 100644 (file)
index 3b62ebf..0000000
Binary files a/plugins/mobile/iui/toggle.png and /dev/null differ
diff --git a/plugins/mobile/iui/toggleOn.png b/plugins/mobile/iui/toggleOn.png
deleted file mode 100644 (file)
index b016814..0000000
Binary files a/plugins/mobile/iui/toggleOn.png and /dev/null differ
diff --git a/plugins/mobile/iui/toolButton.png b/plugins/mobile/iui/toolButton.png
deleted file mode 100644 (file)
index afe4d7a..0000000
Binary files a/plugins/mobile/iui/toolButton.png and /dev/null differ
diff --git a/plugins/mobile/iui/toolbar.png b/plugins/mobile/iui/toolbar.png
deleted file mode 100644 (file)
index 3dde94c..0000000
Binary files a/plugins/mobile/iui/toolbar.png and /dev/null differ
diff --git a/plugins/mobile/iui/whiteButton.png b/plugins/mobile/iui/whiteButton.png
deleted file mode 100644 (file)
index 5514b27..0000000
Binary files a/plugins/mobile/iui/whiteButton.png and /dev/null differ
diff --git a/plugins/mobile/login_form.php b/plugins/mobile/login_form.php
deleted file mode 100644 (file)
index be44ef1..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<title>Tiny Tiny RSS</title>
-<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>
-<link rel="apple-touch-icon" href="iui/iui-logo-touch-icon.png" />
-<meta name="apple-touch-fullscreen" content="YES" />
-<style type="text/css" media="screen">@import "iui/iui.css";</style>
-<script type="application/x-javascript" src="iui/iui.js"></script>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-</head>
-
-
-<script type="text/javascript">
-function do_login() {
-       var f = document.forms['login'];
-       f.submit();
-}
-</script>
-
-<body>
-
-    <div class="toolbar">
-        <h1 id="pageTitle"></h1>
-                 <a id="backButton" class="button" href="#"></a>
-        <a class="button blueButton" onclick='do_login()'><?php echo __('Log in') ?></a>
-    </div>
-
-       <form target="_self" title="Login" id="login" class="panel" name="login" selected="true"
-               action="../../public.php?return=<?php echo htmlspecialchars($_SERVER["REQUEST_URI"]) ?>"
-               method="post">
-
-       <input type="hidden" name="op" value="login">
-
-       <fieldset>
-
-               <div class="row">
-                       <label><?php echo __("Login:") ?></label>
-                       <input type="text" autocapitalize="off" name="login">
-               </div>
-
-               <div class="row">
-               <label><?php echo __("Password:") ?></label>
-               <input type="password" name="password">
-               </div>
-
-               </fieldset>
-
-               <div align='center'><a target='_self' href='<?php echo get_self_url_prefix() ?>/index.php?mobile=false'>
-                       <?php echo __("Open regular version") ?></a>
-
-       </form>
-
-</body>
-</html>
-
diff --git a/plugins/mobile/logout.php b/plugins/mobile/logout.php
deleted file mode 100644 (file)
index afc411a..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-       $basedir = dirname(dirname(dirname(__FILE__)));
-
-       set_include_path(
-               dirname(__FILE__) . PATH_SEPARATOR .
-               $basedir . PATH_SEPARATOR .
-               "$basedir/include" . PATH_SEPARATOR .
-               get_include_path());
-
-       require_once "mobile-functions.php";
-
-       logout_user();
-
-       header("Location: index.php");
-?>
diff --git a/plugins/mobile/mobile-functions.php b/plugins/mobile/mobile-functions.php
deleted file mode 100644 (file)
index 1e65a3c..0000000
+++ /dev/null
@@ -1,542 +0,0 @@
-<?php
-       require_once "autoload.php";
-       require_once "functions.php";
-       require_once "sessions.php";
-       require_once "version.php";
-       require_once "db-prefs.php";
-
-       init_plugins();
-
-       define('TTRSS_SESSION_NAME', 'ttrss_m_sid');
-
-       /* TODO replace with interface to db-prefs */
-
-       function mobile_pref_toggled($id) {
-               if (get_pref("_MOBILE_$id"))
-                       return "true";
-               else
-                       return "";
-       }
-
-       function mobile_get_pref($id) {
-               //return $_SESSION["mobile-prefs"][$id];
-               return get_pref("_MOBILE_$id");
-       }
-
-       function mobile_set_pref($id, $value) {
-               //$_SESSION["mobile-prefs"][$id] = $value;
-               return set_pref("_MOBILE_$id", $value);
-       }
-
-       function mobile_feed_has_icon($id) {
-               return file_exists("../../".ICONS_DIR."/$id.ico");
-       }
-
-       function render_flat_feed_list($offset) {
-               $owner_uid = $_SESSION["uid"];
-               $limit = 0;
-
-               if (!$offset) $offset = 0;
-
-               if (mobile_get_pref("SORT_FEEDS_UNREAD")) {
-                       $order_by = "unread DESC, title";
-               } else {
-                       $order_by = "title";
-               }
-
-               if ($limit > 0) {
-                       $limit_qpart = "LIMIT $limit OFFSET $offset";
-               } else {
-                       $limit_qpart = "";
-               }
-
-               $result = db_query("SELECT id,
-                               title,
-                       (SELECT COUNT(id) FROM ttrss_entries,ttrss_user_entries
-                               WHERE feed_id = ttrss_feeds.id AND unread = true
-                                       AND ttrss_user_entries.ref_id = ttrss_entries.id
-                                       AND owner_uid = '$owner_uid') AS unread
-                       FROM ttrss_feeds
-                       WHERE
-                               ttrss_feeds.owner_uid = '$owner_uid'
-                       ORDER BY $order_by $limit_qpart");
-
-               if (!$offset) print '<ul id="home" title="'.__('Home').'" selected="true"
-                       myBackLabel="'.__('Logout').'" myBackHref="logout.php" myBackTarget="_self">';
-
-
-       //              print "<li><a href='#cat-actions'>".__('Actions...')."</a></li>";
-
-                       $num_feeds = 0;
-
-                       while ($line = db_fetch_assoc($result)) {
-                               $id = $line["id"];
-                               $unread = $line["unread"];
-
-       //                      $unread = rand(0, 100);
-
-                               if ($unread > 0) {
-                                       $line["title"] = $line["title"] . " ($unread)";
-                                       $class = '';
-                               } else {
-                                       $class = 'oldItem';
-                               }
-
-                               if (mobile_feed_has_icon($id)) {
-                                       $icon_url = "../../".ICONS_URL."/$id.ico";
-                               } else {
-                                       $icon_url = "../../images/blank_icon.gif";
-                               }
-
-                               if ($unread > 0 || !mobile_get_pref("HIDE_READ")) {
-                                       print "<li class='$class'><a href='feed.php?id=$id'>" .
-                                               "<img class='tinyIcon' src='$icon_url'/>".
-                                               $line["title"] . "</a></li>";
-                               }
-
-                               ++$num_feeds;
-                       }
-
-/*                     $next_offset = $offset + $num_feeds;
-
-                       print "<li><a href=\"home.php?skip=$next_offset\"
-       target=\"_replace\">Show more feeds...</a></li>"; */
-
-                       if (!$offset) print "</ul>";
-
-       }
-
-       function render_category($cat_id, $offset) {
-               $owner_uid = $_SESSION["uid"];
-
-               if ($cat_id >= 0) {
-
-                       if ($cat_id != 0) {
-                               $cat_query = "cat_id = '$cat_id'";
-                       } else {
-                               $cat_query = "cat_id IS NULL";
-                       }
-
-                       if (mobile_get_pref("SORT_FEEDS_UNREAD")) {
-                               $order_by = "unread DESC, title";
-                       } else {
-                               $order_by = "title";
-                       }
-
-                       $result = db_query("SELECT id,
-                               title,
-                       (SELECT COUNT(id) FROM ttrss_entries,ttrss_user_entries
-                               WHERE feed_id = ttrss_feeds.id AND unread = true
-                                       AND ttrss_user_entries.ref_id = ttrss_entries.id
-                                       AND owner_uid = '$owner_uid') as unread
-                       FROM ttrss_feeds
-                       WHERE
-                               ttrss_feeds.owner_uid = '$owner_uid' AND
-                               $cat_query
-                       ORDER BY $order_by");
-
-                       $title = getCategoryTitle($cat_id);
-
-                       print "<ul id='cat-$cat_id' title='$title' myBackLabel='".__("Home")."'
-                               myBackHref='home.php'>";
-
-       //              print "<li><a href='#cat-actions'>".__('Actions...')."</a></li>";
-
-                       while ($line = db_fetch_assoc($result)) {
-                               $id = $line["id"];
-                               $unread = $line["unread"];
-
-       //                      $unread = rand(0, 100);
-
-                               if ($unread > 0) {
-                                       $line["title"] = $line["title"] . " ($unread)";
-                                       $class = '';
-                               } else {
-                                       $class = 'oldItem';
-                               }
-
-                               if (mobile_feed_has_icon($id)) {
-                                       $icon_url = "../../".ICONS_URL."/$id.ico";
-                               } else {
-                                       $icon_url = "../../images/blank_icon.gif";
-                               }
-
-                               if ($unread > 0 || !mobile_get_pref("HIDE_READ")) {
-                                       print "<li class='$class'><a href='feed.php?id=$id&cat=$cat_id'>" .
-                                               "<img class='tinyIcon' src='$icon_url'/>".
-                                               $line["title"] . "</a></li>";
-                               }
-                       }
-
-                       print "</ul>";
-               } else if ($cat_id == -1) {
-
-                       $title = __('Special');
-
-                       print "<ul id='cat--1' title='$title' myBackLabel='".__("Home")."'
-                               myBackHref='home.php'>";
-
-                       foreach (array(-4, -3, -1, -2, 0) as $id) {
-                               $title = getFeedTitle($id);
-                               $unread = getFeedUnread($id, false);
-                               $icon = getFeedIcon($id);
-
-                               if ($unread > 0) {
-                                       $title = $title . " ($unread)";
-                                       $class = '';
-                               } else {
-                                       $class = 'oldItem';
-                               }
-
-                               if ($unread > 0 || !mobile_get_pref("HIDE_READ")) {
-                                       print "<li class='$class'>
-                                               <a href='feed.php?id=$id&cat=-1'>
-                                               <img class='tinyIcon' src='../$icon'/>$title</a></li>";
-                               }
-                       }
-
-                       print "</ul>";
-               } else if ($cat_id == -2) {
-
-                       $title = __('Labels');
-
-                       print "<ul id='cat--2' title='$title' myBackLabel='".__("Home")."'
-                               myBackHref='home.php'>";
-
-                       $result = db_query("SELECT id, caption FROM ttrss_labels2
-                               WHERE owner_uid = '$owner_uid'");
-
-                       $label_data = array();
-
-                       while ($line = db_fetch_assoc($result)) {
-
-                               $id = label_to_feed_id($line["id"]);
-
-                               $unread = getFeedUnread($id);
-                               $title = $line["caption"];
-
-                               if ($unread > 0) {
-                                       $title = $title . " ($unread)";
-                                       $class = '';
-                               } else {
-                                       $class = 'oldItem';
-                               }
-
-                               if ($unread > 0 || !mobile_get_pref("HIDE_READ")) {
-                                       print "<li class='$class'>
-                                               <a href='feed.php?id=$id&cat=-2'>$title</a></li>";
-                               }
-                       }
-                       print "</ul>";
-               }
-       }
-
-       function render_categories_list($link) {
-               $owner_uid = $_SESSION["uid"];
-
-               $cat_browse = mobile_get_pref("BROWSE_CATS");
-
-               print '<ul id="home" title="'.__('Home').'" selected="true"
-                       myBackLabel="'.__('Logout').'" myBackHref="logout.php" myBackTarget="_self">';
-
-//             print "<li><a href='#searchForm'>Search...</a></li>";
-
-               foreach (array(-1, -2) as $id) {
-                       $title = getCategoryTitle($id);
-                       $unread = getFeedUnread($id, true);
-                       if ($unread > 0) {
-                               $title = $title . " ($unread)";
-                               $class = '';
-                       } else {
-                               $class = 'oldItem';
-                       }
-
-                       if ($cat_browse)
-                               print "<li class='$class'><a href='cat.php?id=$id'>$title</a></li>";
-                       else
-                               print "<li class='$class'><a href='feed.php?id=$id&is_cat=true'>$title</a></li>";
-               }
-
-               $result = db_query("SELECT
-                               ttrss_feed_categories.id,
-                               ttrss_feed_categories.title,
-                               COUNT(ttrss_feeds.id) AS num_feeds
-                       FROM ttrss_feed_categories, ttrss_feeds
-                       WHERE ttrss_feed_categories.owner_uid = $owner_uid
-                               AND ttrss_feed_categories.id = cat_id
-                               GROUP BY ttrss_feed_categories.id,
-                                       ttrss_feed_categories.title
-                               ORDER BY ttrss_feed_categories.title");
-
-               while ($line = db_fetch_assoc($result)) {
-
-                       if ($line["num_feeds"] > 0) {
-
-                               $unread = getFeedUnread($line["id"], true);
-                               $id = $line["id"];
-
-                               if ($unread > 0) {
-                                       $line["title"] = $line["title"] . " ($unread)";
-                                       $class = '';
-                               } else {
-                                       $class = 'oldItem';
-                               }
-
-                               if ($unread > 0 || !mobile_get_pref("HIDE_READ")) {
-
-                                       if ($cat_browse)
-                                               print "<li class='$class'><a href='cat.php?id=$id'>" .
-                                                       $line["title"] . "</a></li>";
-                                       else
-                                               print "<li class='$class'><a href='feed.php?id=$id&is_cat=true'>".
-                                                       $line["title"] . "</a></li>";
-                               }
-                       }
-               }
-
-
-               $result = db_query("SELECT COUNT(*) AS nf FROM ttrss_feeds WHERE
-                       cat_id IS NULL and owner_uid = '$owner_uid'");
-
-               $num_feeds = db_fetch_result($result, 0, "nf");
-
-               if ($num_feeds > 0) {
-                       $unread = getFeedUnread(0, true);
-                       $title = "Uncategorized";
-
-                       if ($unread > 0) {
-                               $title = "$title ($unread)";
-                               $class = '';
-                       } else {
-                               $class = 'oldItem';
-                       }
-
-                       if ($unread > 0 || !mobile_get_pref("HIDE_READ")) {
-                               if ($cat_browse)
-                                       print "<li class='$class'><a href='cat.php?id=0'>$title</a></li>";
-                               else
-                                       print "<li class='$class'><a href='feed.php?id=0&is_cat=true'>$title</a></li>";
-
-                       }
-               }
-
-               print "</ul>";
-       }
-
-       function render_headlines_list($feed_id, $cat_id, $offset, $search,
-               $is_cat = false) {
-
-               $feed_id = $feed_id;
-               $limit = 15;
-               $filter = '';
-
-               if (!mobile_get_pref("HIDE_READ"))
-                       $view_mode = "all_articles";
-               else
-                       $view_mode = 'adaptive';
-
-               if ($search) {
-                       $search_mode = 'this_feed';
-               } else {
-                       $search_mode = '';
-               }
-
-               $qfh_ret = queryFeedHeadlines($feed_id, $limit,
-                       $view_mode, $is_cat, $search, $search_mode,
-                       "score DESC, date_entered ".(mobile_get_pref('REVERSE_HEADLINES') ? 'ASC' : 'DESC'), $offset);
-
-               $result = $qfh_ret[0];
-               $feed_title = $qfh_ret[1];
-
-               if (!$offset) {
-
-                       print "<form id=\"searchForm-$feed_id-$cat_id\" class=\"dialog\" method=\"POST\"
-                               action=\"feed.php\">
-
-                               <input type=\"hidden\" name=\"id\" value=\"$feed_id\">
-                               <input type=\"hidden\" name=\"cat\" value=\"$cat_id\">
-
-               <fieldset>
-                         <h1>Search</h1>
-                   <a class=\"button leftButton\" type=\"cancel\">Cancel</a>
-                   <a class=\"button blueButton\" type=\"submit\">Search</a>
-
-                   <label>Search:</label>
-                                       <input id=\"search\" type=\"text\" name=\"search\"/>
-               </fieldset>
-                         </form>";
-
-                       if ($cat_id) {
-                               $cat_title = getCategoryTitle($cat_id);
-
-                               print "<ul id=\"feed-$feed_id\" title=\"$feed_title\" selected=\"true\"
-                                       myBackLabel='$cat_title' myBackHref='cat.php?id=$cat_id'>";
-                       } else {
-                               print "<ul id=\"feed-$feed_id\" title=\"$feed_title\" selected=\"true\"
-                                       myBackLabel='".__("Home")."' myBackHref='home.php'>";
-                       }
-
-                       print "<li><a href='#searchForm-$feed_id-$cat_id'>Search...</a></li>";
-               }
-
-               $num_headlines = 0;
-
-               while ($line = db_fetch_assoc($result)) {
-                       $id = $line["id"];
-                       $real_feed_id = $line["feed_id"];
-
-                       if (sql_bool_to_bool($line["unread"])) {
-                               $class = '';
-                       } else {
-                               $class = 'oldItem';
-                       }
-
-                       if (mobile_feed_has_icon($real_feed_id)) {
-                               $icon_url = "../../".ICONS_URL."/$real_feed_id.ico";
-                       } else {
-                               $icon_url = "../../images/blank_icon.gif";
-                       }
-
-                       print "<li class='$class'><a href='article.php?id=$id&feed=$feed_id&cat=$cat_id&is_cat=$is_cat'>
-                               <img class='tinyIcon' src='$icon_url'>";
-                       print $line["title"];
-                       print "</a></li>";
-
-                       ++$num_headlines;
-
-               }
-
-               if ($num_headlines == 0 && $search) {
-                       $articles_url = "feed.php?id=$feed_id&cat=$cat_id&skip=$next_offset";
-
-                       print "<li><a href=\"$articles_url\">" . __("Nothing found (click to reload feed).") . "</a></li>";
-
-               }
-
-//             print "<a target='_replace' href='feed.php?id=$feed_id&cat=$cat_id&skip=0'>Next $limit articles...</a>";
-
-               $next_offset = $offset + $num_headlines;
-               $num_unread = getFeedUnread($feed_id, $is_cat);
-
-               /* FIXME needs normal implementation */
-
-               if ($num_headlines > 0 && ($num_unread == 0 || $num_unread > $next_offset)) {
-
-                       if ($is_cat) {
-                               $articles_url = "feed.php?id=$feed_id&skip=$next_offset".
-                                       "&search=$search&is_cat=true";
-                       } else {
-                               $articles_url = "feed.php?id=$feed_id&cat=$cat_id&skip=$next_offset".
-                                       "&search=$search";
-                       }
-
-                       print "<li><a href=\"$articles_url\"
-                               target=\"_replace\">Get more articles...</a></li>";
-               }
-
-               if (!$offset) print "</ul>";
-
-       }
-
-       function render_article($id, $feed_id, $cat_id, $is_cat) {
-
-               $query = "SELECT title,link,content,feed_id,comments,int_id,
-                       marked,unread,published,
-                       ".SUBSTRING_FOR_DATE."(updated,1,16) as updated,
-                       author
-                       FROM ttrss_entries,ttrss_user_entries
-                       WHERE   id = '$id' AND ref_id = id AND owner_uid = " .
-                               $_SESSION["uid"] ;
-
-               $result = db_query($query);
-
-               if (db_num_rows($result) != 0) {
-
-                       $line = db_fetch_assoc($result);
-
-                       $tmp_result = db_query("UPDATE ttrss_user_entries
-                               SET unread = false,last_read = NOW()
-                               WHERE ref_id = '$id'
-                               AND owner_uid = " . $_SESSION["uid"]);
-
-                       $updated_fmt = make_local_datetime($line['updated'], false);
-
-                       $title = $line["title"];
-                       $article_link = $line["link"];
-
-                       if (!$is_cat)
-                               $feed_title = getFeedTitle($feed_id);
-                       else
-                               $feed_title = getCategoryTitle($feed_id);
-
-                       print "<div class=\"panel\" id=\"article-$id\" title=\"$title\"
-                               selected=\"true\"
-                               myBackLabel='$feed_title' myBackHref='feed.php?id=$feed_id&cat=$cat_id&is_cat=$is_cat'>";
-
-                       if ($line['feed_id'] != $feed_id) {
-                               $real_feed_title = getFeedTitle($line['feed_id']);
-                               $real_feed_id = $line['feed_id'];
-                               $feed_link = "(<a href=\"feed.php?id=$real_feed_id\">$real_feed_title</a>)";
-                       }
-//                     print "<fieldset>";
-
-                       print "<div style='float : right'>($updated_fmt)</div>";
-
-                       print "<h2><a target='_blank' href='$article_link'>$title</a> $feed_link</h2>";
-
-                       print "<hr>";
-
-/*                     print "<div class=\"row\">";
-                       print "<label id='title'><a target='_blank' href='$article_link'>$title</a></label>";
-                       print "</div>"; */
-
-                       $is_starred = (sql_bool_to_bool($line["marked"])) ? "true" : "false";
-                       $is_published = (sql_bool_to_bool($line["published"])) ? "true" : "false";
-
-                       //print "<div class=\"row\">";
-                       //print "<label id='updated'>Updated:</label>";
-                       //print "<input type='text' enabled='false' name='updated' disabled value='$updated_fmt'/>";
-                       //print "</div>";
-
-//                     print "</fieldset>";
-
-                       $content = sanitize($line["content"]);
-                       $content = preg_replace("/href=/i", "target=\"_blank\" href=", $content);
-
-                       if (!mobile_get_pref("SHOW_IMAGES")) {
-                               $content = preg_replace('/<img[^>]+>/is', '', $content);
-                       }
-
-                       print "<p>$content</p>";
-
-            print "<div class='nav'>
-                    <label>Navigation</label>
-                    <div class='button left' onclick='goPrev($id, $feed_id, this)'>Prev</div>
-                    <div class='button right' onclick='goNext($id, $feed_id, this)'>Next</div>
-                  </div>";
-
-                       print "<fieldset>";
-
-                       print "<div class=\"row\">
-                       <label>Starred</label>
-                       <div class=\"toggle\" onclick=\"toggleMarked($id, this)\" toggled=\"$is_starred\"><span class=\"thumb\"></span><span class=\"toggleOn\">ON</span><span class=\"toggleOff\">OFF</span></div>
-                   </div>";
-
-                       print "<div class=\"row\">
-                       <label>Published</label>
-                       <div class=\"toggle\" onclick=\"togglePublished($id, this)\" toggled=\"$is_published\"><span class=\"thumb\"></span><span class=\"toggleOn\">ON</span><span class=\"toggleOff\">OFF</span></div>
-                   </div>";
-
-                       print "<div class=\"row\">
-                       <label>Unread</label>
-                       <div class=\"toggle\" onclick=\"toggleUnread($id, this)\" toggled=\"$is_unread\"><span class=\"thumb\"></span><span class=\"toggleOn\">ON</span><span class=\"toggleOff\">OFF</span></div>
-                   </div>";
-
-
-                       print "</fieldset>";
-
-                       print "</div>";
-
-               }
-       }
-?>
diff --git a/plugins/mobile/mobile.css b/plugins/mobile/mobile.css
deleted file mode 100644 (file)
index 8068e3d..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-div.nav {
-    height: 40px;
-    -webkit-border-radius: 10px;
-    -moz-border-radius: 10px;
-    background-color: #ffffff;
-    border: 1px solid #999999;
-    text-align: center;
-    margin-bottom: 1em;
-}
-div.nav label {
-    line-height: 40px;
-    color: black;
-    font-weight: bold;
-}
-div.nav .button {
-    position: static;
-    margin: 5px 10px;
-    -webkit-border-image: url(../lib/iui/whiteButton.png) 0 12 0 12;
-    text-shadow: rgba(255, 255, 255, 0.7) 0 1px 0;
-    color: black;
-    cursor: pointer; /* On a touch screen ? */
-}
-div.nav .button.left {
-    float: left;
-}
-div.nav .button.right {
-    float: right;
-}
-
-ul li a.read {
-    color: #666666;
-}
-
-ul li span.browse {
-       color : #909090;
-       text-align : right;
-       float : right;
-}
diff --git a/plugins/mobile/mobile.js b/plugins/mobile/mobile.js
deleted file mode 100644 (file)
index 3fed3a1..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-var backend = "backend.php";
-
-function toggleMarked(id, elem) {
-
-       var toggled = false;
-
-       if (elem.getAttribute("toggled") == "true") {
-               toggled = 1;
-       } else {
-               toggled = 0;
-       }
-
-       var query = "op=toggleMarked&id=" + id + "&mark=" + toggled;
-
-       new Ajax.Request(backend, {
-               parameters: query,
-               onComplete: function (transport) {
-                       //
-               } });
-}
-
-function togglePublished(id, elem) {
-
-       var toggled = false;
-
-       if (elem.getAttribute("toggled") == "true") {
-               toggled = 1;
-       } else {
-               toggled = 0;
-       }
-
-       var query = "op=togglePublished&id=" + id + "&pub=" + toggled;
-
-       new Ajax.Request(backend, {
-               parameters: query,
-               onComplete: function (transport) {
-                       //
-               } });
-
-}
-
-function toggleUnread(id, elem) {
-
-       var toggled = false;
-
-       if (elem.getAttribute("toggled") == "true") {
-               toggled = 1;
-       } else {
-               toggled = 0;
-       }
-
-       var query = "op=toggleUnread&id=" + id + "&unread=" + toggled;
-
-       new Ajax.Request(backend, {
-               parameters: query,
-               onComplete: function (transport) {
-                       //
-               } });
-
-}
-
-function setPref(elem) {
-       var toggled = false;
-       var id = elem.id;
-
-       if (elem.getAttribute("toggled") == "true") {
-               toggled = 1;
-       } else {
-               toggled = 0;
-       }
-
-       var query = "op=setPref&id=" + id + "&to=" + toggled;
-
-       new Ajax.Request(backend, {
-               parameters: query,
-               onComplete: function (transport) {
-                       //
-               } });
-
-}
-
-// Go directly to another item in the same feed
-function goToSibling(article_id, feed_id, link, step) {
-    var links = linksInFeed(feed_id);
-    for (var i=0 ; i<links.length ; i++) {
-        var re = new RegExp(".*article\\.php\\?id="+article_id+"&.*");
-        if (!re.test(links[i].href)) continue;
-        // here, we've found the current article
-        var index = i + step;
-        if (index < 0) {
-            markAsRead(feed_id);
-            iui.showPage($("feed-"+feed_id), true);
-            return false;
-        }
-        if (index >= links.length) {
-            showRestOfFeed(feed_id);
-            return false;
-        }
-        console.log(links[index]);
-        var match = links[index].href.match(/.*article\.php\?(.*)/);
-        var qs = match[1];
-        var backwards = false;
-        if (step < 0) backwards = true;
-        link.setAttribute("selected", "progress");
-        function unselect() { link.removeAttribute("selected"); }
-        iui.showPageByHref("article.php?"+qs, null, null, null, unselect, backwards);
-        return false;
-    }
-    return false;
-}
-function goPrev(article_id, feed_id, link) {
-    return goToSibling(article_id, feed_id, link, -1);
-}
-function goNext(article_id, feed_id, link) {
-    return goToSibling(article_id, feed_id, link, 1);
-}
-
-// Get all the links in the feed. The all_links variable includes the "get more article" link
-function linksInFeed(feed_id, all_links) {
-    var feed_content = $("feed-"+feed_id);
-    var links_raw = feed_content.getElementsByTagName("a");
-    if (all_links) return links_raw;
-    var links = [];
-    // filter the array to remove the "get more articles" link
-    // and the "search" link (which is always first)
-    for (var i=1 ; i<links_raw.length ; i++) {
-        if (links_raw[i].href.match(/.*article\.php\?id=.*/)) {
-            links.push(links_raw[i]);
-        }
-    }
-    return links;
-}
-
-// Adds the "read" class to all read links in the feed
-function markAsRead(feed_id) {
-    var links = linksInFeed(feed_id);
-    for (var j=0 ; j<links.length ; j++) {
-        var match = links[j].href.match(/.*article\.php\?id=(\d+)&.*/);
-        if ($("article-"+match[1])) {
-            links[j].className = "read";
-        }
-    }
-}
-
-// Go the the articles list and expand the "get more articles" link
-function showRestOfFeed(feed_id) {
-    var links_raw = linksInFeed(feed_id, true);
-    var lastlink = links_raw[links_raw.length - 1];
-    if (lastlink.target == "_replace") {
-        // It's a "get more articles" link
-        iui.showPage($("feed-"+feed_id), true);
-        // Mark old items a "read"
-        markAsRead(feed_id);
-        // Simulate click on the "get more articles" link
-        lastlink.setAttribute("selected", "progress");
-        function unselect() { lastlink.removeAttribute("selected"); }
-        setTimeout(window.scrollTo, 0, 0, 1000);
-        iui.showPageByHref(lastlink.href, null, null, lastlink, unselect);
-    } else {
-        iui.showPage($("home"), true);
-    }
-}
-
diff --git a/plugins/mobile/prefs.php b/plugins/mobile/prefs.php
deleted file mode 100644 (file)
index 9c63035..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-       error_reporting(E_ERROR | E_WARNING | E_PARSE);
-
-       header('Content-Type: text/html; charset=utf-8');
-
-       define('MOBILE_VERSION', true);
-
-       $basedir = dirname(dirname(dirname(__FILE__)));
-
-       set_include_path(
-               dirname(__FILE__) . PATH_SEPARATOR .
-               $basedir . PATH_SEPARATOR .
-               "$basedir/include" . PATH_SEPARATOR .
-               get_include_path());
-
-       $basedir = dirname(dirname(__FILE__));
-
-       require_once "config.php";
-       require_once "mobile-functions.php";
-
-       login_sequence(true);
-?>
-
-<div class="panel" id="prefs" selected="yes" title="Preferences"
-       myBackLabel="<?php echo __('Home') ?>" myBackHref="home.php">
-
-<fieldset>
-
-<div class="row">
-       <label><?php echo __('Enable categories') ?></label>
-       <div class="toggle" id="ENABLE_CATS" onclick="setPref(this)" toggled="<?php echo mobile_pref_toggled("ENABLE_CATS") ?>"><span class="thumb"></span><span class="toggleOn"><?php echo __('ON') ?></span><span class="toggleOff"><?php echo __('OFF') ?></span></div>
-</div>
-
-<div class="row">
-       <label><?php echo __('Browse categories like folders') ?></label>
-       <div class="toggle" id="BROWSE_CATS" onclick="setPref(this)" toggled="<?php echo mobile_pref_toggled("BROWSE_CATS") ?>"><span class="thumb"></span><span class="toggleOn"><?php echo __('ON') ?></span><span class="toggleOff"><?php echo __('OFF') ?></span></div>
-</div>
-
-
-<div class="row">
-       <label><?php echo __('Show images in posts') ?></label>
-       <div class="toggle" id="SHOW_IMAGES" onclick="setPref(this)" toggled="<?php echo mobile_pref_toggled("SHOW_IMAGES") ?>"><span class="thumb"></span><span class="toggleOn"><?php echo __('ON') ?></span><span class="toggleOff"><?php echo __('OFF') ?></span></div>
-</div>
-
-<div class="row">
-       <label><?php echo __('Hide read articles and feeds') ?></label>
-       <div class="toggle" id="HIDE_READ" onclick="setPref(this)" toggled="<?php echo mobile_pref_toggled("HIDE_READ") ?>"><span class="thumb"></span><span class="toggleOn"><?php echo __('ON') ?></span><span class="toggleOff"><?php echo __('OFF') ?></span></div>
-</div>
-
-<div class="row">
-       <label><?php echo __('Sort feeds by unread count') ?></label>
-       <div class="toggle" id="SORT_FEEDS_UNREAD" onclick="setPref(this)" toggled="<?php echo mobile_pref_toggled("SORT_FEEDS_UNREAD") ?>"><span class="thumb"></span><span class="toggleOn"><?php echo __('ON') ?></span><span class="toggleOff"><?php echo __('OFF') ?></span></div>
-</div>
-
-<div class="row">
-       <label><?php echo __('Reverse headline order (oldest first)') ?></label>
-       <div class="toggle" id="REVERSE_HEADLINES" onclick="setPref(this)" toggled="<?php echo mobile_pref_toggled("REVERSE_HEADLINES") ?>"><span class="thumb"></span><span class="toggleOn"><?php echo __('ON') ?></span><span class="toggleOff"><?php echo __('OFF') ?></span></div>
-</div>
-
-</fieldset>
index 9bf610a53ad1daa9508827184278c05fb3528b66..b617d94bc917e754b771d7f374c012ed921a9fe0 100644 (file)
--- a/prefs.php
+++ b/prefs.php
 <head>
        <title>Tiny Tiny RSS : <?php echo __("Preferences") ?></title>
 
-       <?php echo stylesheet_tag("lib/dijit/themes/claro/claro.css"); ?>
-       <?php echo stylesheet_tag("tt-rss.css"); ?>
-       <?php echo stylesheet_tag("prefs.css"); ?>
+       <?php stylesheet_tag("lib/dijit/themes/claro/claro.css"); ?>
+       <?php stylesheet_tag("tt-rss.css"); ?>
+       <?php stylesheet_tag("prefs.css"); ?>
 
        <?php if ($_SESSION["uid"]) {
                $theme = get_pref( "USER_CSS_THEME", $_SESSION["uid"], false);
                if ($theme) {
-                       echo stylesheet_tag("themes/$theme");
+                       stylesheet_tag("themes/$theme");
                }
        }
        ?>
@@ -58,7 +58,7 @@
                                "lib/dojo/tt-rss-layer.js",
                                "errors.php?mode=js") as $jsfile) {
 
-               echo javascript_tag($jsfile);
+               javascript_tag($jsfile);
 
        } ?>
 
index 454e2ffd165bda274dc8f9ea34a899342da13b73..825d288ee77873232a28ab9ce63c05156111d57d 100644 (file)
@@ -3,8 +3,8 @@ body#ttrssMain, body#ttrssPrefs, body#ttrssLogin, body {
        color : black;
        margin : 0px;
        padding : 0px;
-       font-family : sans-serif;
-       font-size : 12px;
+       font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+       font-size: 14px;
 }
 
 body#ttrssPrefs {
@@ -75,9 +75,12 @@ div.postReply img.tagsPic {
 div.articleNote {
        background-color : #fff7d5;
        padding : 5px;
-       border-style : none none dashed none;
+       border-radius : 4px;
+       margin : 5px;
+       border-style : solid;
        border-color : #e7d796;
        border-width : 1px;
+       box-shadow : 0px 0px 2px rgba(0,0,0,0.1);
        background-color : #fff7d5;
        color : #9a8c59;
 }
@@ -113,8 +116,9 @@ h3 {
 
 hr {
        border-width : 0px 0px 1px 0px;
-       border-style : dashed;
-       border-color : #e0e0e0;
+       border-style : solid;
+       border-color : #c0c0c0;
+       max-width : 90%;
 }
 
 a {
@@ -139,9 +143,11 @@ a:hover {
        position : absolute;    
        font-size : 12px;
        z-index : 99;
+       max-width : 200px;
+       min-width : 100px;
        padding : 5px;
-       min-width : 200px;
-       box-shadow : 0px 0px 2px #ccc;
+       -width : 200px;
+       box-shadow : 0px 0px 2px rgba(0,0,0,0.2);
 }
 
 #notify img {
@@ -183,25 +189,29 @@ a:hover {
        border-color : #ff0000;
 }
 
-.hl.Unread div.hlTitle {
+.hl div.hlTitle a {
        font-weight : bold;
+       color : gray;
 }
 
-.hl.even.Grayed {
-       background : #f0f0f0;
-       color : #909090;
-       border-width : 0px 0px 1px 0px;
-       border-style : solid;
-       border-color : #c0c0c0;
-       border-collapse : collapse;
+.hl.Unread div.hlTitle a {
+       color : black;
+}
+
+.hl.active div.hlTitle a {
+       color : #4684ff;
 }
 
-.hl.odd.Grayed {
+.hl.Grayed {
        color : #909090;
 }
 
+#headlines-frame div.hl:nth-child(even) {
+       background : #f0f0f0;
+}
+
 .hl {
-       border-width : 0px 1px 1px 0px;
+       border-width : 0px 0px 1px 0px;
        border-style : solid;
        border-color : #c0c0c0;
 }
@@ -210,15 +220,6 @@ a:hover {
        background : #ecf4ff ! important;
 }
 
-.hl.even {
-       background : #f0f0f0;
-       border-collapse : collapse;
-}
-
-.hl.odd {
-       background : white;
-}
-
 div.filterTestHolder {
        height : 300px;
        overflow : auto;
@@ -266,7 +267,11 @@ div.notice, div.warning, div.error {
        display : inline-block;
        margin : 2px 0px 4px 0px;
        font-size : 12px;
-       box-shadow : 0px 0px 2px #ccc;
+       border-style : solid;
+       border-color : #ccc;
+       border-radius : 4px;
+       border-width : 1px;
+       box-shadow : 0px 0px 2px rgba(0,0,0,0.1);
 }
 
 div.notice div.inner, div.warning div.inner, div.error div.inner {
@@ -275,14 +280,17 @@ div.notice div.inner, div.warning div.inner, div.error div.inner {
 
 div.notice {
        background : #ecf4ff;
+       border-color : #88b0f0;
 }
 
 div.warning {
        background : #fff7d5;
+       border-color : #e7d796;;
 }
 
 div.error {
        background : #ffcccc;
+       border-color : #ff0000;
 }
 
 div.warning img, div.notice img, div.error img {
@@ -325,9 +333,9 @@ span.feed_error {
 
 div#headlines-toolbar {
        border-width : 0px 0px 1px 0px;
-       background-color : #f0f0f0;
+       background-color : #fcfcfc;
        border-color : #c0c0c0;
-       font-size : 11px;
+       font-size : 12px;
        font-family : "Segoe UI", Tahoma, sans-serif;
        color : gray;
        padding : 0px;
@@ -377,9 +385,12 @@ span.hlLabelRef {
        font-size : 8px;
        color : #063064;
        font-weight : normal;
-       margin : 0px 3px 0px 3px;
-       padding : 0px 4px 0px 4px;
+       margin-left : 2px;
+       padding : 1px 4px 1px 4px;
+       display : inline-block;
+       vertical-align : middle;
        white-space: nowrap;
+       border-radius : 4px;
 }
 
 div.postHeader div.postDate {
@@ -406,15 +417,21 @@ div.postHeader div {
        display : none;
 }
 
-div.hlFeed, div.hlFeed a {
-       font-size : 10px;
-       color : gray;
+a.hlFeed {
+       display : block;
+       white-space : nowrap;
+       font-size : 9px;
        font-style : italic;
        font-weight : normal;
-       white-space: nowrap;
+       border-radius : 4px;
+       display : inline-block;
+       padding : 1px 2px 1px 2px;
+       margin-bottom : 2px;
+       margin-top : 2px;
+       color : gray;
 }
 
-div.hlFeed a:hover {
+a.hlFeed:hover {
        color : #4684ff;
 }
 
@@ -724,7 +741,6 @@ span.hlUpdated {
        vertical-align : middle;
        text-align : right;
        font-size : 10px;
-       font-weight : normal;
 }
 
 div.hlLeft {
@@ -772,7 +788,7 @@ div.fatalError textarea {
 
 #content-wrap {
        padding : 0px;
-       border-width : 0px 0px 1px 1px;
+       border-width : 0px 0px 0px 1px;
        border-style : solid;
        border-color : #c0c0c0;
        margin : 0px;
@@ -780,11 +796,11 @@ div.fatalError textarea {
 
 #feeds-holder {
        padding : 0px;
-       border-color : #88b0f0;
+       border-color : #c0c0c0;
        border-left-width : 0px;
        border-bottom-width : 0px;
        border-top-width : 0px;
-       overflow : auto;
+       overflow : hidden;
 }
 
 #headlines-wrap-inner {
@@ -793,17 +809,12 @@ div.fatalError textarea {
        border-width : 0px;
 }
 
-#feedTree {
-       overflow : visible;
-}
-
 #headlines-frame {
        padding : 0px;
-       border-color : #88b0f0;
-       border-left-width : 0px;
-       border-right-width : 0px;
+       border-color : #c0c0c0;
+       border-style : solid;
+       border-width : 0px;
        margin-top : 0px;
-       border-top-width : 0px;
 }
 
 #headlines-toolbar_splitter, #toolbar_splitter {
@@ -815,7 +826,7 @@ div.fatalError textarea {
        margin : 0px;
        border-width : 0px;
        white-space: nowrap;
-       font-size : 11px;
+       font-size : 12px;
 }
 
 #header {
@@ -839,10 +850,11 @@ div.fatalError textarea {
 
 #content-insert {
        padding : 0px;
-       border-color : #88b0f0;
+       border-color : #c0c0c0;
        border-bottom-width : 0px;
        border-right-width : 0px;
        border-left-width : 0px;
+       line-height: 20px;
        overflow : auto;
 }
 
@@ -966,6 +978,7 @@ ul.helpKbList h2 {
 
 .dijitTreeNode .loadingNode {
        margin-left : 3px;
+       height : 9px;
 }
 
 span.collapseBtn {
@@ -1027,10 +1040,51 @@ div.hl.active {
        border-color : #88b0f0;
 }
 
-div.hl.active a.title {
-       color : #4684ff;
-}
-
 #selected_prompt {
        margin-right : 25px;
 }
+
+#feedTree .dijitTreeRow {
+       padding : 2px 0px 2px;
+       border-width : 1px;
+       border-color : transparent;
+}
+
+#feedTree .dijitTreeNode {
+       padding : 0px;
+       border-width : 0px;
+}
+
+#feedTree { 
+       height : 100%;
+       overflow-x : hidden;
+       font-family : "Segoe UI", Tahoma, sans-serif;
+}
+
+#feedTree .counterNode {
+       font-weight : bold;
+       display : inline-block;
+       font-size : 9px;
+       text-align : center;
+       border : 1px solid #88b0f0;
+       color : white;
+       background : #88b0f0;
+       border-radius : 4px;
+       vertical-align : middle;
+       float : right;
+       margin-right : 5px;
+       position : relative;
+       top : 2px;
+       min-width : 23px;
+}
+
+#feedTree .dijitTreeRow {
+       max-width: 100%;
+       overflow: hidden;
+       text-overflow: ellipsis;
+}
+
+body#ttrssPrefs hr {
+       border-color : #ecf4ff;
+       max-width : 100%;
+}
index d4160c7ba1cc557367184ee0a959b52a6477e62d..f542a390bf833fbfcaed6f4d6a002acbb7ae44ba 100755 (executable)
        }
 
        if (isset($options["list-plugins"])) {
-               $tmppluginhost = new PluginHost(Db::get());
+               $tmppluginhost = new PluginHost();
                $tmppluginhost->load_all($tmppluginhost::KIND_ALL);
                $enabled = array_map("trim", explode(",", PLUGINS));
 
index 50a54e154e0661e4eca5c67e858f7722b987be0a..5b68e88376930381a2230ae608203ea3881358de 100644 (file)
@@ -54,21 +54,32 @@ a:hover {
 div.notice, div.warning, div.error {
        padding : 4px 10px 4px 4px;
        display : inline-block;
-       margin : 2px 0px 2px 0px;
+       margin : 2px 0px 4px 0px;
        font-size : 12px;
-       box-shadow : 0px 0px 2px #ccc;
+       border-style : solid;
+       border-color : #ccc;
+       border-radius : 4px;
+       border-width : 1px;
+       box-shadow : 0px 0px 2px rgba(0,0,0,0.1);
+}
+
+div.notice div.inner, div.warning div.inner, div.error div.inner {
+       vertical-align : middle;
 }
 
 div.notice {
        background : #ecf4ff;
+       border-color : #88b0f0;
 }
 
 div.warning {
+       border-color : #EFDC88;
        background : #fff7d5;
 }
 
 div.error {
        background : #ffcccc;
+       border-color : #ff0000;
 }
 
 div.warning img, div.notice img, div.error img {
@@ -79,6 +90,7 @@ div.warning img, div.notice img, div.error img {
 div.warning span, div.notice span, div.error span {
        display : table-cell;
        vertical-align : middle;
+
 }
 
 h1 {