From 70ca03f33615f0d6504df91cd40fa04a228fa42f Mon Sep 17 00:00:00 2001 From: Craig Andrews Date: Fri, 21 Aug 2009 12:47:01 -0400 Subject: Use currying to call the url callbacks, and use preg_replace_callback This definitely looks neater than the string maniplation it replaces --- lib/util.php | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/lib/util.php b/lib/util.php index 748c8332f..f732d8b55 100644 --- a/lib/util.php +++ b/lib/util.php @@ -445,24 +445,32 @@ function common_replace_urls_callback($text, $callback, $notice_id = null) { '(?:[:/][^\s]*)?'. ')'. '#ix'; - preg_match_all($regex, $text, $matches); - // Then clean up what the regex left behind - $offset = 0; - foreach($matches[1] as $url) { - // Call user specified func - if (empty($notice_id)) { - $modified_url = call_user_func($callback, $url); - } else { - $modified_url = call_user_func($callback, array($url, $notice_id)); - } - // Replace it! - $start = mb_strpos($text, $url, $offset); - $text = mb_substr($text, 0, $start).$modified_url.mb_substr($text, $start + mb_strlen($url), mb_strlen($text)); - $offset = $start + mb_strlen($modified_url); + $callback_helper = curry(callback_helper, 3); + return preg_replace_callback($regex, $callback_helper($callback,$notice_id) ,$text); +} + +function callback_helper($callback, $notice_id, $matches) { + if(empty($notice_id)){ + return $callback($matches[1],$notice_id); + }else{ + return $callback($matches[1]); } +} - return $text; +function curry($func, $arity) { + return create_function('', " + \$args = func_get_args(); + if(count(\$args) >= $arity) + return call_user_func_array('$func', \$args); + \$args = var_export(\$args, 1); + return create_function('',' + \$a = func_get_args(); + \$z = ' . \$args . '; + \$a = array_merge(\$z,\$a); + return call_user_func_array(\'$func\', \$a); + '); + "); } function common_linkify($url) { -- cgit v1.2.3-54-g00ecf From 041d2d82d3db92368913466869688cb5fa2554c8 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Fri, 21 Aug 2009 15:29:28 -0400 Subject: We don't need to re-distribute jquery-autocomplete demo --- .../Autocomplete/jquery-autocomplete/demo/bg.gif | Bin 1175 -> 0 bytes .../jquery-autocomplete/demo/emails.php | 23 - .../jquery-autocomplete/demo/emails.phps | 23 - .../jquery-autocomplete/demo/images.php | 9 - .../demo/images/Amsterdam Van-Gogh Museum.jpg | Bin 4884 -> 0 bytes .../jquery-autocomplete/demo/images/Amsterdam.jpg | Bin 5853 -> 0 bytes .../demo/images/Antwerpen Rubenshaus.jpg | Bin 6069 -> 0 bytes .../jquery-autocomplete/demo/images/Antwerpen.jpg | Bin 3454 -> 0 bytes .../jquery-autocomplete/demo/images/Appenzell.jpg | Bin 6028 -> 0 bytes .../demo/images/Arnhem Historisches Museum.jpg | Bin 4207 -> 0 bytes .../jquery-autocomplete/demo/images/Bled.jpg | Bin 3014 -> 0 bytes .../demo/images/Bled_Die Burg von Bled.jpg | Bin 6723 -> 0 bytes .../demo/images/Bogojina_Die Pfarrkirche.jpg | Bin 6144 -> 0 bytes .../demo/images/BolognaBasilicadiSanPetronio.jpg | Bin 2988 -> 0 bytes .../demo/images/BolognaFontanadelNettuno.jpg | Bin 3657 -> 0 bytes .../demo/images/BolognaPiazzaMaggiore.jpg | Bin 5394 -> 0 bytes .../demo/images/Bolsward Martinikerk.jpg | Bin 5524 -> 0 bytes .../demo/images/Bolsward Stadhuis.jpg | Bin 5220 -> 0 bytes .../jquery-autocomplete/demo/images/Bolsward.jpg | Bin 4887 -> 0 bytes .../jquery-autocomplete/demo/images/BordeauxND.jpg | Bin 6149 -> 0 bytes .../demo/images/BordeauxPlaceB.jpg | Bin 4867 -> 0 bytes .../demo/images/BotanischerGartenZuerich.jpg | Bin 4294 -> 0 bytes .../jquery-autocomplete/demo/images/Bouillon.jpg | Bin 6465 -> 0 bytes .../demo/images/Gent Hotel de Ville2.jpg | Bin 6495 -> 0 bytes .../jquery-autocomplete/demo/images/Gent.jpg | Bin 3318 -> 0 bytes .../demo/images/GenuaStrand.jpg | Bin 4926 -> 0 bytes .../demo/images/GenuabeiNacht.jpg | Bin 3844 -> 0 bytes .../demo/images/Giessbachfaelle Brienz.jpg | Bin 5435 -> 0 bytes .../jquery-autocomplete/demo/images/Giethoorn.jpg | Bin 3818 -> 0 bytes .../jquery-autocomplete/demo/images/Gnesen.jpg | Bin 5727 -> 0 bytes .../demo/images/Gornij Grad_KATHEDRALE.jpg | Bin 4697 -> 0 bytes .../jquery-autocomplete/demo/images/Gossensass.jpg | Bin 5777 -> 0 bytes .../demo/images/Grad_Burg Grad2.jpg | Bin 6766 -> 0 bytes .../demo/images/GrandDixence.jpg | Bin 6773 -> 0 bytes .../demo/images/GrenoblePanorama.jpg | Bin 5867 -> 0 bytes .../jquery-autocomplete/demo/images/Groningen.jpg | Bin 5378 -> 0 bytes .../demo/images/GrottenvonReclere.jpg | Bin 5638 -> 0 bytes .../jquery-autocomplete/demo/images/Guebwiller.jpg | Bin 5458 -> 0 bytes .../images/Kamnik_Die Franziskaner Bibliothek.jpg | Bin 6284 -> 0 bytes .../demo/images/Karlsbad Muehlbrunnkolonnade.jpg | Bin 5392 -> 0 bytes .../jquery-autocomplete/demo/images/Kazimierz.jpg | Bin 6259 -> 0 bytes .../demo/images/KirchbergAltesRathaus1.jpg | Bin 4295 -> 0 bytes .../demo/images/KlagenfurtDom.jpg | Bin 6189 -> 0 bytes .../demo/images/KleineMeerjungfreu.jpg | Bin 2788 -> 0 bytes .../demo/images/LazienkiparkWarschau.jpg | Bin 4226 -> 0 bytes .../demo/images/LeHavreHafen.jpg | Bin 5857 -> 0 bytes .../jquery-autocomplete/demo/images/LeMans.jpg | Bin 6556 -> 0 bytes .../jquery-autocomplete/demo/images/Lednice.jpg | Bin 5389 -> 0 bytes .../demo/images/Leeuwarden Fries Museum.jpg | Bin 6753 -> 0 bytes .../jquery-autocomplete/demo/images/Leeuwarden.jpg | Bin 4035 -> 0 bytes .../jquery-autocomplete/demo/images/Lelystad.jpg | Bin 2368 -> 0 bytes .../jquery-autocomplete/demo/images/Lemmer.jpg | Bin 4620 -> 0 bytes .../demo/images/Leper Halles aux draps.jpg | Bin 4979 -> 0 bytes .../images/Leuven Museum fuer Kirchenkunst.jpg | Bin 6414 -> 0 bytes .../jquery-autocomplete/demo/images/Leuven.jpg | Bin 6907 -> 0 bytes .../jquery-autocomplete/demo/images/Luxemburg.jpg | Bin 5830 -> 0 bytes .../demo/images/LuzernAltstadt.jpg | Bin 6673 -> 0 bytes .../demo/images/LuzernPicassoMuseum.jpg | Bin 4493 -> 0 bytes .../jquery-autocomplete/demo/images/Lyon.jpg | Bin 6609 -> 0 bytes .../demo/images/Maastricht Onze Lieve Vrou...jpg | Bin 3799 -> 0 bytes .../demo/images/Maastricht St Servaasbasiliek.jpg | Bin 5721 -> 0 bytes .../demo/images/Maastricht Walmuur.jpg | Bin 4080 -> 0 bytes .../jquery-autocomplete/demo/images/Maastricht.jpg | Bin 4890 -> 0 bytes .../demo/images/MagiatalMaggia.jpg | Bin 5064 -> 0 bytes .../jquery-autocomplete/demo/images/Mailand3.jpg | Bin 5513 -> 0 bytes .../demo/images/Metlika_Bela Krajina Museum.jpg | Bin 6352 -> 0 bytes .../demo/images/MilanoCastelloSforzesco.jpg | Bin 4143 -> 0 bytes .../jquery-autocomplete/demo/images/MilanoDom.jpg | Bin 5533 -> 0 bytes .../demo/images/MilazzoBurg.jpg | Bin 3506 -> 0 bytes .../demo/images/Novo Mesto_Das Museum.jpg | Bin 5441 -> 0 bytes .../demo/images/ObervellachBurgFalkenstein.jpg | Bin 5777 -> 0 bytes .../demo/images/OdenseeAndersen.jpg | Bin 4513 -> 0 bytes .../Olimje_Kirche und Apotheke in Olimje.jpg | Bin 7792 -> 0 bytes .../jquery-autocomplete/demo/images/Olomouc.jpg | Bin 5608 -> 0 bytes .../demo/images/OlympischesMuseumLausanne.jpg | Bin 5719 -> 0 bytes .../demo/images/OrleansMaisonJeannedArc.jpg | Bin 5458 -> 0 bytes .../demo/images/OrleansParcFloraldelaSource.jpg | Bin 5731 -> 0 bytes .../demo/images/OstiaAntica.jpg | Bin 5433 -> 0 bytes .../demo/images/Ostrow Tumski.jpg | Bin 4755 -> 0 bytes .../demo/images/PoertschachSchlossLeonstain.jpg | Bin 7178 -> 0 bytes .../jquery-autocomplete/demo/images/Portoroz.jpg | Bin 5483 -> 0 bytes .../jquery-autocomplete/demo/images/Posen.jpg | Bin 4390 -> 0 bytes .../jquery-autocomplete/demo/images/Postojna.jpg | Bin 4047 -> 0 bytes .../demo/images/Prag Altstaedter Ring.jpg | Bin 6487 -> 0 bytes .../demo/images/Prag Waldsteinpalais.jpg | Bin 5051 -> 0 bytes .../demo/images/RouenNotreDame.jpg | Bin 4442 -> 0 bytes .../demo/images/Salzbergwerk Bex.jpg | Bin 5258 -> 0 bytes .../demo/images/SalzbergwerkWieliczka.jpg | Bin 5356 -> 0 bytes .../demo/images/SalzburgFestungHohensalzburg.jpg | Bin 5349 -> 0 bytes .../demo/images/SalzburgResidenz.jpg | Bin 5495 -> 0 bytes .../demo/images/WienMuseumsQuartier.jpg | Bin 6056 -> 0 bytes .../demo/images/WienMusikverein.jpg | Bin 7119 -> 0 bytes .../demo/images/WienRiesenrad.jpg | Bin 8840 -> 0 bytes .../demo/images/WienRingstrasse.jpg | Bin 6635 -> 0 bytes .../jquery-autocomplete/demo/index.html | 272 ---------- .../jquery-autocomplete/demo/indicator.gif | Bin 1553 -> 0 bytes .../jquery-autocomplete/demo/json.html | 68 --- .../jquery-autocomplete/demo/localdata.js | 216 -------- .../Autocomplete/jquery-autocomplete/demo/main.css | 53 -- .../jquery-autocomplete/demo/search.php | 578 --------------------- .../jquery-autocomplete/demo/search.phps | 578 --------------------- 101 files changed, 1820 deletions(-) delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/bg.gif delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/emails.php delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/emails.phps delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images.php delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Amsterdam Van-Gogh Museum.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Amsterdam.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Antwerpen Rubenshaus.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Antwerpen.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Appenzell.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Arnhem Historisches Museum.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Bled.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Bled_Die Burg von Bled.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Bogojina_Die Pfarrkirche.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/BolognaBasilicadiSanPetronio.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/BolognaFontanadelNettuno.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/BolognaPiazzaMaggiore.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Bolsward Martinikerk.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Bolsward Stadhuis.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Bolsward.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/BordeauxND.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/BordeauxPlaceB.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/BotanischerGartenZuerich.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Bouillon.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Gent Hotel de Ville2.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Gent.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/GenuaStrand.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/GenuabeiNacht.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Giessbachfaelle Brienz.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Giethoorn.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Gnesen.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Gornij Grad_KATHEDRALE.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Gossensass.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Grad_Burg Grad2.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/GrandDixence.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/GrenoblePanorama.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Groningen.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/GrottenvonReclere.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Guebwiller.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Kamnik_Die Franziskaner Bibliothek.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Karlsbad Muehlbrunnkolonnade.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Kazimierz.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/KirchbergAltesRathaus1.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/KlagenfurtDom.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/KleineMeerjungfreu.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/LazienkiparkWarschau.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/LeHavreHafen.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/LeMans.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Lednice.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Leeuwarden Fries Museum.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Leeuwarden.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Lelystad.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Lemmer.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Leper Halles aux draps.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Leuven Museum fuer Kirchenkunst.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Leuven.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Luxemburg.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/LuzernAltstadt.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/LuzernPicassoMuseum.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Lyon.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Maastricht Onze Lieve Vrou...jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Maastricht St Servaasbasiliek.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Maastricht Walmuur.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Maastricht.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/MagiatalMaggia.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Mailand3.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Metlika_Bela Krajina Museum.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/MilanoCastelloSforzesco.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/MilanoDom.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/MilazzoBurg.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Novo Mesto_Das Museum.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/ObervellachBurgFalkenstein.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/OdenseeAndersen.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Olimje_Kirche und Apotheke in Olimje.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Olomouc.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/OlympischesMuseumLausanne.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/OrleansMaisonJeannedArc.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/OrleansParcFloraldelaSource.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/OstiaAntica.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Ostrow Tumski.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/PoertschachSchlossLeonstain.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Portoroz.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Posen.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Postojna.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Prag Altstaedter Ring.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Prag Waldsteinpalais.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/RouenNotreDame.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/Salzbergwerk Bex.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/SalzbergwerkWieliczka.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/SalzburgFestungHohensalzburg.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/SalzburgResidenz.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/WienMuseumsQuartier.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/WienMusikverein.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/WienRiesenrad.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/images/WienRingstrasse.jpg delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/index.html delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/indicator.gif delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/json.html delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/localdata.js delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/main.css delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/search.php delete mode 100644 plugins/Autocomplete/jquery-autocomplete/demo/search.phps diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/bg.gif b/plugins/Autocomplete/jquery-autocomplete/demo/bg.gif deleted file mode 100644 index 846add071..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/bg.gif and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/emails.php b/plugins/Autocomplete/jquery-autocomplete/demo/emails.php deleted file mode 100644 index f79b10e4a..000000000 --- a/plugins/Autocomplete/jquery-autocomplete/demo/emails.php +++ /dev/null @@ -1,23 +0,0 @@ -"peter@pan.de", - "Molly"=>"molly@yahoo.com", - "Forneria Marconi"=>"live@japan.jp", - "Master Sync"=>"205bw@samsung.com", - "Dr. Tech de Log"=>"g15@logitech.com", - "Don Corleone"=>"don@vegas.com", - "Mc Chick"=>"info@donalds.org", - "Donnie Darko"=>"dd@timeshift.info", - "Quake The Net"=>"webmaster@quakenet.org", - "Dr. Write"=>"write@writable.com" -); - -echo "["; -foreach ($items as $key=>$value) { - if (strpos(strtolower($key), $q) !== false) { - echo "{ name: \"$key\", to: \"$value\" }, "; - } -} -echo "]"; \ No newline at end of file diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/emails.phps b/plugins/Autocomplete/jquery-autocomplete/demo/emails.phps deleted file mode 100644 index f79b10e4a..000000000 --- a/plugins/Autocomplete/jquery-autocomplete/demo/emails.phps +++ /dev/null @@ -1,23 +0,0 @@ -"peter@pan.de", - "Molly"=>"molly@yahoo.com", - "Forneria Marconi"=>"live@japan.jp", - "Master Sync"=>"205bw@samsung.com", - "Dr. Tech de Log"=>"g15@logitech.com", - "Don Corleone"=>"don@vegas.com", - "Mc Chick"=>"info@donalds.org", - "Donnie Darko"=>"dd@timeshift.info", - "Quake The Net"=>"webmaster@quakenet.org", - "Dr. Write"=>"write@writable.com" -); - -echo "["; -foreach ($items as $key=>$value) { - if (strpos(strtolower($key), $q) !== false) { - echo "{ name: \"$key\", to: \"$value\" }, "; - } -} -echo "]"; \ No newline at end of file diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images.php b/plugins/Autocomplete/jquery-autocomplete/demo/images.php deleted file mode 100644 index 407645c06..000000000 --- a/plugins/Autocomplete/jquery-autocomplete/demo/images.php +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Amsterdam Van-Gogh Museum.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Amsterdam Van-Gogh Museum.jpg deleted file mode 100644 index 025328c7d..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Amsterdam Van-Gogh Museum.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Amsterdam.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Amsterdam.jpg deleted file mode 100644 index 5f019bdfd..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Amsterdam.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Antwerpen Rubenshaus.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Antwerpen Rubenshaus.jpg deleted file mode 100644 index 7f5d01f71..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Antwerpen Rubenshaus.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Antwerpen.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Antwerpen.jpg deleted file mode 100644 index 46f74a3d1..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Antwerpen.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Appenzell.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Appenzell.jpg deleted file mode 100644 index 1691ed954..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Appenzell.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Arnhem Historisches Museum.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Arnhem Historisches Museum.jpg deleted file mode 100644 index 276f88a31..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Arnhem Historisches Museum.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Bled.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Bled.jpg deleted file mode 100644 index bdcae3184..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Bled.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Bled_Die Burg von Bled.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Bled_Die Burg von Bled.jpg deleted file mode 100644 index 355108409..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Bled_Die Burg von Bled.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Bogojina_Die Pfarrkirche.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Bogojina_Die Pfarrkirche.jpg deleted file mode 100644 index 3e0cd5099..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Bogojina_Die Pfarrkirche.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/BolognaBasilicadiSanPetronio.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/BolognaBasilicadiSanPetronio.jpg deleted file mode 100644 index ef2153593..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/BolognaBasilicadiSanPetronio.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/BolognaFontanadelNettuno.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/BolognaFontanadelNettuno.jpg deleted file mode 100644 index 0f5b576d5..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/BolognaFontanadelNettuno.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/BolognaPiazzaMaggiore.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/BolognaPiazzaMaggiore.jpg deleted file mode 100644 index 48449cf1e..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/BolognaPiazzaMaggiore.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Bolsward Martinikerk.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Bolsward Martinikerk.jpg deleted file mode 100644 index 6df035af4..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Bolsward Martinikerk.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Bolsward Stadhuis.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Bolsward Stadhuis.jpg deleted file mode 100644 index 7c141012d..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Bolsward Stadhuis.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Bolsward.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Bolsward.jpg deleted file mode 100644 index 84dd775af..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Bolsward.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/BordeauxND.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/BordeauxND.jpg deleted file mode 100644 index 242ecefc3..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/BordeauxND.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/BordeauxPlaceB.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/BordeauxPlaceB.jpg deleted file mode 100644 index 026b4014d..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/BordeauxPlaceB.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/BotanischerGartenZuerich.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/BotanischerGartenZuerich.jpg deleted file mode 100644 index 5ee9535ef..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/BotanischerGartenZuerich.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Bouillon.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Bouillon.jpg deleted file mode 100644 index 72638cfd8..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Bouillon.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Gent Hotel de Ville2.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Gent Hotel de Ville2.jpg deleted file mode 100644 index 9084f6f47..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Gent Hotel de Ville2.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Gent.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Gent.jpg deleted file mode 100644 index ebbd6df49..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Gent.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/GenuaStrand.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/GenuaStrand.jpg deleted file mode 100644 index d52af3c79..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/GenuaStrand.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/GenuabeiNacht.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/GenuabeiNacht.jpg deleted file mode 100644 index f2a371036..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/GenuabeiNacht.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Giessbachfaelle Brienz.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Giessbachfaelle Brienz.jpg deleted file mode 100644 index 096319267..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Giessbachfaelle Brienz.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Giethoorn.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Giethoorn.jpg deleted file mode 100644 index a6f7b0f4c..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Giethoorn.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Gnesen.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Gnesen.jpg deleted file mode 100644 index e8825a846..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Gnesen.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Gornij Grad_KATHEDRALE.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Gornij Grad_KATHEDRALE.jpg deleted file mode 100644 index 47cce10d3..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Gornij Grad_KATHEDRALE.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Gossensass.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Gossensass.jpg deleted file mode 100644 index 6aba6d373..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Gossensass.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Grad_Burg Grad2.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Grad_Burg Grad2.jpg deleted file mode 100644 index 5bf35ad85..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Grad_Burg Grad2.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/GrandDixence.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/GrandDixence.jpg deleted file mode 100644 index 09464d7ce..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/GrandDixence.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/GrenoblePanorama.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/GrenoblePanorama.jpg deleted file mode 100644 index d4d0d1bb3..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/GrenoblePanorama.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Groningen.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Groningen.jpg deleted file mode 100644 index 0068a86f3..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Groningen.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/GrottenvonReclere.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/GrottenvonReclere.jpg deleted file mode 100644 index 74d6b3d3f..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/GrottenvonReclere.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Guebwiller.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Guebwiller.jpg deleted file mode 100644 index e31f924c4..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Guebwiller.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Kamnik_Die Franziskaner Bibliothek.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Kamnik_Die Franziskaner Bibliothek.jpg deleted file mode 100644 index 1de470593..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Kamnik_Die Franziskaner Bibliothek.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Karlsbad Muehlbrunnkolonnade.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Karlsbad Muehlbrunnkolonnade.jpg deleted file mode 100644 index 86caa2049..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Karlsbad Muehlbrunnkolonnade.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Kazimierz.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Kazimierz.jpg deleted file mode 100644 index 62c265074..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Kazimierz.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/KirchbergAltesRathaus1.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/KirchbergAltesRathaus1.jpg deleted file mode 100644 index 6f4d018c4..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/KirchbergAltesRathaus1.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/KlagenfurtDom.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/KlagenfurtDom.jpg deleted file mode 100644 index ac9faad2f..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/KlagenfurtDom.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/KleineMeerjungfreu.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/KleineMeerjungfreu.jpg deleted file mode 100644 index b5b13c193..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/KleineMeerjungfreu.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/LazienkiparkWarschau.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/LazienkiparkWarschau.jpg deleted file mode 100644 index c0b114483..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/LazienkiparkWarschau.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/LeHavreHafen.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/LeHavreHafen.jpg deleted file mode 100644 index 9fc38d016..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/LeHavreHafen.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/LeMans.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/LeMans.jpg deleted file mode 100644 index d919de7da..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/LeMans.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Lednice.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Lednice.jpg deleted file mode 100644 index 726248044..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Lednice.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Leeuwarden Fries Museum.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Leeuwarden Fries Museum.jpg deleted file mode 100644 index 6d93e3478..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Leeuwarden Fries Museum.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Leeuwarden.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Leeuwarden.jpg deleted file mode 100644 index c0f78c0cf..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Leeuwarden.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Lelystad.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Lelystad.jpg deleted file mode 100644 index be794f3cd..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Lelystad.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Lemmer.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Lemmer.jpg deleted file mode 100644 index 41d8996b2..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Lemmer.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Leper Halles aux draps.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Leper Halles aux draps.jpg deleted file mode 100644 index cb3138d65..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Leper Halles aux draps.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Leuven Museum fuer Kirchenkunst.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Leuven Museum fuer Kirchenkunst.jpg deleted file mode 100644 index 235869079..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Leuven Museum fuer Kirchenkunst.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Leuven.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Leuven.jpg deleted file mode 100644 index 3e4d5f3b3..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Leuven.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Luxemburg.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Luxemburg.jpg deleted file mode 100644 index 3aaafc9cb..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Luxemburg.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/LuzernAltstadt.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/LuzernAltstadt.jpg deleted file mode 100644 index 47ebd5d1e..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/LuzernAltstadt.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/LuzernPicassoMuseum.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/LuzernPicassoMuseum.jpg deleted file mode 100644 index 08fbb5a0e..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/LuzernPicassoMuseum.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Lyon.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Lyon.jpg deleted file mode 100644 index 7a3eda9d0..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Lyon.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Maastricht Onze Lieve Vrou...jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Maastricht Onze Lieve Vrou...jpg deleted file mode 100644 index 1474bb092..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Maastricht Onze Lieve Vrou...jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Maastricht St Servaasbasiliek.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Maastricht St Servaasbasiliek.jpg deleted file mode 100644 index c41e1aa17..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Maastricht St Servaasbasiliek.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Maastricht Walmuur.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Maastricht Walmuur.jpg deleted file mode 100644 index 75fb02750..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Maastricht Walmuur.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Maastricht.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Maastricht.jpg deleted file mode 100644 index 4dcb6d5d1..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Maastricht.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/MagiatalMaggia.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/MagiatalMaggia.jpg deleted file mode 100644 index 42ff384d9..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/MagiatalMaggia.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Mailand3.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Mailand3.jpg deleted file mode 100644 index 863e198f2..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Mailand3.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Metlika_Bela Krajina Museum.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Metlika_Bela Krajina Museum.jpg deleted file mode 100644 index 47d24d70b..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Metlika_Bela Krajina Museum.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/MilanoCastelloSforzesco.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/MilanoCastelloSforzesco.jpg deleted file mode 100644 index b430de520..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/MilanoCastelloSforzesco.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/MilanoDom.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/MilanoDom.jpg deleted file mode 100644 index 0a5eef4a4..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/MilanoDom.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/MilazzoBurg.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/MilazzoBurg.jpg deleted file mode 100644 index 01226a323..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/MilazzoBurg.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Novo Mesto_Das Museum.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Novo Mesto_Das Museum.jpg deleted file mode 100644 index 452076124..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Novo Mesto_Das Museum.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/ObervellachBurgFalkenstein.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/ObervellachBurgFalkenstein.jpg deleted file mode 100644 index d502ff483..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/ObervellachBurgFalkenstein.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/OdenseeAndersen.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/OdenseeAndersen.jpg deleted file mode 100644 index f131b7608..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/OdenseeAndersen.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Olimje_Kirche und Apotheke in Olimje.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Olimje_Kirche und Apotheke in Olimje.jpg deleted file mode 100644 index 16ea33fb3..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Olimje_Kirche und Apotheke in Olimje.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Olomouc.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Olomouc.jpg deleted file mode 100644 index d9a7641f3..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Olomouc.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/OlympischesMuseumLausanne.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/OlympischesMuseumLausanne.jpg deleted file mode 100644 index 37a267ae5..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/OlympischesMuseumLausanne.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/OrleansMaisonJeannedArc.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/OrleansMaisonJeannedArc.jpg deleted file mode 100644 index 220ad08fa..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/OrleansMaisonJeannedArc.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/OrleansParcFloraldelaSource.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/OrleansParcFloraldelaSource.jpg deleted file mode 100644 index 171e56de8..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/OrleansParcFloraldelaSource.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/OstiaAntica.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/OstiaAntica.jpg deleted file mode 100644 index b505ec7fd..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/OstiaAntica.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Ostrow Tumski.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Ostrow Tumski.jpg deleted file mode 100644 index 91cae01be..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Ostrow Tumski.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/PoertschachSchlossLeonstain.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/PoertschachSchlossLeonstain.jpg deleted file mode 100644 index 9e958b7df..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/PoertschachSchlossLeonstain.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Portoroz.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Portoroz.jpg deleted file mode 100644 index bbad5aa81..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Portoroz.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Posen.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Posen.jpg deleted file mode 100644 index 791c46f2a..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Posen.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Postojna.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Postojna.jpg deleted file mode 100644 index ec2a6be8f..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Postojna.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Prag Altstaedter Ring.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Prag Altstaedter Ring.jpg deleted file mode 100644 index 9f13fd367..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Prag Altstaedter Ring.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Prag Waldsteinpalais.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Prag Waldsteinpalais.jpg deleted file mode 100644 index 718b4e8d9..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Prag Waldsteinpalais.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/RouenNotreDame.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/RouenNotreDame.jpg deleted file mode 100644 index 4e0845342..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/RouenNotreDame.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/Salzbergwerk Bex.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/Salzbergwerk Bex.jpg deleted file mode 100644 index 29bdfe029..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/Salzbergwerk Bex.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/SalzbergwerkWieliczka.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/SalzbergwerkWieliczka.jpg deleted file mode 100644 index 745b18501..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/SalzbergwerkWieliczka.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/SalzburgFestungHohensalzburg.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/SalzburgFestungHohensalzburg.jpg deleted file mode 100644 index c3e9f7428..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/SalzburgFestungHohensalzburg.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/SalzburgResidenz.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/SalzburgResidenz.jpg deleted file mode 100644 index eca7e6022..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/SalzburgResidenz.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/WienMuseumsQuartier.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/WienMuseumsQuartier.jpg deleted file mode 100644 index 4e2262cac..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/WienMuseumsQuartier.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/WienMusikverein.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/WienMusikverein.jpg deleted file mode 100644 index 477bafceb..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/WienMusikverein.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/WienRiesenrad.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/WienRiesenrad.jpg deleted file mode 100644 index 0013657e7..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/WienRiesenrad.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/images/WienRingstrasse.jpg b/plugins/Autocomplete/jquery-autocomplete/demo/images/WienRingstrasse.jpg deleted file mode 100644 index 9543af9b9..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/images/WienRingstrasse.jpg and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/index.html b/plugins/Autocomplete/jquery-autocomplete/demo/index.html deleted file mode 100644 index 977483e04..000000000 --- a/plugins/Autocomplete/jquery-autocomplete/demo/index.html +++ /dev/null @@ -1,272 +0,0 @@ - - - - -jQuery Autocomplete Plugin - - - - - - - - - - - - - - - - -

jQuery Autocomplete Plugin Demo

- -
- -
-

- - - - - - -

-

- - - - (Current month is excluded from list) -

-

- - - -

-

- - - -

-

- - -

-

- - - -

-

- - - -

-

- - - -

-

- - -

-

- - - -

-

- - - -

-

- - -

- - -
- -

- Click here for an autocomplete inside a thickbox window. (this should work even if it is beyond the fold) -

- - - - - - PHP script used to for remote autocomplete - -

Result:

    - -
    - - - - diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/indicator.gif b/plugins/Autocomplete/jquery-autocomplete/demo/indicator.gif deleted file mode 100644 index 085ccaeca..000000000 Binary files a/plugins/Autocomplete/jquery-autocomplete/demo/indicator.gif and /dev/null differ diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/json.html b/plugins/Autocomplete/jquery-autocomplete/demo/json.html deleted file mode 100644 index 9ed974faf..000000000 --- a/plugins/Autocomplete/jquery-autocomplete/demo/json.html +++ /dev/null @@ -1,68 +0,0 @@ - - - - -jQuery Autocomplete Plugin - - - - - - - - - - - - - - - - -

    jQuery Autocomplete Plugin Demo

    - -
    - -
    -

    - - -

    - - -
    - - Server-side script creating the JSON data - -
    - - - - diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/localdata.js b/plugins/Autocomplete/jquery-autocomplete/demo/localdata.js deleted file mode 100644 index 6015f7c82..000000000 --- a/plugins/Autocomplete/jquery-autocomplete/demo/localdata.js +++ /dev/null @@ -1,216 +0,0 @@ -var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; -var emails = [ - { name: "Peter Pan", to: "peter@pan.de" }, - { name: "Molly", to: "molly@yahoo.com" }, - { name: "Forneria Marconi", to: "live@japan.jp" }, - { name: "Master Sync", to: "205bw@samsung.com" }, - { name: "Dr. Tech de Log", to: "g15@logitech.com" }, - { name: "Don Corleone", to: "don@vegas.com" }, - { name: "Mc Chick", to: "info@donalds.org" }, - { name: "Donnie Darko", to: "dd@timeshift.info" }, - { name: "Quake The Net", to: "webmaster@quakenet.org" }, - { name: "Dr. Write", to: "write@writable.com" } -]; -var cities = [ - "Aberdeen", "Ada", "Adamsville", "Addyston", "Adelphi", "Adena", "Adrian", "Akron", - "Albany", "Alexandria", "Alger", "Alledonia", "Alliance", "Alpha", "Alvada", - "Alvordton", "Amanda", "Amelia", "Amesville", "Amherst", "Amlin", "Amsden", - "Amsterdam", "Andover", "Anna", "Ansonia", "Antwerp", "Apple Creek", "Arcadia", - "Arcanum", "Archbold", "Arlington", "Ashland", "Ashley", "Ashtabula", "Ashville", - "Athens", "Attica", "Atwater", "Augusta", "Aurora", "Austinburg", "Ava", "Avon", - "Avon Lake", "Bainbridge", "Bakersville", "Baltic", "Baltimore", "Bannock", - "Barberton", "Barlow", "Barnesville", "Bartlett", "Barton", "Bascom", "Batavia", - "Bath", "Bay Village", "Beach City", "Beachwood", "Beallsville", "Beaver", - "Beaverdam", "Bedford", "Bellaire", "Bellbrook", "Belle Center", "Belle Valley", - "Bellefontaine", "Bellevue", "Bellville", "Belmont", "Belmore", "Beloit", "Belpre", - "Benton Ridge", "Bentonville", "Berea", "Bergholz", "Berkey", "Berlin", - "Berlin Center", "Berlin Heights", "Bethel", "Bethesda", "Bettsville", "Beverly", - "Bidwell", "Big Prairie", "Birmingham", "Blacklick", "Bladensburg", "Blaine", - "Blakeslee", "Blanchester", "Blissfield", "Bloomdale", "Bloomingburg", - "Bloomingdale", "Bloomville", "Blue Creek", "Blue Rock", "Bluffton", - "Bolivar", "Botkins", "Bourneville", "Bowerston", "Bowersville", - "Bowling Green", "Bradford", "Bradner", "Brady Lake", "Brecksville", - "Bremen", "Brewster", "Brice", "Bridgeport", "Brilliant", "Brinkhaven", - "Bristolville", "Broadview Heights", "Broadway", "Brookfield", "Brookpark", - "Brookville", "Brownsville", "Brunswick", "Bryan", "Buchtel", "Buckeye Lake", - "Buckland", "Bucyrus", "Buffalo", "Buford", "Burbank", "Burghill", "Burgoon", - "Burkettsville", "Burton", "Butler", "Byesville", "Cable", "Cadiz", "Cairo", - "Caldwell", "Caledonia", "Cambridge", "Camden", "Cameron", "Camp Dennison", - "Campbell", "Canal Fulton", "Canal Winchester", "Canfield", "Canton", "Carbon Hill", - "Carbondale", "Cardington", "Carey", "Carroll", "Carrollton", "Casstown", - "Castalia", "Catawba", "Cecil", "Cedarville", "Celina", "Centerburg", - "Chagrin Falls", "Chandlersville", "Chardon", "Charm", "Chatfield", "Chauncey", - "Cherry Fork", "Chesapeake", "Cheshire", "Chester", "Chesterhill", "Chesterland", - "Chesterville", "Chickasaw", "Chillicothe", "Chilo", "Chippewa Lake", - "Christiansburg", "Cincinnati", "Circleville", "Clarington", "Clarksburg", - "Clarksville", "Clay Center", "Clayton", "Cleveland", "Cleves", "Clifton", - "Clinton", "Cloverdale", "Clyde", "Coal Run", "Coalton", "Coldwater", "Colerain", - "College Corner", "Collins", "Collinsville", "Colton", "Columbia Station", - "Columbiana", "Columbus", "Columbus Grove", "Commercial Point", "Conesville", - "Conneaut", "Conover", "Continental", "Convoy", "Coolville", "Corning", "Cortland", - "Coshocton", "Covington", "Creola", "Crestline", "Creston", "Crooksville", - "Croton", "Crown City", "Cuba", "Cumberland", "Curtice", "Custar", "Cutler", - "Cuyahoga Falls", "Cygnet", "Cynthiana", "Dalton", "Damascus", "Danville", - "Dayton", "De Graff", "Decatur", "Deerfield", "Deersville", "Defiance", - "Delaware", "Dellroy", "Delphos", "Delta", "Dennison", "Derby", "Derwent", - "Deshler", "Dexter City", "Diamond", "Dillonvale", "Dola", "Donnelsville", - "Dorset", "Dover", "Doylestown", "Dresden", "Dublin", "Dunbridge", "Duncan Falls", - "Dundee", "Dunkirk", "Dupont", "East Claridon", "East Fultonham", - "East Liberty", "East Liverpool", "East Palestine", "East Rochester", - "East Sparta", "East Springfield", "Eastlake", "Eaton", "Edgerton", "Edison", - "Edon", "Eldorado", "Elgin", "Elkton", "Ellsworth", "Elmore", "Elyria", - "Empire", "Englewood", "Enon", "Etna", "Euclid", "Evansport", "Fairborn", - "Fairfield", "Fairpoint", "Fairview", "Farmdale", "Farmer", "Farmersville", - "Fayette", "Fayetteville", "Feesburg", "Felicity", "Findlay", "Flat Rock", - "Fleming", "Fletcher", "Flushing", "Forest", "Fort Jennings", "Fort Loramie", - "Fort Recovery", "Fostoria", "Fowler", "Frankfort", "Franklin", - "Franklin Furnace", "Frazeysburg", "Fredericksburg", "Fredericktown", - "Freeport", "Fremont", "Fresno", "Friendship", "Fulton", "Fultonham", - "Galena", "Galion", "Gallipolis", "Galloway", "Gambier", "Garrettsville", - "Gates Mills", "Geneva", "Genoa", "Georgetown", "Germantown", "Gettysburg", - "Gibsonburg", "Girard", "Glandorf", "Glencoe", "Glenford", "Glenmont", - "Glouster", "Gnadenhutten", "Gomer", "Goshen", "Grafton", "Grand Rapids", - "Grand River", "Granville", "Gratiot", "Gratis", "Graysville", "Graytown", - "Green", "Green Camp", "Green Springs", "Greenfield", "Greenford", - "Greentown", "Greenville", "Greenwich", "Grelton", "Grove City", - "Groveport", "Grover Hill", "Guysville", "Gypsum", "Hallsville", - "Hamden", "Hamersville", "Hamilton", "Hamler", "Hammondsville", - "Hannibal", "Hanoverton", "Harbor View", "Harlem Springs", "Harpster", - "Harrisburg", "Harrison", "Harrisville", "Harrod", "Hartford", "Hartville", - "Harveysburg", "Haskins", "Haverhill", "Haviland", "Haydenville", "Hayesville", - "Heath", "Hebron", "Helena", "Hicksville", "Higginsport", "Highland", "Hilliard", - "Hillsboro", "Hinckley", "Hiram", "Hockingport", "Holgate", "Holland", - "Hollansburg", "Holloway", "Holmesville", "Homer", "Homerville", "Homeworth", - "Hooven", "Hopedale", "Hopewell", "Houston", "Howard", "Hoytville", "Hubbard", - "Hudson", "Huntsburg", "Huntsville", "Huron", "Iberia", "Independence", - "Irondale", "Ironton", "Irwin", "Isle Saint George", "Jackson", "Jackson Center", - "Jacksontown", "Jacksonville", "Jacobsburg", "Jamestown", "Jasper", - "Jefferson", "Jeffersonville", "Jenera", "Jeromesville", "Jerry City", - "Jerusalem", "Jewell", "Jewett", "Johnstown", "Junction City", "Kalida", - "Kansas", "Keene", "Kelleys Island", "Kensington", "Kent", "Kenton", - "Kerr", "Kettlersville", "Kidron", "Kilbourne", "Killbuck", "Kimbolton", - "Kings Mills", "Kingston", "Kingsville", "Kinsman", "Kipling", "Kipton", - "Kirby", "Kirkersville", "Kitts Hill", "Kunkle", "La Rue", "Lacarne", - "Lafayette", "Lafferty", "Lagrange", "Laings", "Lake Milton", "Lakemore", - "Lakeside Marblehead", "Lakeview", "Lakeville", "Lakewood", "Lancaster", - "Langsville", "Lansing", "Latham", "Latty", "Laura", "Laurelville", - "Leavittsburg", "Lebanon", "Lees Creek", "Leesburg", "Leesville", - "Leetonia", "Leipsic", "Lemoyne", "Lewis Center", "Lewisburg", - "Lewistown", "Lewisville", "Liberty Center", "Lima", "Limaville", - "Lindsey", "Lisbon", "Litchfield", "Lithopolis", "Little Hocking", - "Lockbourne", "Lodi", "Logan", "London", "Londonderry", - "Long Bottom", "Lorain", "Lore City", "Loudonville", "Louisville", - "Loveland", "Lowell", "Lowellville", "Lower Salem", "Lucas", - "Lucasville", "Luckey", "Ludlow Falls", "Lynchburg", "Lynx", - "Lyons", "Macedonia", "Macksburg", "Madison", "Magnetic Springs", - "Magnolia", "Maineville", "Malaga", "Malinta", "Malta", "Malvern", - "Manchester", "Mansfield", "Mantua", "Maple Heights", "Maplewood", - "Marathon", "Marengo", "Maria Stein", "Marietta", "Marion", - "Mark Center", "Marshallville", "Martel", "Martin", "Martins Ferry", - "Martinsburg", "Martinsville", "Marysville", "Mason", "Massillon", - "Masury", "Maumee", "Maximo", "Maynard", "Mc Arthur", "Mc Clure", - "Mc Comb", "Mc Connelsville", "Mc Cutchenville", "Mc Dermott", - "Mc Donald", "Mc Guffey", "Mechanicsburg", "Mechanicstown", - "Medina", "Medway", "Melmore", "Melrose", "Mendon", "Mentor", - "Mesopotamia", "Metamora", "Miamisburg", "Miamitown", "Miamiville", - "Middle Bass", "Middle Point", "Middlebranch", "Middleburg", - "Middlefield", "Middleport", "Middletown", "Midland", "Midvale", - "Milan", "Milford", "Milford Center", "Millbury", "Milledgeville", - "Miller City", "Millersburg", "Millersport", "Millfield", - "Milton Center", "Mineral City", "Mineral Ridge", "Minerva", - "Minford", "Mingo", "Mingo Junction", "Minster", "Mogadore", - "Monclova", "Monroe", "Monroeville", "Montezuma", "Montpelier", - "Montville", "Morral", "Morristown", "Morrow", "Moscow", - "Mount Blanchard", "Mount Cory", "Mount Eaton", "Mount Gilead", - "Mount Hope", "Mount Liberty", "Mount Orab", "Mount Perry", - "Mount Pleasant", "Mount Saint Joseph", "Mount Sterling", - "Mount Vernon", "Mount Victory", "Mowrystown", "Moxahala", - "Munroe Falls", "Murray City", "Nankin", "Napoleon", "Nashport", - "Nashville", "Navarre", "Neapolis", "Neffs", "Negley", - "Nelsonville", "Nevada", "Neville", "New Albany", "New Athens", - "New Bavaria", "New Bloomington", "New Bremen", "New Carlisle", - "New Concord", "New Hampshire", "New Haven", "New Holland", - "New Knoxville", "New Lebanon", "New Lexington", "New London", - "New Madison", "New Marshfield", "New Matamoras", "New Middletown", - "New Paris", "New Philadelphia", "New Plymouth", "New Richmond", - "New Riegel", "New Rumley", "New Springfield", "New Straitsville", - "New Vienna", "New Washington", "New Waterford", "New Weston", - "Newark", "Newbury", "Newcomerstown", "Newport", "Newton Falls", - "Newtonsville", "Ney", "Niles", "North Baltimore", "North Bend", - "North Benton", "North Bloomfield", "North Fairfield", - "North Georgetown", "North Hampton", "North Jackson", - "North Kingsville", "North Lawrence", "North Lewisburg", - "North Lima", "North Olmsted", "North Ridgeville", "North Robinson", - "North Royalton", "North Star", "Northfield", "Northwood", "Norwalk", - "Norwich", "Nova", "Novelty", "Oak Harbor", "Oak Hill", "Oakwood", - "Oberlin", "Oceola", "Ohio City", "Okeana", "Okolona", "Old Fort", - "Old Washington", "Olmsted Falls", "Ontario", "Orangeville", - "Oregon", "Oregonia", "Orient", "Orrville", "Orwell", "Osgood", - "Ostrander", "Ottawa", "Ottoville", "Otway", "Overpeck", - "Owensville", "Oxford", "Painesville", "Palestine", "Pandora", - "Paris", "Parkman", "Pataskala", "Patriot", "Paulding", "Payne", - "Pedro", "Peebles", "Pemberton", "Pemberville", "Peninsula", - "Perry", "Perrysburg", "Perrysville", "Petersburg", "Pettisville", - "Phillipsburg", "Philo", "Pickerington", "Piedmont", "Pierpont", - "Piketon", "Piney Fork", "Pioneer", "Piqua", "Pitsburg", - "Plain City", "Plainfield", "Pleasant City", "Pleasant Hill", - "Pleasant Plain", "Pleasantville", "Plymouth", "Polk", - "Pomeroy", "Port Clinton", "Port Jefferson", "Port Washington", - "Port William", "Portage", "Portland", "Portsmouth", "Potsdam", - "Powell", "Powhatan Point", "Proctorville", "Prospect", "Put in Bay", - "Quaker City", "Quincy", "Racine", "Radnor", "Randolph", "Rarden", - "Ravenna", "Rawson", "Ray", "Rayland", "Raymond", "Reedsville", - "Reesville", "Reno", "Republic", "Reynoldsburg", "Richfield", - "Richmond", "Richmond Dale", "Richwood", "Ridgeville Corners", - "Ridgeway", "Rio Grande", "Ripley", "Risingsun", "Rittman", - "Robertsville", "Rock Camp", "Rock Creek", "Rockbridge", "Rockford", - "Rocky Ridge", "Rocky River", "Rogers", "Rome", "Rootstown", "Roseville", - "Rosewood", "Ross", "Rossburg", "Rossford", "Roundhead", "Rudolph", - "Rushsylvania", "Rushville", "Russells Point", "Russellville", "Russia", - "Rutland", "Sabina", "Saint Clairsville", "Saint Henry", "Saint Johns", - "Saint Louisville", "Saint Marys", "Saint Paris", "Salem", "Salesville", - "Salineville", "Sandusky", "Sandyville", "Sarahsville", "Sardinia", - "Sardis", "Savannah", "Scio", "Scioto Furnace", "Scott", "Scottown", - "Seaman", "Sebring", "Sedalia", "Senecaville", "Seven Mile", "Seville", - "Shade", "Shadyside", "Shandon", "Sharon Center", "Sharpsburg", - "Shauck", "Shawnee", "Sheffield Lake", "Shelby", "Sherrodsville", - "Sherwood", "Shiloh", "Short Creek", "Shreve", "Sidney", "Sinking Spring", - "Smithfield", "Smithville", "Solon", "Somerdale", "Somerset", - "Somerville", "South Bloomingville", "South Charleston", "South Lebanon", - "South Point", "South Salem", "South Solon", "South Vienna", - "South Webster", "Southington", "Sparta", "Spencer", "Spencerville", - "Spring Valley", "Springboro", "Springfield", "Stafford", "Sterling", - "Steubenville", "Stewart", "Stillwater", "Stockdale", "Stockport", - "Stone Creek", "Stony Ridge", "Stout", "Stoutsville", "Stow", "Strasburg", - "Stratton", "Streetsboro", "Strongsville", "Struthers", "Stryker", - "Sugar Grove", "Sugarcreek", "Sullivan", "Sulphur Springs", "Summerfield", - "Summit Station", "Summitville", "Sunbury", "Swanton", "Sycamore", - "Sycamore Valley", "Sylvania", "Syracuse", "Tallmadge", "Tarlton", - "Terrace Park", "The Plains", "Thompson", "Thornville", "Thurman", - "Thurston", "Tiffin", "Tiltonsville", "Tipp City", "Tippecanoe", "Tiro", - "Toledo", "Tontogany", "Torch", "Toronto", "Tremont City", "Trenton", - "Trimble", "Trinway", "Troy", "Tuppers Plains", "Tuscarawas", "Twinsburg", - "Uhrichsville", "Union City", "Union Furnace", "Unionport", "Uniontown", - "Unionville", "Unionville Center", "Uniopolis", "Upper Sandusky", "Urbana", - "Utica", "Valley City", "Van Buren", "Van Wert", "Vandalia", "Vanlue", - "Vaughnsville", "Venedocia", "Vermilion", "Verona", "Versailles", - "Vickery", "Vienna", "Vincent", "Vinton", "Wadsworth", "Wakefield", - "Wakeman", "Walbridge", "Waldo", "Walhonding", "Walnut Creek", "Wapakoneta", - "Warnock", "Warren", "Warsaw", "Washington Court House", - "Washingtonville", "Waterford", "Waterloo", "Watertown", "Waterville", - "Wauseon", "Waverly", "Wayland", "Wayne", "Waynesburg", "Waynesfield", - "Waynesville", "Wellington", "Wellston", "Wellsville", "West Alexandria", - "West Chester", "West Elkton", "West Farmington", "West Jefferson", - "West Lafayette", "West Liberty", "West Manchester", "West Mansfield", - "West Millgrove", "West Milton", "West Point", "West Portsmouth", - "West Rushville", "West Salem", "West Union", "West Unity", "Westerville", - "Westfield Center", "Westlake", "Weston", "Westville", "Wharton", - "Wheelersburg", "Whipple", "White Cottage", "Whitehouse", "Wickliffe", - "Wilberforce", "Wilkesville", "Willard", "Williamsburg", "Williamsfield", - "Williamsport", "Williamstown", "Williston", "Willoughby", "Willow Wood", - "Willshire", "Wilmington", "Wilmot", "Winchester", "Windham", "Windsor", - "Winesburg", "Wingett Run", "Winona", "Wolf Run", "Woodsfield", - "Woodstock", "Woodville", "Wooster", "Wren", "Xenia", "Yellow Springs", - "Yorkshire", "Yorkville", "Youngstown", "Zaleski", "Zanesfield", "Zanesville", - "Zoar" -]; \ No newline at end of file diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/main.css b/plugins/Autocomplete/jquery-autocomplete/demo/main.css deleted file mode 100644 index b502a8a1a..000000000 --- a/plugins/Autocomplete/jquery-autocomplete/demo/main.css +++ /dev/null @@ -1,53 +0,0 @@ -body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0} -table{border-collapse:collapse;border-spacing:0} -fieldset,img{border:0} -address,caption,cite,code,dfn,th,var{font-style:normal;font-weight:normal} -ol,ul{list-style:none} -caption,th{text-align:left} -h1,h2,h3,h4,h5,h6{font-size:100%;font-style:normal;font-weight:normal} -q:before,q:after{content:''} -body{font:13px arial,helvetica,clean,sans-serif;font-size:small;} -select,input,textarea{font:99% arial,helvetica,clean,sans-serif} -pre,code{font:115% monospace;font-size:100%} -body * {line-height:1.22em} -body { - color: #202020; -} - -h1 { - color: #fff; - background: #06b; - padding: 10px; - font-size: 200%; -} - -h2 { - color: #000; - font-size: 150%; - padding: 10px 0; -} - -h3 { - color: #000; - font-size: 120%; - padding: 10px 0; -} - -ul { - list-style: disc inside; - margin-left: 1em; -} - -#content { - padding: 10px; -} - -label { - float: left; - width: 12em; -} -input[type=text] { width: 15em; } - -#banner { padding: 15px; background-color: #06b; color: white; font-size: large; border-bottom: 1px solid #ccc; - background: url(bg.gif) repeat-x; text-align: center } -#banner a { color: white; } \ No newline at end of file diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/search.php b/plugins/Autocomplete/jquery-autocomplete/demo/search.php deleted file mode 100644 index 03c0c0eab..000000000 --- a/plugins/Autocomplete/jquery-autocomplete/demo/search.php +++ /dev/null @@ -1,578 +0,0 @@ -Bittern"=>"Botaurus stellaris", -"Little Grebe"=>"Tachybaptus ruficollis", -"Black-necked Grebe"=>"Podiceps nigricollis", -"Little Bittern"=>"Ixobrychus minutus", -"Black-crowned Night Heron"=>"Nycticorax nycticorax", -"Purple Heron"=>"Ardea purpurea", -"White Stork"=>"Ciconia ciconia", -"Spoonbill"=>"Platalea leucorodia", -"Red-crested Pochard"=>"Netta rufina", -"Common Eider"=>"Somateria mollissima", -"Red Kite"=>"Milvus milvus", -"Hen Harrier"=>"Circus cyaneus", -"Montagu`s Harrier"=>"Circus pygargus", -"Black Grouse"=>"Tetrao tetrix", -"Grey Partridge"=>"Perdix perdix", -"Spotted Crake"=>"Porzana porzana", -"Corncrake"=>"Crex crex", -"Common Crane"=>"Grus grus", -"Avocet"=>"Recurvirostra avosetta", -"Stone Curlew"=>"Burhinus oedicnemus", -"Common Ringed Plover"=>"Charadrius hiaticula", -"Kentish Plover"=>"Charadrius alexandrinus", -"Ruff"=>"Philomachus pugnax", -"Common Snipe"=>"Gallinago gallinago", -"Black-tailed Godwit"=>"Limosa limosa", -"Common Redshank"=>"Tringa totanus", -"Sandwich Tern"=>"Sterna sandvicensis", -"Common Tern"=>"Sterna hirundo", -"Arctic Tern"=>"Sterna paradisaea", -"Little Tern"=>"Sternula albifrons", -"Black Tern"=>"Chlidonias niger", -"Barn Owl"=>"Tyto alba", -"Little Owl"=>"Athene noctua", -"Short-eared Owl"=>"Asio flammeus", -"European Nightjar"=>"Caprimulgus europaeus", -"Common Kingfisher"=>"Alcedo atthis", -"Eurasian Hoopoe"=>"Upupa epops", -"Eurasian Wryneck"=>"Jynx torquilla", -"European Green Woodpecker"=>"Picus viridis", -"Crested Lark"=>"Galerida cristata", -"White-headed Duck"=>"Oxyura leucocephala", -"Pale-bellied Brent Goose"=>"Branta hrota", -"Tawny Pipit"=>"Anthus campestris", -"Whinchat"=>"Saxicola rubetra", -"European Stonechat"=>"Saxicola rubicola", -"Northern Wheatear"=>"Oenanthe oenanthe", -"Savi`s Warbler"=>"Locustella luscinioides", -"Sedge Warbler"=>"Acrocephalus schoenobaenus", -"Great Reed Warbler"=>"Acrocephalus arundinaceus", -"Bearded Reedling"=>"Panurus biarmicus", -"Red-backed Shrike"=>"Lanius collurio", -"Great Grey Shrike"=>"Lanius excubitor", -"Woodchat Shrike"=>"Lanius senator", -"Common Raven"=>"Corvus corax", -"Yellowhammer"=>"Emberiza citrinella", -"Ortolan Bunting"=>"Emberiza hortulana", -"Corn Bunting"=>"Emberiza calandra", -"Great Cormorant"=>"Phalacrocorax carbo", -"Hawfinch"=>"Coccothraustes coccothraustes", -"Common Shelduck"=>"Tadorna tadorna", -"Bluethroat"=>"Luscinia svecica", -"Grey Heron"=>"Ardea cinerea", -"Barn Swallow"=>"Hirundo rustica", -"Hooded Crow"=>"Corvus cornix", -"Dunlin"=>"Calidris alpina", -"Eurasian Pied Flycatcher"=>"Ficedula hypoleuca", -"Eurasian Nuthatch"=>"Sitta europaea", -"Short-toed Tree Creeper"=>"Certhia brachydactyla", -"Wood Lark"=>"Lullula arborea", -"Tree Pipit"=>"Anthus trivialis", -"Eurasian Hobby"=>"Falco subbuteo", -"Marsh Warbler"=>"Acrocephalus palustris", -"Wood Sandpiper"=>"Tringa glareola", -"Tawny Owl"=>"Strix aluco", -"Lesser Whitethroat"=>"Sylvia curruca", -"Barnacle Goose"=>"Branta leucopsis", -"Common Goldeneye"=>"Bucephala clangula", -"Western Marsh Harrier"=>"Circus aeruginosus", -"Common Buzzard"=>"Buteo buteo", -"Sanderling"=>"Calidris alba", -"Little Gull"=>"Larus minutus", -"Eurasian Magpie"=>"Pica pica", -"Willow Warbler"=>"Phylloscopus trochilus", -"Wood Warbler"=>"Phylloscopus sibilatrix", -"Great Crested Grebe"=>"Podiceps cristatus", -"Eurasian Jay"=>"Garrulus glandarius", -"Common Redstart"=>"Phoenicurus phoenicurus", -"Blue-headed Wagtail"=>"Motacilla flava", -"Common Swift"=>"Apus apus", -"Marsh Tit"=>"Poecile palustris", -"Goldcrest"=>"Regulus regulus", -"European Golden Plover"=>"Pluvialis apricaria", -"Eurasian Bullfinch"=>"Pyrrhula pyrrhula", -"Common Whitethroat"=>"Sylvia communis", -"Meadow Pipit"=>"Anthus pratensis", -"Greylag Goose"=>"Anser anser", -"Spotted Flycatcher"=>"Muscicapa striata", -"European Greenfinch"=>"Carduelis chloris", -"Common Greenshank"=>"Tringa nebularia", -"Great Spotted Woodpecker"=>"Dendrocopos major", -"Greater Canada Goose"=>"Branta canadensis", -"Mistle Thrush"=>"Turdus viscivorus", -"Great Black-backed Gull"=>"Larus marinus", -"Goosander"=>"Mergus merganser", -"Great Egret"=>"Casmerodius albus", -"Northern Goshawk"=>"Accipiter gentilis", -"Dunnock"=>"Prunella modularis", -"Stock Dove"=>"Columba oenas", -"Common Wood Pigeon"=>"Columba palumbus", -"Eurasian Woodcock"=>"Scolopax rusticola", -"House Sparrow"=>"Passer domesticus", -"Common House Martin"=>"Delichon urbicum", -"Red Knot"=>"Calidris canutus", -"Western Jackdaw"=>"Corvus monedula", -"Brambling"=>"Fringilla montifringilla", -"Northern Lapwing"=>"Vanellus vanellus", -"European Reed Warbler"=>"Acrocephalus scirpaceus", -"Lesser Black-backed Gull"=>"Larus fuscus", -"Little Egret"=>"Egretta garzetta", -"Little Stint"=>"Calidris minuta", -"Common Linnet"=>"Carduelis cannabina", -"Mute Swan"=>"Cygnus olor", -"Common Cuckoo"=>"Cuculus canorus", -"Black-headed Gull"=>"Larus ridibundus", -"Greater White-fronted Goose"=>"Anser albifrons", -"Great Tit"=>"Parus major", -"Redwing"=>"Turdus iliacus", -"Gadwall"=>"Anas strepera", -"Fieldfare"=>"Turdus pilaris", -"Tufted Duck"=>"Aythya fuligula", -"Crested Tit"=>"Lophophanes cristatus", -"Willow Tit"=>"Poecile montanus", -"Eurasian Coot"=>"Fulica atra", -"Common Blackbird"=>"Turdus merula", -"Smew"=>"Mergus albellus", -"Common Sandpiper"=>"Actitis hypoleucos", -"Sand Martin"=>"Riparia riparia", -"Purple Sandpiper"=>"Calidris maritima", -"Northern Pintail"=>"Anas acuta", -"Blue Tit"=>"Cyanistes caeruleus", -"European Goldfinch"=>"Carduelis carduelis", -"Eurasian Whimbrel"=>"Numenius phaeopus", -"Common Reed Bunting"=>"Emberiza schoeniclus", -"Eurasian Tree Sparrow"=>"Passer montanus", -"Rook"=>"Corvus frugilegus", -"European Robin"=>"Erithacus rubecula", -"Bar-tailed Godwit"=>"Limosa lapponica", -"Dark-bellied Brent Goose"=>"Branta bernicla", -"Eurasian Oystercatcher"=>"Haematopus ostralegus", -"Eurasian Siskin"=>"Carduelis spinus", -"Northern Shoveler"=>"Anas clypeata", -"Eurasian Wigeon"=>"Anas penelope", -"Eurasian Sparrow Hawk"=>"Accipiter nisus", -"Icterine Warbler"=>"Hippolais icterina", -"Common Starling"=>"Sturnus vulgaris", -"Long-tailed Tit"=>"Aegithalos caudatus", -"Ruddy Turnstone"=>"Arenaria interpres", -"Mew Gull"=>"Larus canus", -"Common Pochard"=>"Aythya ferina", -"Common Chiffchaff"=>"Phylloscopus collybita", -"Greater Scaup"=>"Aythya marila", -"Common Kestrel"=>"Falco tinnunculus", -"Garden Warbler"=>"Sylvia borin", -"Eurasian Collared Dove"=>"Streptopelia decaocto", -"Eurasian Skylark"=>"Alauda arvensis", -"Common Chaffinch"=>"Fringilla coelebs", -"Common Moorhen"=>"Gallinula chloropus", -"Water Pipit"=>"Anthus spinoletta", -"Mallard"=>"Anas platyrhynchos", -"Winter Wren"=>"Troglodytes troglodytes", -"Common Teal"=>"Anas crecca", -"Green Sandpiper"=>"Tringa ochropus", -"White Wagtail"=>"Motacilla alba", -"Eurasian Curlew"=>"Numenius arquata", -"Song Thrush"=>"Turdus philomelos", -"European Herring Gull"=>"Larus argentatus", -"Grey Plover"=>"Pluvialis squatarola", -"Carrion Crow"=>"Corvus corone", -"Coal Tit"=>"Periparus ater", -"Spotted Redshank"=>"Tringa erythropus", -"Blackcap"=>"Sylvia atricapilla", -"Egyptian Vulture"=>"Neophron percnopterus", -"Razorbill"=>"Alca torda", -"Alpine Swift"=>"Apus melba", -"Long-legged Buzzard"=>"Buteo rufinus", -"Audouin`s Gull"=>"Larus audouinii", -"Balearic Shearwater"=>"Puffinus mauretanicus", -"Upland Sandpiper"=>"Bartramia longicauda", -"Greater Spotted Eagle"=>"Aquila clanga", -"Ring Ouzel"=>"Turdus torquatus", -"Yellow-browed Warbler"=>"Phylloscopus inornatus", -"Blue Rock Thrush"=>"Monticola solitarius", -"Buff-breasted Sandpiper"=>"Tryngites subruficollis", -"Jack Snipe"=>"Lymnocryptes minimus", -"White-rumped Sandpiper"=>"Calidris fuscicollis", -"Ruddy Shelduck"=>"Tadorna ferruginea", -"Cetti's Warbler"=>"Cettia cetti", -"Citrine Wagtail"=>"Motacilla citreola", -"Roseate Tern"=>"Sterna dougallii", -"Black-legged Kittiwake"=>"Rissa tridactyla", -"Pygmy Cormorant"=>"Phalacrocorax pygmeus", -"Booted Eagle"=>"Aquila pennata", -"Lesser White-fronted Goose"=>"Anser erythropus", -"Little Bunting"=>"Emberiza pusilla", -"Eleonora's Falcon"=>"Falco eleonorae", -"European Serin"=>"Serinus serinus", -"Twite"=>"Carduelis flavirostris", -"Yellow-legged Gull"=>"Larus michahellis", -"Gyr Falcon"=>"Falco rusticolus", -"Greenish Warbler"=>"Phylloscopus trochiloides", -"Red-necked Phalarope"=>"Phalaropus lobatus", -"Mealy Redpoll"=>"Carduelis flammea", -"Glaucous Gull"=>"Larus hyperboreus", -"Great Skua"=>"Stercorarius skua", -"Great Bustard"=>"Otis tarda", -"Velvet Scoter"=>"Melanitta fusca", -"Pine Grosbeak"=>"Pinicola enucleator", -"House Crow"=>"Corvus splendens", -"Hume`s Leaf Warbler"=>"Phylloscopus humei", -"Great Northern Loon"=>"Gavia immer", -"Long-tailed Duck"=>"Clangula hyemalis", -"Lapland Longspur"=>"Calcarius lapponicus", -"Northern Gannet"=>"Morus bassanus", -"Eastern Imperial Eagle"=>"Aquila heliaca", -"Little Auk"=>"Alle alle", -"Lesser Spotted Woodpecker"=>"Dendrocopos minor", -"Iceland Gull"=>"Larus glaucoides", -"Parasitic Jaeger"=>"Stercorarius parasiticus", -"Bewick`s Swan"=>"Cygnus bewickii", -"Little Bustard"=>"Tetrax tetrax", -"Little Crake"=>"Porzana parva", -"Baillon`s Crake"=>"Porzana pusilla", -"Long-tailed Jaeger"=>"Stercorarius longicaudus", -"King Eider"=>"Somateria spectabilis", -"Greater Short-toed Lark"=>"Calandrella brachydactyla", -"Houbara Bustard"=>"Chlamydotis undulata", -"Curlew Sandpiper"=>"Calidris ferruginea", -"Common Crossbill"=>"Loxia curvirostra", -"European Shag"=>"Phalacrocorax aristotelis", -"Horned Grebe"=>"Podiceps auritus", -"Common Quail"=>"Coturnix coturnix", -"Bearded Vulture"=>"Gypaetus barbatus", -"Lanner Falcon"=>"Falco biarmicus", -"Middle Spotted Woodpecker"=>"Dendrocopos medius", -"Pomarine Jaeger"=>"Stercorarius pomarinus", -"Red-breasted Merganser"=>"Mergus serrator", -"Eurasian Black Vulture"=>"Aegypius monachus", -"Eurasian Dotterel"=>"Charadrius morinellus", -"Common Nightingale"=>"Luscinia megarhynchos", -"Northern willow warbler"=>"Phylloscopus trochilus acredula", -"Manx Shearwater"=>"Puffinus puffinus", -"Northern Fulmar"=>"Fulmarus glacialis", -"Eurasian Eagle Owl"=>"Bubo bubo", -"Orphean Warbler"=>"Sylvia hortensis", -"Melodious Warbler"=>"Hippolais polyglotta", -"Pallas's Leaf Warbler"=>"Phylloscopus proregulus", -"Atlantic Puffin"=>"Fratercula arctica", -"Black-throated Loon"=>"Gavia arctica", -"Bohemian Waxwing"=>"Bombycilla garrulus", -"Marsh Sandpiper"=>"Tringa stagnatilis", -"Great Snipe"=>"Gallinago media", -"Squacco Heron"=>"Ardeola ralloides", -"Long-eared Owl"=>"Asio otus", -"Caspian Tern"=>"Hydroprogne caspia", -"Red-breasted Goose"=>"Branta ruficollis", -"Red-throated Loon"=>"Gavia stellata", -"Common Rosefinch"=>"Carpodacus erythrinus", -"Red-footed Falcon"=>"Falco vespertinus", -"Ross's Goose"=>"Anser rossii", -"Red Phalarope"=>"Phalaropus fulicarius", -"Pied Wagtail"=>"Motacilla yarrellii", -"Rose-coloured Starling"=>"Sturnus roseus", -"Rough-legged Buzzard"=>"Buteo lagopus", -"Saker Falcon"=>"Falco cherrug", -"European Roller"=>"Coracias garrulus", -"Short-toed Eagle"=>"Circaetus gallicus", -"Peregrine Falcon"=>"Falco peregrinus", -"Merlin"=>"Falco columbarius", -"Snow Goose"=>"Anser caerulescens", -"Snowy Owl"=>"Bubo scandiacus", -"Snow Bunting"=>"Plectrophenax nivalis", -"Common Grasshopper Warbler"=>"Locustella naevia", -"Golden Eagle"=>"Aquila chrysaetos", -"Black-winged Stilt"=>"Himantopus himantopus", -"Steppe Eagle"=>"Aquila nipalensis", -"Pallid Harrier"=>"Circus macrourus", -"European Storm-petrel"=>"Hydrobates pelagicus", -"Horned Lark"=>"Eremophila alpestris", -"Eurasian Treecreeper"=>"Certhia familiaris", -"Taiga Bean Goose"=>"Anser fabalis", -"Temminck`s Stint"=>"Calidris temminckii", -"Terek Sandpiper"=>"Xenus cinereus", -"Tundra Bean Goose"=>"Anser serrirostris", -"European Turtle Dove"=>"Streptopelia turtur", -"Leach`s Storm-petrel"=>"Oceanodroma leucorhoa", -"Eurasian Griffon Vulture"=>"Gyps fulvus", -"Paddyfield Warbler"=>"Acrocephalus agricola", -"Osprey"=>"Pandion haliaetus", -"Firecrest"=>"Regulus ignicapilla", -"Water Rail"=>"Rallus aquaticus", -"European Honey Buzzard"=>"Pernis apivorus", -"Eurasian Golden Oriole"=>"Oriolus oriolus", -"Whooper Swan"=>"Cygnus cygnus", -"Two-barred Crossbill"=>"Loxia leucoptera", -"White-tailed Eagle"=>"Haliaeetus albicilla", -"Atlantic Murre"=>"Uria aalge", -"Garganey"=>"Anas querquedula", -"Black Redstart"=>"Phoenicurus ochruros", -"Common Scoter"=>"Melanitta nigra", -"Rock Pipit"=>"Anthus petrosus", -"Lesser Spotted Eagle"=>"Aquila pomarina", -"Cattle Egret"=>"Bubulcus ibis", -"White-winged Black Tern"=>"Chlidonias leucopterus", -"Black Stork"=>"Ciconia nigra", -"Mediterranean Gull"=>"Larus melanocephalus", -"Black Kite"=>"Milvus migrans", -"Yellow Wagtail"=>"Motacilla flavissima", -"Red-necked Grebe"=>"Podiceps grisegena", -"Gull-billed Tern"=>"Gelochelidon nilotica", -"Pectoral Sandpiper"=>"Calidris melanotos", -"Barred Warbler"=>"Sylvia nisoria", -"Red-throated Pipit"=>"Anthus cervinus", -"Grey Wagtail"=>"Motacilla cinerea", -"Richard`s Pipit"=>"Anthus richardi", -"Black Woodpecker"=>"Dryocopus martius", -"Little Ringed Plover"=>"Charadrius dubius", -"Whiskered Tern"=>"Chlidonias hybrida", -"Lesser Redpoll"=>"Carduelis cabaret", -"Pallas' Bunting"=>"Emberiza pallasi", -"Ferruginous Duck"=>"Aythya nyroca", -"Whistling Swan"=>"Cygnus columbianus", -"Black Brant"=>"Branta nigricans", -"Marbled Teal"=>"Marmaronetta angustirostris", -"Canvasback"=>"Aythya valisineria", -"Redhead"=>"Aythya americana", -"Lesser Scaup"=>"Aythya affinis", -"Steller`s Eider"=>"Polysticta stelleri", -"Spectacled Eider"=>"Somateria fischeri", -"Harlequin Duck"=>"Histronicus histrionicus", -"Black Scoter"=>"Melanitta americana", -"Surf Scoter"=>"Melanitta perspicillata", -"Barrow`s Goldeneye"=>"Bucephala islandica", -"Falcated Duck"=>"Anas falcata", -"American Wigeon"=>"Anas americana", -"Blue-winged Teal"=>"Anas discors", -"American Black Duck"=>"Anas rubripes", -"Baikal Teal"=>"Anas formosa", -"Green-Winged Teal"=>"Anas carolinensis", -"Hazel Grouse"=>"Bonasa bonasia", -"Rock Partridge"=>"Alectoris graeca", -"Red-legged Partridge"=>"Alectoris rufa", -"Yellow-billed Loon"=>"Gavia adamsii", -"Cory`s Shearwater"=>"Calonectris borealis", -"Madeiran Storm-Petrel"=>"Oceanodroma castro", -"Great White Pelican"=>"Pelecanus onocrotalus", -"Dalmatian Pelican"=>"Pelecanus crispus", -"American Bittern"=>"Botaurus lentiginosus", -"Glossy Ibis"=>"Plegadis falcinellus", -"Spanish Imperial Eagle"=>"Aquila adalberti", -"Lesser Kestrel"=>"Falco naumanni", -"Houbara Bustard"=>"Chlamydotis undulata", -"Crab-Plover"=>"Dromas ardeola", -"Cream-coloured Courser"=>"Cursorius cursor", -"Collared Pratincole"=>"Glareola pratincola", -"Black-winged Pratincole"=>"Glareola nordmanni", -"Killdeer"=>"Charadrius vociferus", -"Lesser Sand Plover"=>"Charadrius mongolus", -"Greater Sand Plover"=>"Charadrius leschenaultii", -"Caspian Plover"=>"Charadrius asiaticus", -"American Golden Plover"=>"Pluvialis dominica", -"Pacific Golden Plover"=>"Pluvialis fulva", -"Sharp-tailed Sandpiper"=>"Calidris acuminata", -"Broad-billed Sandpiper"=>"Limicola falcinellus", -"Spoon-Billed Sandpiper"=>"Eurynorhynchus pygmaeus", -"Short-Billed Dowitcher"=>"Limnodromus griseus", -"Long-billed Dowitcher"=>"Limnodromus scolopaceus", -"Hudsonian Godwit"=>"Limosa haemastica", -"Little Curlew"=>"Numenius minutus", -"Lesser Yellowlegs"=>"Tringa flavipes", -"Wilson`s Phalarope"=>"Phalaropus tricolor", -"Pallas`s Gull"=>"Larus ichthyaetus", -"Laughing Gull"=>"Larus atricilla", -"Franklin`s Gull"=>"Larus pipixcan", -"Bonaparte`s Gull"=>"Larus philadelphia", -"Ring-billed Gull"=>"Larus delawarensis", -"American Herring Gull"=>"Larus smithsonianus", -"Caspian Gull"=>"Larus cachinnans", -"Ivory Gull"=>"Pagophila eburnea", -"Royal Tern"=>"Sterna maxima", -"Brünnich`s Murre"=>"Uria lomvia", -"Crested Auklet"=>"Aethia cristatella", -"Parakeet Auklet"=>"Cyclorrhynchus psittacula", -"Tufted Puffin"=>"Lunda cirrhata", -"Laughing Dove"=>"Streptopelia senegalensis", -"Great Spotted Cuckoo"=>"Clamator glandarius", -"Great Grey Owl"=>"Strix nebulosa", -"Tengmalm`s Owl"=>"Aegolius funereus", -"Red-Necked Nightjar"=>"Caprimulgus ruficollis", -"Chimney Swift"=>"Chaetura pelagica", -"Green Bea-Eater"=>"Merops orientalis", -"Grey-headed Woodpecker"=>"Picus canus", -"Lesser Short-Toed Lark"=>"Calandrella rufescens", -"Eurasian Crag Martin"=>"Hirundo rupestris", -"Red-rumped Swallow"=>"Cecropis daurica", -"Blyth`s Pipit"=>"Anthus godlewskii", -"Pechora Pipit"=>"Anthus gustavi", -"Grey-headed Wagtail"=>"Motacilla thunbergi", -"Yellow-Headed Wagtail"=>"Motacilla lutea", -"White-throated Dipper"=>"Cinclus cinclus", -"Rufous-Tailed Scrub Robin"=>"Cercotrichas galactotes", -"Thrush Nightingale"=>"Luscinia luscinia", -"White-throated Robin"=>"Irania gutturalis", -"Caspian Stonechat"=>"Saxicola maura variegata", -"Western Black-eared Wheatear"=>"Oenanthe hispanica", -"Rufous-tailed Rock Thrush"=>"Monticola saxatilis", -"Red-throated Thrush/Black-throated"=>"Turdus ruficollis", -"American Robin"=>"Turdus migratorius", -"Zitting Cisticola"=>"Cisticola juncidis", -"Lanceolated Warbler"=>"Locustella lanceolata", -"River Warbler"=>"Locustella fluviatilis", -"Blyth`s Reed Warbler"=>"Acrocephalus dumetorum", -"Caspian Reed Warbler"=>"Acrocephalus fuscus", -"Aquatic Warbler"=>"Acrocephalus paludicola", -"Booted Warbler"=>"Acrocephalus caligatus", -"Marmora's Warbler"=>"Sylvia sarda", -"Dartford Warbler"=>"Sylvia undata", -"Subalpine Warbler"=>"Sylvia cantillans", -"Ménétries's Warbler"=>"Sylvia mystacea", -"Rüppel's Warbler"=>"Sylvia rueppelli", -"Asian Desert Warbler"=>"Sylvia nana", -"Western Orphean Warbler"=>"Sylvia hortensis hortensis", -"Arctic Warbler"=>"Phylloscopus borealis", -"Radde`s Warbler"=>"Phylloscopus schwarzi", -"Western Bonelli`s Warbler"=>"Phylloscopus bonelli", -"Red-breasted Flycatcher"=>"Ficedula parva", -"Eurasian Penduline Tit"=>"Remiz pendulinus", -"Daurian Shrike"=>"Lanius isabellinus", -"Long-Tailed Shrike"=>"Lanius schach", -"Lesser Grey Shrike"=>"Lanius minor", -"Southern Grey Shrike"=>"Lanius meridionalis", -"Masked Shrike"=>"Lanius nubicus", -"Spotted Nutcracker"=>"Nucifraga caryocatactes", -"Daurian Jackdaw"=>"Corvus dauuricus", -"Purple-Backed Starling"=>"Sturnus sturninus", -"Red-Fronted Serin"=>"Serinus pusillus", -"Arctic Redpoll"=>"Carduelis hornemanni", -"Scottish Crossbill"=>"Loxia scotica", -"Parrot Crossbill"=>"Loxia pytyopsittacus", -"Black-faced Bunting"=>"Emberiza spodocephala", -"Pink-footed Goose"=>"Anser brachyrhynchus", -"Black-winged Kite"=>"Elanus caeruleus", -"European Bee-eater"=>"Merops apiaster", -"Sabine`s Gull"=>"Larus sabini", -"Sooty Shearwater"=>"Puffinus griseus", -"Lesser Canada Goose"=>"Branta hutchinsii", -"Ring-necked Duck"=>"Aythya collaris", -"Greater Flamingo"=>"Phoenicopterus roseus", -"Iberian Chiffchaff"=>"Phylloscopus ibericus", -"Ashy-headed Wagtail"=>"Motacilla cinereocapilla", -"Stilt Sandpiper"=>"Calidris himantopus", -"Siberian Stonechat"=>"Saxicola maurus", -"Greater Yellowlegs"=>"Tringa melanoleuca", -"Forster`s Tern"=>"Sterna forsteri", -"Dusky Warbler"=>"Phylloscopus fuscatus", -"Cirl Bunting"=>"Emberiza cirlus", -"Olive-backed Pipit"=>"Anthus hodgsoni", -"Sociable Lapwing"=>"Vanellus gregarius", -"Spotted Sandpiper"=>"Actitis macularius", -"Baird`s Sandpiper"=>"Calidris bairdii", -"Rustic Bunting"=>"Emberiza rustica", -"Yellow-browed Bunting"=>"Emberiza chrysophrys", -"Great Shearwater"=>"Puffinus gravis", -"Bonelli`s Eagle"=>"Aquila fasciata", -"Calandra Lark"=>"Melanocorypha calandra", -"Sardinian Warbler"=>"Sylvia melanocephala", -"Ross's Gull"=>"Larus roseus", -"Yellow-Breasted Bunting"=>"Emberiza aureola", -"Pine Bunting"=>"Emberiza leucocephalos", -"Black Guillemot"=>"Cepphus grylle", -"Pied-billed Grebe"=>"Podilymbus podiceps", -"Soft-plumaged Petrel"=>"Pterodroma mollis", -"Bulwer's Petrel"=>"Bulweria bulwerii", -"White-Faced Storm-Petrel"=>"Pelagodroma marina", -"Pallas’s Fish Eagle"=>"Haliaeetus leucoryphus", -"Sandhill Crane"=>"Grus canadensis", -"Macqueen’s Bustard"=>"Chlamydotis macqueenii", -"White-tailed Lapwing"=>"Vanellus leucurus", -"Great Knot"=>"Calidris tenuirostris", -"Semipalmated Sandpiper"=>"Calidris pusilla", -"Red-necked Stint"=>"Calidris ruficollis", -"Slender-billed Curlew"=>"Numenius tenuirostris", -"Bridled Tern"=>"Onychoprion anaethetus", -"Pallas’s Sandgrouse"=>"Syrrhaptes paradoxus", -"European Scops Owl"=>"Otus scops", -"Northern Hawk Owl"=>"Surnia ulula", -"White-Throated Needletail"=>"Hirundapus caudacutus", -"Belted Kingfisher"=>"Ceryle alcyon", -"Blue-cheeked Bee-eater"=>"Merops persicus", -"Black-headed Wagtail"=>"Motacilla feldegg", -"Northern Mockingbird"=>"Mimus polyglottos", -"Alpine Accentor"=>"Prunella collaris", -"Red-flanked Bluetail"=>"Tarsiger cyanurus", -"Isabelline Wheatear"=>"Oenanthe isabellina", -"Pied Wheatear"=>"Oenanthe pleschanka", -"Eastern Black-eared Wheatear"=>"Oenanthe melanoleuca", -"Desert Wheatear"=>"Oenanthe deserti", -"White`s Thrush"=>"Zoothera aurea", -"Siberian Thrush"=>"Zoothera sibirica", -"Eyebrowed Thrush"=>"Turdus obscurus", -"Dusky Thrush"=>"Turdus eunomus", -"Black-throated Thrush"=>"Turdus atrogularis", -"Pallas`s Grasshopper Warbler"=>"Locustella certhiola", -"Spectacled Warbler"=>"Sylvia conspicillata", -"Two-barred Warbler"=>"Phylloscopus plumbeitarsus", -"Eastern Bonelli’s Warbler"=>"Phylloscopus orientalis", -"Collared Flycatcher"=>"Ficedula albicollis", -"Wallcreeper"=>"Tichodroma muraria", -"Turkestan Shrike"=>"Lanius phoenicuroides", -"Steppe Grey Shrike"=>"Lanius pallidirostris", -"Spanish Sparrow"=>"Passer hispaniolensis", -"Red-eyed Vireo"=>"Vireo olivaceus", -"Myrtle Warbler"=>"Dendroica coronata", -"White-crowned Sparrow"=>"Zonotrichia leucophrys", -"White-throated Sparrow"=>"Zonotrichia albicollis", -"Cretzschmar`s Bunting"=>"Emberiza caesia", -"Chestnut Bunting"=>"Emberiza rutila", -"Red-headed Bunting"=>"Emberiza bruniceps", -"Black-headed Bunting"=>"Emberiza melanocephala", -"Indigo Bunting"=>"Passerina cyanea", -"Balearic Woodchat Shrike"=>"Lanius senator badius", -"Demoiselle Crane"=>"Grus virgo", -"Chough"=>"Pyrrhocorax pyrrhocorax", -"Red-Billed Chough"=>"Pyrrhocorax graculus", -"Elegant Tern"=>"Sterna elegans", -"Chukar"=>"Alectoris chukar", -"Yellow-Billed Cuckoo"=>"Coccyzus americanus", -"American Sandwich Tern"=>"Sterna sandvicensis acuflavida", -"Olive-Tree Warbler"=>"Hippolais olivetorum", -"Eastern Olivaceous Warbler"=>"Acrocephalus pallidus", -"Indian Cormorant"=>"Phalacrocorax fuscicollis", -"Spur-Winged Lapwing"=>"Vanellus spinosus", -"Yelkouan Shearwater"=>"Puffinus yelkouan", -"Trumpeter Finch"=>"Bucanetes githagineus", -"Red Grouse"=>"Lagopus scoticus", -"Rock Ptarmigan"=>"Lagopus mutus", -"Long-Tailed Cormorant"=>"Phalacrocorax africanus", -"Double-crested Cormorant"=>"Phalacrocorax auritus", -"Magnificent Frigatebird"=>"Fregata magnificens", -"Naumann's Thrush"=>"Turdus naumanni", -"Oriental Pratincole"=>"Glareola maldivarum", -"Bufflehead"=>"Bucephala albeola", -"Snowfinch"=>"Montifrigilla nivalis", -"Ural owl"=>"Strix uralensis", -"Spanish Wagtail"=>"Motacilla iberiae", -"Song Sparrow"=>"Melospiza melodia", -"Rock Bunting"=>"Emberiza cia", -"Siberian Rubythroat"=>"Luscinia calliope", -"Pallid Swift"=>"Apus pallidus", -"Eurasian Pygmy Owl"=>"Glaucidium passerinum", -"Madeira Little Shearwater"=>"Puffinus baroli", -"House Finch"=>"Carpodacus mexicanus", -"Green Heron"=>"Butorides virescens", -"Solitary Sandpiper"=>"Tringa solitaria", -"Heuglin's Gull"=>"Larus heuglini" -); - -foreach ($items as $key=>$value) { - if (strpos(strtolower($key), $q) !== false) { - echo "$key|$value\n"; - } -} - -?> \ No newline at end of file diff --git a/plugins/Autocomplete/jquery-autocomplete/demo/search.phps b/plugins/Autocomplete/jquery-autocomplete/demo/search.phps deleted file mode 100644 index 03c0c0eab..000000000 --- a/plugins/Autocomplete/jquery-autocomplete/demo/search.phps +++ /dev/null @@ -1,578 +0,0 @@ -Bittern"=>"Botaurus stellaris", -"Little Grebe"=>"Tachybaptus ruficollis", -"Black-necked Grebe"=>"Podiceps nigricollis", -"Little Bittern"=>"Ixobrychus minutus", -"Black-crowned Night Heron"=>"Nycticorax nycticorax", -"Purple Heron"=>"Ardea purpurea", -"White Stork"=>"Ciconia ciconia", -"Spoonbill"=>"Platalea leucorodia", -"Red-crested Pochard"=>"Netta rufina", -"Common Eider"=>"Somateria mollissima", -"Red Kite"=>"Milvus milvus", -"Hen Harrier"=>"Circus cyaneus", -"Montagu`s Harrier"=>"Circus pygargus", -"Black Grouse"=>"Tetrao tetrix", -"Grey Partridge"=>"Perdix perdix", -"Spotted Crake"=>"Porzana porzana", -"Corncrake"=>"Crex crex", -"Common Crane"=>"Grus grus", -"Avocet"=>"Recurvirostra avosetta", -"Stone Curlew"=>"Burhinus oedicnemus", -"Common Ringed Plover"=>"Charadrius hiaticula", -"Kentish Plover"=>"Charadrius alexandrinus", -"Ruff"=>"Philomachus pugnax", -"Common Snipe"=>"Gallinago gallinago", -"Black-tailed Godwit"=>"Limosa limosa", -"Common Redshank"=>"Tringa totanus", -"Sandwich Tern"=>"Sterna sandvicensis", -"Common Tern"=>"Sterna hirundo", -"Arctic Tern"=>"Sterna paradisaea", -"Little Tern"=>"Sternula albifrons", -"Black Tern"=>"Chlidonias niger", -"Barn Owl"=>"Tyto alba", -"Little Owl"=>"Athene noctua", -"Short-eared Owl"=>"Asio flammeus", -"European Nightjar"=>"Caprimulgus europaeus", -"Common Kingfisher"=>"Alcedo atthis", -"Eurasian Hoopoe"=>"Upupa epops", -"Eurasian Wryneck"=>"Jynx torquilla", -"European Green Woodpecker"=>"Picus viridis", -"Crested Lark"=>"Galerida cristata", -"White-headed Duck"=>"Oxyura leucocephala", -"Pale-bellied Brent Goose"=>"Branta hrota", -"Tawny Pipit"=>"Anthus campestris", -"Whinchat"=>"Saxicola rubetra", -"European Stonechat"=>"Saxicola rubicola", -"Northern Wheatear"=>"Oenanthe oenanthe", -"Savi`s Warbler"=>"Locustella luscinioides", -"Sedge Warbler"=>"Acrocephalus schoenobaenus", -"Great Reed Warbler"=>"Acrocephalus arundinaceus", -"Bearded Reedling"=>"Panurus biarmicus", -"Red-backed Shrike"=>"Lanius collurio", -"Great Grey Shrike"=>"Lanius excubitor", -"Woodchat Shrike"=>"Lanius senator", -"Common Raven"=>"Corvus corax", -"Yellowhammer"=>"Emberiza citrinella", -"Ortolan Bunting"=>"Emberiza hortulana", -"Corn Bunting"=>"Emberiza calandra", -"Great Cormorant"=>"Phalacrocorax carbo", -"Hawfinch"=>"Coccothraustes coccothraustes", -"Common Shelduck"=>"Tadorna tadorna", -"Bluethroat"=>"Luscinia svecica", -"Grey Heron"=>"Ardea cinerea", -"Barn Swallow"=>"Hirundo rustica", -"Hooded Crow"=>"Corvus cornix", -"Dunlin"=>"Calidris alpina", -"Eurasian Pied Flycatcher"=>"Ficedula hypoleuca", -"Eurasian Nuthatch"=>"Sitta europaea", -"Short-toed Tree Creeper"=>"Certhia brachydactyla", -"Wood Lark"=>"Lullula arborea", -"Tree Pipit"=>"Anthus trivialis", -"Eurasian Hobby"=>"Falco subbuteo", -"Marsh Warbler"=>"Acrocephalus palustris", -"Wood Sandpiper"=>"Tringa glareola", -"Tawny Owl"=>"Strix aluco", -"Lesser Whitethroat"=>"Sylvia curruca", -"Barnacle Goose"=>"Branta leucopsis", -"Common Goldeneye"=>"Bucephala clangula", -"Western Marsh Harrier"=>"Circus aeruginosus", -"Common Buzzard"=>"Buteo buteo", -"Sanderling"=>"Calidris alba", -"Little Gull"=>"Larus minutus", -"Eurasian Magpie"=>"Pica pica", -"Willow Warbler"=>"Phylloscopus trochilus", -"Wood Warbler"=>"Phylloscopus sibilatrix", -"Great Crested Grebe"=>"Podiceps cristatus", -"Eurasian Jay"=>"Garrulus glandarius", -"Common Redstart"=>"Phoenicurus phoenicurus", -"Blue-headed Wagtail"=>"Motacilla flava", -"Common Swift"=>"Apus apus", -"Marsh Tit"=>"Poecile palustris", -"Goldcrest"=>"Regulus regulus", -"European Golden Plover"=>"Pluvialis apricaria", -"Eurasian Bullfinch"=>"Pyrrhula pyrrhula", -"Common Whitethroat"=>"Sylvia communis", -"Meadow Pipit"=>"Anthus pratensis", -"Greylag Goose"=>"Anser anser", -"Spotted Flycatcher"=>"Muscicapa striata", -"European Greenfinch"=>"Carduelis chloris", -"Common Greenshank"=>"Tringa nebularia", -"Great Spotted Woodpecker"=>"Dendrocopos major", -"Greater Canada Goose"=>"Branta canadensis", -"Mistle Thrush"=>"Turdus viscivorus", -"Great Black-backed Gull"=>"Larus marinus", -"Goosander"=>"Mergus merganser", -"Great Egret"=>"Casmerodius albus", -"Northern Goshawk"=>"Accipiter gentilis", -"Dunnock"=>"Prunella modularis", -"Stock Dove"=>"Columba oenas", -"Common Wood Pigeon"=>"Columba palumbus", -"Eurasian Woodcock"=>"Scolopax rusticola", -"House Sparrow"=>"Passer domesticus", -"Common House Martin"=>"Delichon urbicum", -"Red Knot"=>"Calidris canutus", -"Western Jackdaw"=>"Corvus monedula", -"Brambling"=>"Fringilla montifringilla", -"Northern Lapwing"=>"Vanellus vanellus", -"European Reed Warbler"=>"Acrocephalus scirpaceus", -"Lesser Black-backed Gull"=>"Larus fuscus", -"Little Egret"=>"Egretta garzetta", -"Little Stint"=>"Calidris minuta", -"Common Linnet"=>"Carduelis cannabina", -"Mute Swan"=>"Cygnus olor", -"Common Cuckoo"=>"Cuculus canorus", -"Black-headed Gull"=>"Larus ridibundus", -"Greater White-fronted Goose"=>"Anser albifrons", -"Great Tit"=>"Parus major", -"Redwing"=>"Turdus iliacus", -"Gadwall"=>"Anas strepera", -"Fieldfare"=>"Turdus pilaris", -"Tufted Duck"=>"Aythya fuligula", -"Crested Tit"=>"Lophophanes cristatus", -"Willow Tit"=>"Poecile montanus", -"Eurasian Coot"=>"Fulica atra", -"Common Blackbird"=>"Turdus merula", -"Smew"=>"Mergus albellus", -"Common Sandpiper"=>"Actitis hypoleucos", -"Sand Martin"=>"Riparia riparia", -"Purple Sandpiper"=>"Calidris maritima", -"Northern Pintail"=>"Anas acuta", -"Blue Tit"=>"Cyanistes caeruleus", -"European Goldfinch"=>"Carduelis carduelis", -"Eurasian Whimbrel"=>"Numenius phaeopus", -"Common Reed Bunting"=>"Emberiza schoeniclus", -"Eurasian Tree Sparrow"=>"Passer montanus", -"Rook"=>"Corvus frugilegus", -"European Robin"=>"Erithacus rubecula", -"Bar-tailed Godwit"=>"Limosa lapponica", -"Dark-bellied Brent Goose"=>"Branta bernicla", -"Eurasian Oystercatcher"=>"Haematopus ostralegus", -"Eurasian Siskin"=>"Carduelis spinus", -"Northern Shoveler"=>"Anas clypeata", -"Eurasian Wigeon"=>"Anas penelope", -"Eurasian Sparrow Hawk"=>"Accipiter nisus", -"Icterine Warbler"=>"Hippolais icterina", -"Common Starling"=>"Sturnus vulgaris", -"Long-tailed Tit"=>"Aegithalos caudatus", -"Ruddy Turnstone"=>"Arenaria interpres", -"Mew Gull"=>"Larus canus", -"Common Pochard"=>"Aythya ferina", -"Common Chiffchaff"=>"Phylloscopus collybita", -"Greater Scaup"=>"Aythya marila", -"Common Kestrel"=>"Falco tinnunculus", -"Garden Warbler"=>"Sylvia borin", -"Eurasian Collared Dove"=>"Streptopelia decaocto", -"Eurasian Skylark"=>"Alauda arvensis", -"Common Chaffinch"=>"Fringilla coelebs", -"Common Moorhen"=>"Gallinula chloropus", -"Water Pipit"=>"Anthus spinoletta", -"Mallard"=>"Anas platyrhynchos", -"Winter Wren"=>"Troglodytes troglodytes", -"Common Teal"=>"Anas crecca", -"Green Sandpiper"=>"Tringa ochropus", -"White Wagtail"=>"Motacilla alba", -"Eurasian Curlew"=>"Numenius arquata", -"Song Thrush"=>"Turdus philomelos", -"European Herring Gull"=>"Larus argentatus", -"Grey Plover"=>"Pluvialis squatarola", -"Carrion Crow"=>"Corvus corone", -"Coal Tit"=>"Periparus ater", -"Spotted Redshank"=>"Tringa erythropus", -"Blackcap"=>"Sylvia atricapilla", -"Egyptian Vulture"=>"Neophron percnopterus", -"Razorbill"=>"Alca torda", -"Alpine Swift"=>"Apus melba", -"Long-legged Buzzard"=>"Buteo rufinus", -"Audouin`s Gull"=>"Larus audouinii", -"Balearic Shearwater"=>"Puffinus mauretanicus", -"Upland Sandpiper"=>"Bartramia longicauda", -"Greater Spotted Eagle"=>"Aquila clanga", -"Ring Ouzel"=>"Turdus torquatus", -"Yellow-browed Warbler"=>"Phylloscopus inornatus", -"Blue Rock Thrush"=>"Monticola solitarius", -"Buff-breasted Sandpiper"=>"Tryngites subruficollis", -"Jack Snipe"=>"Lymnocryptes minimus", -"White-rumped Sandpiper"=>"Calidris fuscicollis", -"Ruddy Shelduck"=>"Tadorna ferruginea", -"Cetti's Warbler"=>"Cettia cetti", -"Citrine Wagtail"=>"Motacilla citreola", -"Roseate Tern"=>"Sterna dougallii", -"Black-legged Kittiwake"=>"Rissa tridactyla", -"Pygmy Cormorant"=>"Phalacrocorax pygmeus", -"Booted Eagle"=>"Aquila pennata", -"Lesser White-fronted Goose"=>"Anser erythropus", -"Little Bunting"=>"Emberiza pusilla", -"Eleonora's Falcon"=>"Falco eleonorae", -"European Serin"=>"Serinus serinus", -"Twite"=>"Carduelis flavirostris", -"Yellow-legged Gull"=>"Larus michahellis", -"Gyr Falcon"=>"Falco rusticolus", -"Greenish Warbler"=>"Phylloscopus trochiloides", -"Red-necked Phalarope"=>"Phalaropus lobatus", -"Mealy Redpoll"=>"Carduelis flammea", -"Glaucous Gull"=>"Larus hyperboreus", -"Great Skua"=>"Stercorarius skua", -"Great Bustard"=>"Otis tarda", -"Velvet Scoter"=>"Melanitta fusca", -"Pine Grosbeak"=>"Pinicola enucleator", -"House Crow"=>"Corvus splendens", -"Hume`s Leaf Warbler"=>"Phylloscopus humei", -"Great Northern Loon"=>"Gavia immer", -"Long-tailed Duck"=>"Clangula hyemalis", -"Lapland Longspur"=>"Calcarius lapponicus", -"Northern Gannet"=>"Morus bassanus", -"Eastern Imperial Eagle"=>"Aquila heliaca", -"Little Auk"=>"Alle alle", -"Lesser Spotted Woodpecker"=>"Dendrocopos minor", -"Iceland Gull"=>"Larus glaucoides", -"Parasitic Jaeger"=>"Stercorarius parasiticus", -"Bewick`s Swan"=>"Cygnus bewickii", -"Little Bustard"=>"Tetrax tetrax", -"Little Crake"=>"Porzana parva", -"Baillon`s Crake"=>"Porzana pusilla", -"Long-tailed Jaeger"=>"Stercorarius longicaudus", -"King Eider"=>"Somateria spectabilis", -"Greater Short-toed Lark"=>"Calandrella brachydactyla", -"Houbara Bustard"=>"Chlamydotis undulata", -"Curlew Sandpiper"=>"Calidris ferruginea", -"Common Crossbill"=>"Loxia curvirostra", -"European Shag"=>"Phalacrocorax aristotelis", -"Horned Grebe"=>"Podiceps auritus", -"Common Quail"=>"Coturnix coturnix", -"Bearded Vulture"=>"Gypaetus barbatus", -"Lanner Falcon"=>"Falco biarmicus", -"Middle Spotted Woodpecker"=>"Dendrocopos medius", -"Pomarine Jaeger"=>"Stercorarius pomarinus", -"Red-breasted Merganser"=>"Mergus serrator", -"Eurasian Black Vulture"=>"Aegypius monachus", -"Eurasian Dotterel"=>"Charadrius morinellus", -"Common Nightingale"=>"Luscinia megarhynchos", -"Northern willow warbler"=>"Phylloscopus trochilus acredula", -"Manx Shearwater"=>"Puffinus puffinus", -"Northern Fulmar"=>"Fulmarus glacialis", -"Eurasian Eagle Owl"=>"Bubo bubo", -"Orphean Warbler"=>"Sylvia hortensis", -"Melodious Warbler"=>"Hippolais polyglotta", -"Pallas's Leaf Warbler"=>"Phylloscopus proregulus", -"Atlantic Puffin"=>"Fratercula arctica", -"Black-throated Loon"=>"Gavia arctica", -"Bohemian Waxwing"=>"Bombycilla garrulus", -"Marsh Sandpiper"=>"Tringa stagnatilis", -"Great Snipe"=>"Gallinago media", -"Squacco Heron"=>"Ardeola ralloides", -"Long-eared Owl"=>"Asio otus", -"Caspian Tern"=>"Hydroprogne caspia", -"Red-breasted Goose"=>"Branta ruficollis", -"Red-throated Loon"=>"Gavia stellata", -"Common Rosefinch"=>"Carpodacus erythrinus", -"Red-footed Falcon"=>"Falco vespertinus", -"Ross's Goose"=>"Anser rossii", -"Red Phalarope"=>"Phalaropus fulicarius", -"Pied Wagtail"=>"Motacilla yarrellii", -"Rose-coloured Starling"=>"Sturnus roseus", -"Rough-legged Buzzard"=>"Buteo lagopus", -"Saker Falcon"=>"Falco cherrug", -"European Roller"=>"Coracias garrulus", -"Short-toed Eagle"=>"Circaetus gallicus", -"Peregrine Falcon"=>"Falco peregrinus", -"Merlin"=>"Falco columbarius", -"Snow Goose"=>"Anser caerulescens", -"Snowy Owl"=>"Bubo scandiacus", -"Snow Bunting"=>"Plectrophenax nivalis", -"Common Grasshopper Warbler"=>"Locustella naevia", -"Golden Eagle"=>"Aquila chrysaetos", -"Black-winged Stilt"=>"Himantopus himantopus", -"Steppe Eagle"=>"Aquila nipalensis", -"Pallid Harrier"=>"Circus macrourus", -"European Storm-petrel"=>"Hydrobates pelagicus", -"Horned Lark"=>"Eremophila alpestris", -"Eurasian Treecreeper"=>"Certhia familiaris", -"Taiga Bean Goose"=>"Anser fabalis", -"Temminck`s Stint"=>"Calidris temminckii", -"Terek Sandpiper"=>"Xenus cinereus", -"Tundra Bean Goose"=>"Anser serrirostris", -"European Turtle Dove"=>"Streptopelia turtur", -"Leach`s Storm-petrel"=>"Oceanodroma leucorhoa", -"Eurasian Griffon Vulture"=>"Gyps fulvus", -"Paddyfield Warbler"=>"Acrocephalus agricola", -"Osprey"=>"Pandion haliaetus", -"Firecrest"=>"Regulus ignicapilla", -"Water Rail"=>"Rallus aquaticus", -"European Honey Buzzard"=>"Pernis apivorus", -"Eurasian Golden Oriole"=>"Oriolus oriolus", -"Whooper Swan"=>"Cygnus cygnus", -"Two-barred Crossbill"=>"Loxia leucoptera", -"White-tailed Eagle"=>"Haliaeetus albicilla", -"Atlantic Murre"=>"Uria aalge", -"Garganey"=>"Anas querquedula", -"Black Redstart"=>"Phoenicurus ochruros", -"Common Scoter"=>"Melanitta nigra", -"Rock Pipit"=>"Anthus petrosus", -"Lesser Spotted Eagle"=>"Aquila pomarina", -"Cattle Egret"=>"Bubulcus ibis", -"White-winged Black Tern"=>"Chlidonias leucopterus", -"Black Stork"=>"Ciconia nigra", -"Mediterranean Gull"=>"Larus melanocephalus", -"Black Kite"=>"Milvus migrans", -"Yellow Wagtail"=>"Motacilla flavissima", -"Red-necked Grebe"=>"Podiceps grisegena", -"Gull-billed Tern"=>"Gelochelidon nilotica", -"Pectoral Sandpiper"=>"Calidris melanotos", -"Barred Warbler"=>"Sylvia nisoria", -"Red-throated Pipit"=>"Anthus cervinus", -"Grey Wagtail"=>"Motacilla cinerea", -"Richard`s Pipit"=>"Anthus richardi", -"Black Woodpecker"=>"Dryocopus martius", -"Little Ringed Plover"=>"Charadrius dubius", -"Whiskered Tern"=>"Chlidonias hybrida", -"Lesser Redpoll"=>"Carduelis cabaret", -"Pallas' Bunting"=>"Emberiza pallasi", -"Ferruginous Duck"=>"Aythya nyroca", -"Whistling Swan"=>"Cygnus columbianus", -"Black Brant"=>"Branta nigricans", -"Marbled Teal"=>"Marmaronetta angustirostris", -"Canvasback"=>"Aythya valisineria", -"Redhead"=>"Aythya americana", -"Lesser Scaup"=>"Aythya affinis", -"Steller`s Eider"=>"Polysticta stelleri", -"Spectacled Eider"=>"Somateria fischeri", -"Harlequin Duck"=>"Histronicus histrionicus", -"Black Scoter"=>"Melanitta americana", -"Surf Scoter"=>"Melanitta perspicillata", -"Barrow`s Goldeneye"=>"Bucephala islandica", -"Falcated Duck"=>"Anas falcata", -"American Wigeon"=>"Anas americana", -"Blue-winged Teal"=>"Anas discors", -"American Black Duck"=>"Anas rubripes", -"Baikal Teal"=>"Anas formosa", -"Green-Winged Teal"=>"Anas carolinensis", -"Hazel Grouse"=>"Bonasa bonasia", -"Rock Partridge"=>"Alectoris graeca", -"Red-legged Partridge"=>"Alectoris rufa", -"Yellow-billed Loon"=>"Gavia adamsii", -"Cory`s Shearwater"=>"Calonectris borealis", -"Madeiran Storm-Petrel"=>"Oceanodroma castro", -"Great White Pelican"=>"Pelecanus onocrotalus", -"Dalmatian Pelican"=>"Pelecanus crispus", -"American Bittern"=>"Botaurus lentiginosus", -"Glossy Ibis"=>"Plegadis falcinellus", -"Spanish Imperial Eagle"=>"Aquila adalberti", -"Lesser Kestrel"=>"Falco naumanni", -"Houbara Bustard"=>"Chlamydotis undulata", -"Crab-Plover"=>"Dromas ardeola", -"Cream-coloured Courser"=>"Cursorius cursor", -"Collared Pratincole"=>"Glareola pratincola", -"Black-winged Pratincole"=>"Glareola nordmanni", -"Killdeer"=>"Charadrius vociferus", -"Lesser Sand Plover"=>"Charadrius mongolus", -"Greater Sand Plover"=>"Charadrius leschenaultii", -"Caspian Plover"=>"Charadrius asiaticus", -"American Golden Plover"=>"Pluvialis dominica", -"Pacific Golden Plover"=>"Pluvialis fulva", -"Sharp-tailed Sandpiper"=>"Calidris acuminata", -"Broad-billed Sandpiper"=>"Limicola falcinellus", -"Spoon-Billed Sandpiper"=>"Eurynorhynchus pygmaeus", -"Short-Billed Dowitcher"=>"Limnodromus griseus", -"Long-billed Dowitcher"=>"Limnodromus scolopaceus", -"Hudsonian Godwit"=>"Limosa haemastica", -"Little Curlew"=>"Numenius minutus", -"Lesser Yellowlegs"=>"Tringa flavipes", -"Wilson`s Phalarope"=>"Phalaropus tricolor", -"Pallas`s Gull"=>"Larus ichthyaetus", -"Laughing Gull"=>"Larus atricilla", -"Franklin`s Gull"=>"Larus pipixcan", -"Bonaparte`s Gull"=>"Larus philadelphia", -"Ring-billed Gull"=>"Larus delawarensis", -"American Herring Gull"=>"Larus smithsonianus", -"Caspian Gull"=>"Larus cachinnans", -"Ivory Gull"=>"Pagophila eburnea", -"Royal Tern"=>"Sterna maxima", -"Brünnich`s Murre"=>"Uria lomvia", -"Crested Auklet"=>"Aethia cristatella", -"Parakeet Auklet"=>"Cyclorrhynchus psittacula", -"Tufted Puffin"=>"Lunda cirrhata", -"Laughing Dove"=>"Streptopelia senegalensis", -"Great Spotted Cuckoo"=>"Clamator glandarius", -"Great Grey Owl"=>"Strix nebulosa", -"Tengmalm`s Owl"=>"Aegolius funereus", -"Red-Necked Nightjar"=>"Caprimulgus ruficollis", -"Chimney Swift"=>"Chaetura pelagica", -"Green Bea-Eater"=>"Merops orientalis", -"Grey-headed Woodpecker"=>"Picus canus", -"Lesser Short-Toed Lark"=>"Calandrella rufescens", -"Eurasian Crag Martin"=>"Hirundo rupestris", -"Red-rumped Swallow"=>"Cecropis daurica", -"Blyth`s Pipit"=>"Anthus godlewskii", -"Pechora Pipit"=>"Anthus gustavi", -"Grey-headed Wagtail"=>"Motacilla thunbergi", -"Yellow-Headed Wagtail"=>"Motacilla lutea", -"White-throated Dipper"=>"Cinclus cinclus", -"Rufous-Tailed Scrub Robin"=>"Cercotrichas galactotes", -"Thrush Nightingale"=>"Luscinia luscinia", -"White-throated Robin"=>"Irania gutturalis", -"Caspian Stonechat"=>"Saxicola maura variegata", -"Western Black-eared Wheatear"=>"Oenanthe hispanica", -"Rufous-tailed Rock Thrush"=>"Monticola saxatilis", -"Red-throated Thrush/Black-throated"=>"Turdus ruficollis", -"American Robin"=>"Turdus migratorius", -"Zitting Cisticola"=>"Cisticola juncidis", -"Lanceolated Warbler"=>"Locustella lanceolata", -"River Warbler"=>"Locustella fluviatilis", -"Blyth`s Reed Warbler"=>"Acrocephalus dumetorum", -"Caspian Reed Warbler"=>"Acrocephalus fuscus", -"Aquatic Warbler"=>"Acrocephalus paludicola", -"Booted Warbler"=>"Acrocephalus caligatus", -"Marmora's Warbler"=>"Sylvia sarda", -"Dartford Warbler"=>"Sylvia undata", -"Subalpine Warbler"=>"Sylvia cantillans", -"Ménétries's Warbler"=>"Sylvia mystacea", -"Rüppel's Warbler"=>"Sylvia rueppelli", -"Asian Desert Warbler"=>"Sylvia nana", -"Western Orphean Warbler"=>"Sylvia hortensis hortensis", -"Arctic Warbler"=>"Phylloscopus borealis", -"Radde`s Warbler"=>"Phylloscopus schwarzi", -"Western Bonelli`s Warbler"=>"Phylloscopus bonelli", -"Red-breasted Flycatcher"=>"Ficedula parva", -"Eurasian Penduline Tit"=>"Remiz pendulinus", -"Daurian Shrike"=>"Lanius isabellinus", -"Long-Tailed Shrike"=>"Lanius schach", -"Lesser Grey Shrike"=>"Lanius minor", -"Southern Grey Shrike"=>"Lanius meridionalis", -"Masked Shrike"=>"Lanius nubicus", -"Spotted Nutcracker"=>"Nucifraga caryocatactes", -"Daurian Jackdaw"=>"Corvus dauuricus", -"Purple-Backed Starling"=>"Sturnus sturninus", -"Red-Fronted Serin"=>"Serinus pusillus", -"Arctic Redpoll"=>"Carduelis hornemanni", -"Scottish Crossbill"=>"Loxia scotica", -"Parrot Crossbill"=>"Loxia pytyopsittacus", -"Black-faced Bunting"=>"Emberiza spodocephala", -"Pink-footed Goose"=>"Anser brachyrhynchus", -"Black-winged Kite"=>"Elanus caeruleus", -"European Bee-eater"=>"Merops apiaster", -"Sabine`s Gull"=>"Larus sabini", -"Sooty Shearwater"=>"Puffinus griseus", -"Lesser Canada Goose"=>"Branta hutchinsii", -"Ring-necked Duck"=>"Aythya collaris", -"Greater Flamingo"=>"Phoenicopterus roseus", -"Iberian Chiffchaff"=>"Phylloscopus ibericus", -"Ashy-headed Wagtail"=>"Motacilla cinereocapilla", -"Stilt Sandpiper"=>"Calidris himantopus", -"Siberian Stonechat"=>"Saxicola maurus", -"Greater Yellowlegs"=>"Tringa melanoleuca", -"Forster`s Tern"=>"Sterna forsteri", -"Dusky Warbler"=>"Phylloscopus fuscatus", -"Cirl Bunting"=>"Emberiza cirlus", -"Olive-backed Pipit"=>"Anthus hodgsoni", -"Sociable Lapwing"=>"Vanellus gregarius", -"Spotted Sandpiper"=>"Actitis macularius", -"Baird`s Sandpiper"=>"Calidris bairdii", -"Rustic Bunting"=>"Emberiza rustica", -"Yellow-browed Bunting"=>"Emberiza chrysophrys", -"Great Shearwater"=>"Puffinus gravis", -"Bonelli`s Eagle"=>"Aquila fasciata", -"Calandra Lark"=>"Melanocorypha calandra", -"Sardinian Warbler"=>"Sylvia melanocephala", -"Ross's Gull"=>"Larus roseus", -"Yellow-Breasted Bunting"=>"Emberiza aureola", -"Pine Bunting"=>"Emberiza leucocephalos", -"Black Guillemot"=>"Cepphus grylle", -"Pied-billed Grebe"=>"Podilymbus podiceps", -"Soft-plumaged Petrel"=>"Pterodroma mollis", -"Bulwer's Petrel"=>"Bulweria bulwerii", -"White-Faced Storm-Petrel"=>"Pelagodroma marina", -"Pallas’s Fish Eagle"=>"Haliaeetus leucoryphus", -"Sandhill Crane"=>"Grus canadensis", -"Macqueen’s Bustard"=>"Chlamydotis macqueenii", -"White-tailed Lapwing"=>"Vanellus leucurus", -"Great Knot"=>"Calidris tenuirostris", -"Semipalmated Sandpiper"=>"Calidris pusilla", -"Red-necked Stint"=>"Calidris ruficollis", -"Slender-billed Curlew"=>"Numenius tenuirostris", -"Bridled Tern"=>"Onychoprion anaethetus", -"Pallas’s Sandgrouse"=>"Syrrhaptes paradoxus", -"European Scops Owl"=>"Otus scops", -"Northern Hawk Owl"=>"Surnia ulula", -"White-Throated Needletail"=>"Hirundapus caudacutus", -"Belted Kingfisher"=>"Ceryle alcyon", -"Blue-cheeked Bee-eater"=>"Merops persicus", -"Black-headed Wagtail"=>"Motacilla feldegg", -"Northern Mockingbird"=>"Mimus polyglottos", -"Alpine Accentor"=>"Prunella collaris", -"Red-flanked Bluetail"=>"Tarsiger cyanurus", -"Isabelline Wheatear"=>"Oenanthe isabellina", -"Pied Wheatear"=>"Oenanthe pleschanka", -"Eastern Black-eared Wheatear"=>"Oenanthe melanoleuca", -"Desert Wheatear"=>"Oenanthe deserti", -"White`s Thrush"=>"Zoothera aurea", -"Siberian Thrush"=>"Zoothera sibirica", -"Eyebrowed Thrush"=>"Turdus obscurus", -"Dusky Thrush"=>"Turdus eunomus", -"Black-throated Thrush"=>"Turdus atrogularis", -"Pallas`s Grasshopper Warbler"=>"Locustella certhiola", -"Spectacled Warbler"=>"Sylvia conspicillata", -"Two-barred Warbler"=>"Phylloscopus plumbeitarsus", -"Eastern Bonelli’s Warbler"=>"Phylloscopus orientalis", -"Collared Flycatcher"=>"Ficedula albicollis", -"Wallcreeper"=>"Tichodroma muraria", -"Turkestan Shrike"=>"Lanius phoenicuroides", -"Steppe Grey Shrike"=>"Lanius pallidirostris", -"Spanish Sparrow"=>"Passer hispaniolensis", -"Red-eyed Vireo"=>"Vireo olivaceus", -"Myrtle Warbler"=>"Dendroica coronata", -"White-crowned Sparrow"=>"Zonotrichia leucophrys", -"White-throated Sparrow"=>"Zonotrichia albicollis", -"Cretzschmar`s Bunting"=>"Emberiza caesia", -"Chestnut Bunting"=>"Emberiza rutila", -"Red-headed Bunting"=>"Emberiza bruniceps", -"Black-headed Bunting"=>"Emberiza melanocephala", -"Indigo Bunting"=>"Passerina cyanea", -"Balearic Woodchat Shrike"=>"Lanius senator badius", -"Demoiselle Crane"=>"Grus virgo", -"Chough"=>"Pyrrhocorax pyrrhocorax", -"Red-Billed Chough"=>"Pyrrhocorax graculus", -"Elegant Tern"=>"Sterna elegans", -"Chukar"=>"Alectoris chukar", -"Yellow-Billed Cuckoo"=>"Coccyzus americanus", -"American Sandwich Tern"=>"Sterna sandvicensis acuflavida", -"Olive-Tree Warbler"=>"Hippolais olivetorum", -"Eastern Olivaceous Warbler"=>"Acrocephalus pallidus", -"Indian Cormorant"=>"Phalacrocorax fuscicollis", -"Spur-Winged Lapwing"=>"Vanellus spinosus", -"Yelkouan Shearwater"=>"Puffinus yelkouan", -"Trumpeter Finch"=>"Bucanetes githagineus", -"Red Grouse"=>"Lagopus scoticus", -"Rock Ptarmigan"=>"Lagopus mutus", -"Long-Tailed Cormorant"=>"Phalacrocorax africanus", -"Double-crested Cormorant"=>"Phalacrocorax auritus", -"Magnificent Frigatebird"=>"Fregata magnificens", -"Naumann's Thrush"=>"Turdus naumanni", -"Oriental Pratincole"=>"Glareola maldivarum", -"Bufflehead"=>"Bucephala albeola", -"Snowfinch"=>"Montifrigilla nivalis", -"Ural owl"=>"Strix uralensis", -"Spanish Wagtail"=>"Motacilla iberiae", -"Song Sparrow"=>"Melospiza melodia", -"Rock Bunting"=>"Emberiza cia", -"Siberian Rubythroat"=>"Luscinia calliope", -"Pallid Swift"=>"Apus pallidus", -"Eurasian Pygmy Owl"=>"Glaucidium passerinum", -"Madeira Little Shearwater"=>"Puffinus baroli", -"House Finch"=>"Carpodacus mexicanus", -"Green Heron"=>"Butorides virescens", -"Solitary Sandpiper"=>"Tringa solitaria", -"Heuglin's Gull"=>"Larus heuglini" -); - -foreach ($items as $key=>$value) { - if (strpos(strtolower($key), $q) !== false) { - echo "$key|$value\n"; - } -} - -?> \ No newline at end of file -- cgit v1.2.3-54-g00ecf From 871903a319aab5704504991208d992fadb72fdf7 Mon Sep 17 00:00:00 2001 From: Craig Andrews Date: Fri, 21 Aug 2009 15:56:15 -0400 Subject: Linkifier support many more urls, and less mismatches --- lib/util.php | 77 +++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 45 insertions(+), 32 deletions(-) diff --git a/lib/util.php b/lib/util.php index f732d8b55..4e809029f 100644 --- a/lib/util.php +++ b/lib/util.php @@ -413,15 +413,16 @@ function common_replace_urls_callback($text, $callback, $notice_id = null) { // Start off with a regex $regex = '#'. '(?:^|\s+)('. - '(?:'. - '(?:https?|ftps?|mms|rtsp|gopher|news|nntp|telnet|wais|file|prospero|webcal|irc)://'. - '|'. - '(?:mailto|aim|tel|xmpp):'. - ')?'. - '(?:'. - '(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'. //IPv4 - '|(?:'. - '(?:[0-9a-f]{1,4}:){1,1}(?::[0-9a-f]{1,4}){1,6}|'. //IPv6 + '(?:'. //Known protocols + '(?:'. + '(?:https?|ftps?|mms|rtsp|gopher|news|nntp|telnet|wais|file|prospero|webcal|irc)://'. + '|'. + '(?:mailto|aim|tel|xmpp):'. + ')\S+'. + ')'. + '|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'. //IPv4 + '|(?:'. //IPv6 + '(?:[0-9a-f]{1,4}:){1,1}(?::[0-9a-f]{1,4}){1,6}|'. '(?:[0-9a-f]{1,4}:){1,2}(?::[0-9a-f]{1,4}){1,5}|'. '(?:[0-9a-f]{1,4}:){1,3}(?::[0-9a-f]{1,4}){1,4}|'. '(?:[0-9a-f]{1,4}:){1,4}(?::[0-9a-f]{1,4}){1,3}|'. @@ -438,39 +439,46 @@ function common_replace_urls_callback($text, $callback, $notice_id = null) { '(?:[0-9a-f]{1,4}:){1,4}(?::[0-9a-f]{1,4}){1,1}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|'. '(?:(?:[0-9a-f]{1,4}:){1,5}|:):(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|'. ':(?::[0-9a-f]{1,4}){1,5}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}'. - ')|'. - '(?:[^.\s/:]+\.)+'. //DNS - '(?:museum|travel|onion|[a-z]{2,4})'. + ')|(?:'. //DNS + '\S+\.(?:museum|travel|onion|local|[a-z]{2,4})'. ')'. - '(?:[:/][^\s]*)?'. - ')'. + '(?:[:/]\S*)?'. + ')(?:$|\s+)'. '#ix'; - $callback_helper = curry(callback_helper, 3); - return preg_replace_callback($regex, $callback_helper($callback,$notice_id) ,$text); +//preg_match_all($regex,$text,$matches); +//print_r($matches); +//die("here"); + return preg_replace_callback($regex, curry(callback_helper,$callback,$notice_id) ,$text); } -function callback_helper($callback, $notice_id, $matches) { +function callback_helper($matches, $callback, $notice_id) { + $spaces_left = (strlen($matches[0]) - strlen(ltrim($matches[0]))); + $spaces_right = (strlen($matches[0]) - strlen(rtrim($matches[0]))); if(empty($notice_id)){ - return $callback($matches[1],$notice_id); + $result = call_user_func_array($callback,$matches[1]); }else{ - return $callback($matches[1]); + $result = call_user_func_array($callback, array($matches[1],$notice_id) ); } + return str_repeat(' ',$spaces_left) . $result . str_repeat(' ',$spaces_right); } -function curry($func, $arity) { - return create_function('', " - \$args = func_get_args(); - if(count(\$args) >= $arity) - return call_user_func_array('$func', \$args); - \$args = var_export(\$args, 1); - return create_function('',' - \$a = func_get_args(); - \$z = ' . \$args . '; - \$a = array_merge(\$z,\$a); - return call_user_func_array(\'$func\', \$a); - '); - "); +function curry($fn) { + //TODO switch to a PHP 5.3 function closure based approach if PHP 5.3 is used + $args = func_get_args(); + array_shift($args); + $id = uniqid('_partial'); + $GLOBALS[$id] = array($fn, $args); + return create_function( + '', + ' + $args = func_get_args(); + return call_user_func_array( + $GLOBALS["'.$id.'"][0], + array_merge( + $args, + $GLOBALS["'.$id.'"][1])); + '); } function common_linkify($url) { @@ -478,6 +486,11 @@ function common_linkify($url) { // functions $url = htmlspecialchars_decode($url); + if(strpos($url, '@')!==false && strpos($url, ':')===false){ + //url is an email address without the mailto: protocol + return XMLStringer::estring('a', array('href' => "mailto:$url", 'rel' => 'external'), $url); + } + $canon = File_redirection::_canonUrl($url); $longurl_data = File_redirection::where($url); -- cgit v1.2.3-54-g00ecf From 5c21a371d61b4cd3dd125f2c43aa80c52c9c316d Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 18 Aug 2009 20:59:18 -0700 Subject: Include php-gettext 1.0.7 into extlibs; loading it up if native gettext extension is not present. This provides a pure PHP implementation of the gettext functions. This should help get laconica running on shared hosting environments where PHP's gettext module may not be installed. Also gets us one step closer to running on Mac OS X 10.5 with Apple's preinstalled PHP, which doesn't provide an easy way to add modules. Source: http://savannah.nongnu.org/projects/php-gettext Copyright (c) 2005 Steven Armstrong GPLv2 or later --- extlib/php-gettext/.DS_Store | Bin 0 -> 6148 bytes extlib/php-gettext/AUTHORS | 3 + extlib/php-gettext/COPYING | 340 ++++++++++++++++++++++++++++++++++++++ extlib/php-gettext/ChangeLog | 144 +++++++++++++++++ extlib/php-gettext/README | 189 ++++++++++++++++++++++ extlib/php-gettext/gettext.inc | 318 ++++++++++++++++++++++++++++++++++++ extlib/php-gettext/gettext.php | 358 +++++++++++++++++++++++++++++++++++++++++ extlib/php-gettext/streams.php | 166 +++++++++++++++++++ install.php | 3 +- lib/common.php | 3 + 10 files changed, 1522 insertions(+), 2 deletions(-) create mode 100644 extlib/php-gettext/.DS_Store create mode 100644 extlib/php-gettext/AUTHORS create mode 100644 extlib/php-gettext/COPYING create mode 100644 extlib/php-gettext/ChangeLog create mode 100644 extlib/php-gettext/README create mode 100644 extlib/php-gettext/gettext.inc create mode 100644 extlib/php-gettext/gettext.php create mode 100644 extlib/php-gettext/streams.php diff --git a/extlib/php-gettext/.DS_Store b/extlib/php-gettext/.DS_Store new file mode 100644 index 000000000..5008ddfcf Binary files /dev/null and b/extlib/php-gettext/.DS_Store differ diff --git a/extlib/php-gettext/AUTHORS b/extlib/php-gettext/AUTHORS new file mode 100644 index 000000000..da6ade7b6 --- /dev/null +++ b/extlib/php-gettext/AUTHORS @@ -0,0 +1,3 @@ +Danilo Segan +Nico Kaiser (contributed most changes between 1.0.2 and 1.0.3, bugfix for 1.0.5) +Steven Armstrong (gettext.inc, leading to 1.0.6) diff --git a/extlib/php-gettext/COPYING b/extlib/php-gettext/COPYING new file mode 100644 index 000000000..5b6e7c66c --- /dev/null +++ b/extlib/php-gettext/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/extlib/php-gettext/ChangeLog b/extlib/php-gettext/ChangeLog new file mode 100644 index 000000000..5e0949dfd --- /dev/null +++ b/extlib/php-gettext/ChangeLog @@ -0,0 +1,144 @@ +2006-02-07 Danilo Šegan + + * examples/pigs_dropin.php: comment-out bind_textdomain_codeset + + * gettext.inc (T_bind_textdomain_codeset): bind_textdomain_codeset + is available only in PHP 4.2.0+ (thanks to Jens A. Tkotz). + + * Makefile: Include gettext.inc in DIST_FILES, VERSION up to + 1.0.7. + +2006-02-03 Danilo Šegan + + Added setlocale() emulation as well. + + * examples/pigs_dropin.php: Use T_setlocale() and locale_emulation(). + * examples/pigs_fallback.php: Use T_setlocale() and locale_emulation(). + + * gettext.inc: Added globals $EMULATEGETTEXT and $CURRENTLOCALE. + (locale_emulation): Whether emulation is active. + (_check_locale): Rewrite. + (_setlocale): Added emulated setlocale function. + (T_setlocale): Wrapper around _setlocale. + (_get_reader): Use variables and _setlocale. + +2006-02-02 Danilo Šegan + + Fix bug #12192. + + * examples/locale/sr_CS/LC_MESSAGES/messages.po: Correct grammar. + * examples/locale/sr_CS/LC_MESSAGES/messages.mo: Rebuild. + +2006-02-02 Danilo Šegan + + Fix bug #15419. + + * streams.php: Support for PHP 5.1.1 fread() which reads most 8kb. + (Fix by Piotr Szotkowski ) + +2006-02-02 Danilo Šegan + + Merge Steven Armstrong's changes, supporting standard gettext + interfaces: + + * examples/*: Restructured examples. + * gettext.inc: Added. + * AUTHORS: Added Steven. + * Makefile (VERSION): Up to 1.0.6. + +2006-01-28 Nico Kaiser + + * gettext.php (select_string): Fix "true" <-> 1 difference of PHP + +2005-07-29 Danilo Šegan + + * Makefile (VERSION): Up to 1.0.5. + +2005-07-29 Danilo Šegan + + Fixes bug #13850. + + * gettext.php (gettext_reader): check $Reader->error as well. + +2005-07-29 Danilo Šegan + + * Makefile (VERSION): Up to 1.0.4. + +2005-07-29 Danilo Šegan + + Fixes bug #13771. + + * gettext.php (gettext_reader->get_plural_forms): Plural forms + header extraction regex change. Reported by Edgar Gonzales. + +2005-02-28 Danilo Šegan + + * AUTHORS: Added Nico to the list. + + * Makefile (VERSION): Up to 1.0.3. + + * README: Updated. + +2005-02-28 Danilo Šegan + + * gettext.php: Added pre-loading, code documentation, and many + code clean-ups by Nico Kaiser . + +2005-02-28 Danilo Šegan + + * streams.php (FileReader.read): Handle read($bytes = 0). + + * examples/pigs.php: Prefix gettext function names with T or T_. + + * examples/update: Use the same keywords T_ and T_ngettext. + + * streams.php: Added CachedFileReader. + +2003-11-11 Danilo Šegan + + * gettext.php: Added hashing to find_string. + +2003-11-01 Danilo Šegan + + * Makefile (DIST_FILES): Replaced LICENSE with COPYING. + (VERSION): Up to 1.0.2. + + * AUTHORS: Minor edits. + + * README: Minor edits. + + * COPYING: Removed LICENSE, added this file. + + * gettext.php: Added copyright notice and disclaimer. + * streams.php: Same. + * examples/pigs.php: Same. + +2003-10-23 Danilo Šegan + + * Makefile: Upped version to 1.0.1. + + * gettext.php (gettext_reader): Remove a call to set_total_plurals. + (set_total_plurals): Removed unused function for some better days. + +2003-10-23 Danilo Šegan + + * Makefile: Added, version 1.0.0. + + * examples/*: Added an example of usage. + + * README: Described all the crap. + +2003-10-22 Danilo Šegan + + * gettext.php: Plural forms implemented too. + + * streams.php: Added FileReader for direct access to files (no + need to keep file in memory). + + * gettext.php: It works, except for plural forms. + + * streams.php: Created abstract class StreamReader. + Added StringReader class. + + * gettext.php: Started writing gettext_reader. + diff --git a/extlib/php-gettext/README b/extlib/php-gettext/README new file mode 100644 index 000000000..c7525e29c --- /dev/null +++ b/extlib/php-gettext/README @@ -0,0 +1,189 @@ +PHP-gettext 1.0 + +Copyright 2003, 2006 -- Danilo "angry with PHP[1]" Segan +Licensed under GPLv2 (or any later version, see COPYING) + +[1] PHP is actually cyrillic, and translates roughly to + "works-doesn't-work" (UTF-8: Ради-Не-Ради) + + +Introduction + + How many times did you look for a good translation tool, and + found out that gettext is best for the job? Many times. + + How many times did you try to use gettext in PHP, but failed + miserably, because either your hosting provider didn't support + it, or the server didn't have adequate locale? Many times. + + Well, this is a solution to your needs. It allows using gettext + tools for managing translations, yet it doesn't require gettext + library at all. It parses generated MO files directly, and thus + might be a bit slower than the (maybe provided) gettext library. + + PHP-gettext is a simple reader for GNU gettext MO files. Those + are binary containers for translations, produced by GNU msgfmt. + +Why? + + I got used to having gettext work even without gettext + library. It's there in my favourite language Python, so I was + surprised that I couldn't find it in PHP. I even Googled for it, + but to no avail. + + So, I said, what the heck, I'm going to write it for this + disguisting language of PHP, because I'm often constrained to it. + +Features + + o Support for simple translations + Just define a simple alias for translate() function (suggested + use of _() or gettext(); see provided example). + + o Support for ngettext calls (plural forms, see a note under bugs) + You may also use plural forms. Translations in MO files need to + provide this, and they must also provide "plural-forms" header. + Please see 'info gettext' for more details. + + o Support for reading straight files, or strings (!!!) + Since I can imagine many different backends for reading in the MO + file data, I used imaginary abstract class StreamReader to do all + the input (check streams.php). For your convenience, I've already + provided two classes for reading files: FileReader and + StringReader (CachedFileReader is a combination of the two: it + loads entire file contents into a string, and then works on that). + See example below for usage. You can for instance use StringReader + when you read in data from a database, or you can create your own + derivative of StreamReader for anything you like. + + +Bugs + + Plural-forms field in MO header (translation for empty string, + i.e. "") is treated according to PHP syntactic rules (it's + eval()ed). Since these should actually follow C syntax, there are + some problems. + + For instance, I'm used to using this: + Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : \ + n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2; + but it fails with PHP (it sets $plural=2 instead of 0 for $n==1). + + The fix is usually simple, but I'm lazy to go into the details of + PHP operator precedence, and maybe try to fix it. In here, I had + to put everything after the first ':' in parenthesis: + Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : \ + (n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); + That works, and I'm satisfied. + + Besides this one, there are probably a bunch of other bugs, since + I hate PHP (did I mention it already? no? strange), and don't + know it very well. So, feel free to fix any of those and report + them back to me at . + +Usage + + Put files streams.php and gettext.php somewhere you can load them + from, and require 'em in where you want to use them. + + Then, create one 'stream reader' (a class that provides functions + like read(), seekto(), currentpos() and length()) which will + provide data for the 'gettext_reader', with eg. + $streamer = new FileStream('data.mo'); + + Then, use that as a parameter to gettext_reader constructor: + $wohoo = new gettext_reader($streamer); + + If you want to disable pre-loading of entire message catalog in + memory (if, for example, you have a multi-thousand message catalog + which you'll use only occasionally), use "false" for second + parameter to gettext_reader constructor: + $wohoo = new gettext_reader($streamer, false); + + From now on, you have all the benefits of gettext data at your + disposal, so may run: + print $wohoo->translate("This is a test"); + print $wohoo->ngettext("%d bird", "%d birds", $birds); + + You might need to pass parameter "-k" to xgettext to make it + extract all the strings. In above example, try with + xgettext -ktranslate -kngettext:1,2 file.php + what should create messages.po which contains two messages for + translation. + + I suggest creating simple aliases for these functions (see + example/pigs.php for how do I do it, which means it's probably a + bad way). + + +Usage with gettext.inc (standard gettext interfaces emulation) + + Check example in examples/pig_dropin.php, basically you include + gettext.inc and use all the standard gettext interfaces as + documented on: + + http://www.php.net/gettext + + The only catch is that you can check return value of setlocale() + to see if your locale is system supported or not. + + +Example + + See in examples/ subdirectory. There are a couple of files. + pigs.php is an example, serbian.po is a translation to Serbian + language, and serbian.mo is generated with + msgfmt -o serbian.mo serbian.po + There is also simple "update" script that can be used to generate + POT file and to update the translation using msgmerge. + +Interesting TODO: + + o Try to parse "plural-forms" header field, and to follow C syntax + rules. This won't be easy. + +Boring TODO: + + o Learn PHP and fix bugs, slowness and other stuff resulting from + my lack of knowledge (but *maybe*, it's not my knowledge that is + bad, but PHP itself ;-). + + (This is mostly done thanks to Nico Kaiser.) + + o Try to use hash tables in MO files: with pre-loading, would it + be useful at all? + +Never-asked-questions: + + o Why did you mark this as version 1.0 when this is the first code + release? + + Well, it's quite simple. I consider that the first released thing + should be labeled "version 1" (first, right?). Zero is there to + indicate that there's zero improvement and/or change compared to + "version 1". + + I plan to use version numbers 1.0.* for small bugfixes, and to + release 1.1 as "first stable release of version 1". + + This may trick someone that this is actually useful software, but + as with any other free software, I take NO RESPONSIBILITY for + creating such a masterpiece that will smoke crack, trash your + hard disk, and make lasers in your CD device dance to the tune of + Mozart's 40th Symphony (there is one like that, right?). + + o Can I...? + + Yes, you can. This is free software (as in freedom, free speech), + and you might do whatever you wish with it, provided you do not + limit freedom of others (GPL). + + I'm considering licensing this under LGPL, but I *do* want + *every* PHP-gettext user to contribute and respect ideas of free + software, so don't count on it happening anytime soon. + + I'm sorry that I'm taking away your freedom of taking others' + freedom away, but I believe that's neglible as compared to what + freedoms you could take away. ;-) + + Uhm, whatever. diff --git a/extlib/php-gettext/gettext.inc b/extlib/php-gettext/gettext.inc new file mode 100644 index 000000000..eb94b256a --- /dev/null +++ b/extlib/php-gettext/gettext.inc @@ -0,0 +1,318 @@ + + + Drop in replacement for native gettext. + + This file is part of PHP-gettext. + + PHP-gettext is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + PHP-gettext is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PHP-gettext; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ +/* +LC_CTYPE 0 +LC_NUMERIC 1 +LC_TIME 2 +LC_COLLATE 3 +LC_MONETARY 4 +LC_MESSAGES 5 +LC_ALL 6 +*/ + +require('streams.php'); +require('gettext.php'); + + +// Variables + +global $text_domains, $default_domain, $LC_CATEGORIES, $EMULATEGETTEXT, $CURRENTLOCALE; +$text_domains = array(); +$default_domain = 'messages'; +$LC_CATEGORIES = array('LC_CTYPE', 'LC_NUMERIC', 'LC_TIME', 'LC_COLLATE', 'LC_MONETARY', 'LC_MESSAGES', 'LC_ALL'); +$EMULATEGETTEXT = 0; +$CURRENTLOCALE = ''; + + +// Utility functions + +/** + * Utility function to get a StreamReader for the given text domain. + */ +function _get_reader($domain=null, $category=5, $enable_cache=true) { + global $text_domains, $default_domain, $LC_CATEGORIES; + if (!isset($domain)) $domain = $default_domain; + if (!isset($text_domains[$domain]->l10n)) { + // get the current locale + $locale = _setlocale(LC_MESSAGES, 0); + $p = isset($text_domains[$domain]->path) ? $text_domains[$domain]->path : './'; + $path = $p . "$locale/". $LC_CATEGORIES[$category] ."/$domain.mo"; + if (file_exists($path)) { + $input = new FileReader($path); + } + else { + $input = null; + } + $text_domains[$domain]->l10n = new gettext_reader($input, $enable_cache); + } + return $text_domains[$domain]->l10n; +} + +/** + * Returns whether we are using our emulated gettext API or PHP built-in one. + */ +function locale_emulation() { + global $EMULATEGETTEXT; + return $EMULATEGETTEXT; +} + +/** + * Checks if the current locale is supported on this system. + */ +function _check_locale() { + global $EMULATEGETTEXT; + return !$EMULATEGETTEXT; +} + +/** + * Get the codeset for the given domain. + */ +function _get_codeset($domain=null) { + global $text_domains, $default_domain, $LC_CATEGORIES; + if (!isset($domain)) $domain = $default_domain; + return (isset($text_domains[$domain]->codeset))? $text_domains[$domain]->codeset : ini_get('mbstring.internal_encoding'); +} + +/** + * Convert the given string to the encoding set by bind_textdomain_codeset. + */ +function _encode($text) { + $source_encoding = mb_detect_encoding($text); + $target_encoding = _get_codeset(); + if ($source_encoding != $target_encoding) { + return mb_convert_encoding($text, $target_encoding, $source_encoding); + } + else { + return $text; + } +} + + + + +// Custom implementation of the standard gettext related functions + +/** + * Sets a requested locale, if needed emulates it. + */ +function _setlocale($category, $locale) { + global $CURRENTLOCALE, $EMULATEGETTEXT; + if ($locale === 0) { // use === to differentiate between string "0" + if ($CURRENTLOCALE != '') + return $CURRENTLOCALE; + else + // obey LANG variable, maybe extend to support all of LC_* vars + // even if we tried to read locale without setting it first + return _setlocale($category, $CURRENTLOCALE); + } else { + $ret = 0; + if (function_exists('setlocale')) // I don't know if this ever happens ;) + $ret = setlocale($category, $locale); + if (($ret and $locale == '') or ($ret == $locale)) { + $EMULATEGETTEXT = 0; + $CURRENTLOCALE = $ret; + } else { + if ($locale == '') // emulate variable support + $CURRENTLOCALE = getenv('LANG'); + else + $CURRENTLOCALE = $locale; + $EMULATEGETTEXT = 1; + } + return $CURRENTLOCALE; + } +} + +/** + * Sets the path for a domain. + */ +function _bindtextdomain($domain, $path) { + global $text_domains; + // ensure $path ends with a slash + if ($path[strlen($path) - 1] != '/') $path .= '/'; + elseif ($path[strlen($path) - 1] != '\\') $path .= '\\'; + $text_domains[$domain]->path = $path; +} + +/** + * Specify the character encoding in which the messages from the DOMAIN message catalog will be returned. + */ +function _bind_textdomain_codeset($domain, $codeset) { + global $text_domains; + $text_domains[$domain]->codeset = $codeset; +} + +/** + * Sets the default domain. + */ +function _textdomain($domain) { + global $default_domain; + $default_domain = $domain; +} + +/** + * Lookup a message in the current domain. + */ +function _gettext($msgid) { + $l10n = _get_reader(); + //return $l10n->translate($msgid); + return _encode($l10n->translate($msgid)); +} +/** + * Alias for gettext. + */ +function __($msgid) { + return _gettext($msgid); +} +/** + * Plural version of gettext. + */ +function _ngettext($single, $plural, $number) { + $l10n = _get_reader(); + //return $l10n->ngettext($single, $plural, $number); + return _encode($l10n->ngettext($single, $plural, $number)); +} + +/** + * Override the current domain. + */ +function _dgettext($domain, $msgid) { + $l10n = _get_reader($domain); + //return $l10n->translate($msgid); + return _encode($l10n->translate($msgid)); +} +/** + * Plural version of dgettext. + */ +function _dngettext($domain, $single, $plural, $number) { + $l10n = _get_reader($domain); + //return $l10n->ngettext($single, $plural, $number); + return _encode($l10n->ngettext($single, $plural, $number)); +} + +/** + * Overrides the domain and category for a single lookup. + */ +function _dcgettext($domain, $msgid, $category) { + $l10n = _get_reader($domain, $category); + //return $l10n->translate($msgid); + return _encode($l10n->translate($msgid)); +} +/** + * Plural version of dcgettext. + */ +function _dcngettext($domain, $single, $plural, $number, $category) { + $l10n = _get_reader($domain, $category); + //return $l10n->ngettext($single, $plural, $number); + return _encode($l10n->ngettext($single, $plural, $number)); +} + + + +// Wrappers to use if the standard gettext functions are available, but the current locale is not supported by the system. +// Use the standard impl if the current locale is supported, use the custom impl otherwise. + +function T_setlocale($category, $locale) { + return _setlocale($category, $locale); +} + +function T_bindtextdomain($domain, $path) { + if (_check_locale()) return bindtextdomain($domain, $path); + else return _bindtextdomain($domain, $path); +} +function T_bind_textdomain_codeset($domain, $codeset) { + // bind_textdomain_codeset is available only in PHP 4.2.0+ + if (_check_locale() and function_exists('bind_textdomain_codeset')) return bind_textdomain_codeset($domain, $codeset); + else return _bind_textdomain_codeset($domain, $codeset); +} +function T_textdomain($domain) { + if (_check_locale()) return textdomain($domain); + else return _textdomain($domain); +} +function T_gettext($msgid) { + if (_check_locale()) return gettext($msgid); + else return _gettext($msgid); +} +function T_($msgid) { + if (_check_locale()) return _($msgid); + return __($msgid); +} +function T_ngettext($single, $plural, $number) { + if (_check_locale()) return ngettext($single, $plural, $number); + else return _ngettext($single, $plural, $number); +} +function T_dgettext($domain, $msgid) { + if (_check_locale()) return dgettext($domain, $msgid); + else return _dgettext($domain, $msgid); +} +function T_dngettext($domain, $single, $plural, $number) { + if (_check_locale()) return dngettext($domain, $single, $plural, $number); + else return _dngettext($domain, $single, $plural, $number); +} +function T_dcgettext($domain, $msgid, $category) { + if (_check_locale()) return dcgettext($domain, $msgid, $category); + else return _dcgettext($domain, $msgid, $category); +} +function T_dcngettext($domain, $single, $plural, $number, $category) { + if (_check_locale()) return dcngettext($domain, $single, $plural, $number, $category); + else return _dcngettext($domain, $single, $plural, $number, $category); +} + + + +// Wrappers used as a drop in replacement for the standard gettext functions + +if (!function_exists('gettext')) { + function bindtextdomain($domain, $path) { + return _bindtextdomain($domain, $path); + } + function bind_textdomain_codeset($domain, $codeset) { + return _bind_textdomain_codeset($domain, $codeset); + } + function textdomain($domain) { + return _textdomain($domain); + } + function gettext($msgid) { + return _gettext($msgid); + } + function _($msgid) { + return __($msgid); + } + function ngettext($single, $plural, $number) { + return _ngettext($single, $plural, $number); + } + function dgettext($domain, $msgid) { + return _dgettext($domain, $msgid); + } + function dngettext($domain, $single, $plural, $number) { + return _dngettext($domain, $single, $plural, $number); + } + function dcgettext($domain, $msgid, $category) { + return _dcgettext($domain, $msgid, $category); + } + function dcngettext($domain, $single, $plural, $number, $category) { + return _dcngettext($domain, $single, $plural, $number, $category); + } +} + +?> \ No newline at end of file diff --git a/extlib/php-gettext/gettext.php b/extlib/php-gettext/gettext.php new file mode 100644 index 000000000..ad94a987b --- /dev/null +++ b/extlib/php-gettext/gettext.php @@ -0,0 +1,358 @@ +. + Copyright (c) 2005 Nico Kaiser + + This file is part of PHP-gettext. + + PHP-gettext is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + PHP-gettext is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PHP-gettext; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +/** + * Provides a simple gettext replacement that works independently from + * the system's gettext abilities. + * It can read MO files and use them for translating strings. + * The files are passed to gettext_reader as a Stream (see streams.php) + * + * This version has the ability to cache all strings and translations to + * speed up the string lookup. + * While the cache is enabled by default, it can be switched off with the + * second parameter in the constructor (e.g. whenusing very large MO files + * that you don't want to keep in memory) + */ +class gettext_reader { + //public: + var $error = 0; // public variable that holds error code (0 if no error) + + //private: + var $BYTEORDER = 0; // 0: low endian, 1: big endian + var $STREAM = NULL; + var $short_circuit = false; + var $enable_cache = false; + var $originals = NULL; // offset of original table + var $translations = NULL; // offset of translation table + var $pluralheader = NULL; // cache header field for plural forms + var $total = 0; // total string count + var $table_originals = NULL; // table for original strings (offsets) + var $table_translations = NULL; // table for translated strings (offsets) + var $cache_translations = NULL; // original -> translation mapping + + + /* Methods */ + + + /** + * Reads a 32bit Integer from the Stream + * + * @access private + * @return Integer from the Stream + */ + function readint() { + if ($this->BYTEORDER == 0) { + // low endian + return array_shift(unpack('V', $this->STREAM->read(4))); + } else { + // big endian + return array_shift(unpack('N', $this->STREAM->read(4))); + } + } + + /** + * Reads an array of Integers from the Stream + * + * @param int count How many elements should be read + * @return Array of Integers + */ + function readintarray($count) { + if ($this->BYTEORDER == 0) { + // low endian + return unpack('V'.$count, $this->STREAM->read(4 * $count)); + } else { + // big endian + return unpack('N'.$count, $this->STREAM->read(4 * $count)); + } + } + + /** + * Constructor + * + * @param object Reader the StreamReader object + * @param boolean enable_cache Enable or disable caching of strings (default on) + */ + function gettext_reader($Reader, $enable_cache = true) { + // If there isn't a StreamReader, turn on short circuit mode. + if (! $Reader || isset($Reader->error) ) { + $this->short_circuit = true; + return; + } + + // Caching can be turned off + $this->enable_cache = $enable_cache; + + // $MAGIC1 = (int)0x950412de; //bug in PHP 5 + $MAGIC1 = (int) - 1794895138; + // $MAGIC2 = (int)0xde120495; //bug + $MAGIC2 = (int) - 569244523; + + $this->STREAM = $Reader; + $magic = $this->readint(); + if ($magic == $MAGIC1) { + $this->BYTEORDER = 0; + } elseif ($magic == $MAGIC2) { + $this->BYTEORDER = 1; + } else { + $this->error = 1; // not MO file + return false; + } + + // FIXME: Do we care about revision? We should. + $revision = $this->readint(); + + $this->total = $this->readint(); + $this->originals = $this->readint(); + $this->translations = $this->readint(); + } + + /** + * Loads the translation tables from the MO file into the cache + * If caching is enabled, also loads all strings into a cache + * to speed up translation lookups + * + * @access private + */ + function load_tables() { + if (is_array($this->cache_translations) && + is_array($this->table_originals) && + is_array($this->table_translations)) + return; + + /* get original and translations tables */ + $this->STREAM->seekto($this->originals); + $this->table_originals = $this->readintarray($this->total * 2); + $this->STREAM->seekto($this->translations); + $this->table_translations = $this->readintarray($this->total * 2); + + if ($this->enable_cache) { + $this->cache_translations = array (); + /* read all strings in the cache */ + for ($i = 0; $i < $this->total; $i++) { + $this->STREAM->seekto($this->table_originals[$i * 2 + 2]); + $original = $this->STREAM->read($this->table_originals[$i * 2 + 1]); + $this->STREAM->seekto($this->table_translations[$i * 2 + 2]); + $translation = $this->STREAM->read($this->table_translations[$i * 2 + 1]); + $this->cache_translations[$original] = $translation; + } + } + } + + /** + * Returns a string from the "originals" table + * + * @access private + * @param int num Offset number of original string + * @return string Requested string if found, otherwise '' + */ + function get_original_string($num) { + $length = $this->table_originals[$num * 2 + 1]; + $offset = $this->table_originals[$num * 2 + 2]; + if (! $length) + return ''; + $this->STREAM->seekto($offset); + $data = $this->STREAM->read($length); + return (string)$data; + } + + /** + * Returns a string from the "translations" table + * + * @access private + * @param int num Offset number of original string + * @return string Requested string if found, otherwise '' + */ + function get_translation_string($num) { + $length = $this->table_translations[$num * 2 + 1]; + $offset = $this->table_translations[$num * 2 + 2]; + if (! $length) + return ''; + $this->STREAM->seekto($offset); + $data = $this->STREAM->read($length); + return (string)$data; + } + + /** + * Binary search for string + * + * @access private + * @param string string + * @param int start (internally used in recursive function) + * @param int end (internally used in recursive function) + * @return int string number (offset in originals table) + */ + function find_string($string, $start = -1, $end = -1) { + if (($start == -1) or ($end == -1)) { + // find_string is called with only one parameter, set start end end + $start = 0; + $end = $this->total; + } + if (abs($start - $end) <= 1) { + // We're done, now we either found the string, or it doesn't exist + $txt = $this->get_original_string($start); + if ($string == $txt) + return $start; + else + return -1; + } else if ($start > $end) { + // start > end -> turn around and start over + return $this->find_string($string, $end, $start); + } else { + // Divide table in two parts + $half = (int)(($start + $end) / 2); + $cmp = strcmp($string, $this->get_original_string($half)); + if ($cmp == 0) + // string is exactly in the middle => return it + return $half; + else if ($cmp < 0) + // The string is in the upper half + return $this->find_string($string, $start, $half); + else + // The string is in the lower half + return $this->find_string($string, $half, $end); + } + } + + /** + * Translates a string + * + * @access public + * @param string string to be translated + * @return string translated string (or original, if not found) + */ + function translate($string) { + if ($this->short_circuit) + return $string; + $this->load_tables(); + + if ($this->enable_cache) { + // Caching enabled, get translated string from cache + if (array_key_exists($string, $this->cache_translations)) + return $this->cache_translations[$string]; + else + return $string; + } else { + // Caching not enabled, try to find string + $num = $this->find_string($string); + if ($num == -1) + return $string; + else + return $this->get_translation_string($num); + } + } + + /** + * Get possible plural forms from MO header + * + * @access private + * @return string plural form header + */ + function get_plural_forms() { + // lets assume message number 0 is header + // this is true, right? + $this->load_tables(); + + // cache header field for plural forms + if (! is_string($this->pluralheader)) { + if ($this->enable_cache) { + $header = $this->cache_translations[""]; + } else { + $header = $this->get_translation_string(0); + } + if (eregi("plural-forms: ([^\n]*)\n", $header, $regs)) + $expr = $regs[1]; + else + $expr = "nplurals=2; plural=n == 1 ? 0 : 1;"; + $this->pluralheader = $expr; + } + return $this->pluralheader; + } + + /** + * Detects which plural form to take + * + * @access private + * @param n count + * @return int array index of the right plural form + */ + function select_string($n) { + $string = $this->get_plural_forms(); + $string = str_replace('nplurals',"\$total",$string); + $string = str_replace("n",$n,$string); + $string = str_replace('plural',"\$plural",$string); + + $total = 0; + $plural = 0; + + eval("$string"); + if ($plural >= $total) $plural = $total - 1; + return $plural; + } + + /** + * Plural version of gettext + * + * @access public + * @param string single + * @param string plural + * @param string number + * @return translated plural form + */ + function ngettext($single, $plural, $number) { + if ($this->short_circuit) { + if ($number != 1) + return $plural; + else + return $single; + } + + // find out the appropriate form + $select = $this->select_string($number); + + // this should contains all strings separated by NULLs + $key = $single.chr(0).$plural; + + + if ($this->enable_cache) { + if (! array_key_exists($key, $this->cache_translations)) { + return ($number != 1) ? $plural : $single; + } else { + $result = $this->cache_translations[$key]; + $list = explode(chr(0), $result); + return $list[$select]; + } + } else { + $num = $this->find_string($key); + if ($num == -1) { + return ($number != 1) ? $plural : $single; + } else { + $result = $this->get_translation_string($num); + $list = explode(chr(0), $result); + return $list[$select]; + } + } + } + +} + +?> diff --git a/extlib/php-gettext/streams.php b/extlib/php-gettext/streams.php new file mode 100644 index 000000000..d57aac649 --- /dev/null +++ b/extlib/php-gettext/streams.php @@ -0,0 +1,166 @@ +. + + This file is part of PHP-gettext. + + PHP-gettext is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + PHP-gettext is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with PHP-gettext; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + + +// Simple class to wrap file streams, string streams, etc. +// seek is essential, and it should be byte stream +class StreamReader { + // should return a string [FIXME: perhaps return array of bytes?] + function read($bytes) { + return false; + } + + // should return new position + function seekto($position) { + return false; + } + + // returns current position + function currentpos() { + return false; + } + + // returns length of entire stream (limit for seekto()s) + function length() { + return false; + } +} + +class StringReader { + var $_pos; + var $_str; + + function StringReader($str='') { + $this->_str = $str; + $this->_pos = 0; + } + + function read($bytes) { + $data = substr($this->_str, $this->_pos, $bytes); + $this->_pos += $bytes; + if (strlen($this->_str)<$this->_pos) + $this->_pos = strlen($this->_str); + + return $data; + } + + function seekto($pos) { + $this->_pos = $pos; + if (strlen($this->_str)<$this->_pos) + $this->_pos = strlen($this->_str); + return $this->_pos; + } + + function currentpos() { + return $this->_pos; + } + + function length() { + return strlen($this->_str); + } + +} + + +class FileReader { + var $_pos; + var $_fd; + var $_length; + + function FileReader($filename) { + if (file_exists($filename)) { + + $this->_length=filesize($filename); + $this->_pos = 0; + $this->_fd = fopen($filename,'rb'); + if (!$this->_fd) { + $this->error = 3; // Cannot read file, probably permissions + return false; + } + } else { + $this->error = 2; // File doesn't exist + return false; + } + } + + function read($bytes) { + if ($bytes) { + fseek($this->_fd, $this->_pos); + + // PHP 5.1.1 does not read more than 8192 bytes in one fread() + // the discussions at PHP Bugs suggest it's the intended behaviour + while ($bytes > 0) { + $chunk = fread($this->_fd, $bytes); + $data .= $chunk; + $bytes -= strlen($chunk); + } + $this->_pos = ftell($this->_fd); + + return $data; + } else return ''; + } + + function seekto($pos) { + fseek($this->_fd, $pos); + $this->_pos = ftell($this->_fd); + return $this->_pos; + } + + function currentpos() { + return $this->_pos; + } + + function length() { + return $this->_length; + } + + function close() { + fclose($this->_fd); + } + +} + +// Preloads entire file in memory first, then creates a StringReader +// over it (it assumes knowledge of StringReader internals) +class CachedFileReader extends StringReader { + function CachedFileReader($filename) { + if (file_exists($filename)) { + + $length=filesize($filename); + $fd = fopen($filename,'rb'); + + if (!$fd) { + $this->error = 3; // Cannot read file, probably permissions + return false; + } + $this->_str = fread($fd, $length); + fclose($fd); + + } else { + $this->error = 2; // File doesn't exist + return false; + } + } +} + + +?> \ No newline at end of file diff --git a/install.php b/install.php index 9bcee275f..c13f70272 100644 --- a/install.php +++ b/install.php @@ -49,8 +49,7 @@ function checkPrereqs() } $reqs = array('gd', 'curl', - 'xmlwriter', 'mbstring', - 'gettext'); + 'xmlwriter', 'mbstring'); foreach ($reqs as $req) { if (!checkExtension($req)) { diff --git a/lib/common.php b/lib/common.php index 6c4b856e0..72c093bf3 100644 --- a/lib/common.php +++ b/lib/common.php @@ -47,6 +47,9 @@ require_once('PEAR.php'); require_once('DB/DataObject.php'); require_once('DB/DataObject/Cast.php'); # for dates +if (!function_exists('gettext')) { + require_once("php-gettext/gettext.inc"); +} require_once(INSTALLDIR.'/lib/language.php'); // This gets included before the config file, so that admin code and plugins -- cgit v1.2.3-54-g00ecf From 8bca90b8d2804675421464a3db1b447a439a456c Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 18 Aug 2009 21:02:46 -0700 Subject: Tweak to php-gettext stream reader; initialize local variable before appending data to it to avoid triggering an E_NOTICE message. --- extlib/php-gettext/streams.php | 1 + 1 file changed, 1 insertion(+) diff --git a/extlib/php-gettext/streams.php b/extlib/php-gettext/streams.php index d57aac649..3eafa7482 100644 --- a/extlib/php-gettext/streams.php +++ b/extlib/php-gettext/streams.php @@ -108,6 +108,7 @@ class FileReader { // PHP 5.1.1 does not read more than 8192 bytes in one fread() // the discussions at PHP Bugs suggest it's the intended behaviour + $data = ''; while ($bytes > 0) { $chunk = fread($this->_fd, $bytes); $data .= $chunk; -- cgit v1.2.3-54-g00ecf From 8246977ef00970f76da28500e40f170e68544bf9 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Tue, 18 Aug 2009 21:21:57 -0700 Subject: kill stupid Finder metadata file that made it into my checkin presumably due to 'git add php-gettext' deciding to find all hidden files in the directory for me :P --- extlib/php-gettext/.DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 extlib/php-gettext/.DS_Store diff --git a/extlib/php-gettext/.DS_Store b/extlib/php-gettext/.DS_Store deleted file mode 100644 index 5008ddfcf..000000000 Binary files a/extlib/php-gettext/.DS_Store and /dev/null differ -- cgit v1.2.3-54-g00ecf From 0615fda25e81d686c7d7a67b4d0674716eeb5929 Mon Sep 17 00:00:00 2001 From: Craig Andrews Date: Fri, 21 Aug 2009 20:01:33 -0400 Subject: URLs surrounded by (),{}, and [] are correctly handled now! --- lib/util.php | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/lib/util.php b/lib/util.php index 4e809029f..575e796f1 100644 --- a/lib/util.php +++ b/lib/util.php @@ -412,13 +412,13 @@ function common_render_text($text) function common_replace_urls_callback($text, $callback, $notice_id = null) { // Start off with a regex $regex = '#'. - '(?:^|\s+)('. + '(?:^|[\s\(\)\[\]\{\}]+)('. '(?:'. //Known protocols '(?:'. '(?:https?|ftps?|mms|rtsp|gopher|news|nntp|telnet|wais|file|prospero|webcal|irc)://'. '|'. '(?:mailto|aim|tel|xmpp):'. - ')\S+'. + ')[^\s\(\)\[\]\{\}]+'. ')'. '|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'. //IPv4 '|(?:'. //IPv6 @@ -442,25 +442,23 @@ function common_replace_urls_callback($text, $callback, $notice_id = null) { ')|(?:'. //DNS '\S+\.(?:museum|travel|onion|local|[a-z]{2,4})'. ')'. - '(?:[:/]\S*)?'. - ')(?:$|\s+)'. + '([^\s\(\)\[\]\{\}]*)'. + ')'. '#ix'; - -//preg_match_all($regex,$text,$matches); -//print_r($matches); -//die("here"); return preg_replace_callback($regex, curry(callback_helper,$callback,$notice_id) ,$text); } function callback_helper($matches, $callback, $notice_id) { - $spaces_left = (strlen($matches[0]) - strlen(ltrim($matches[0]))); - $spaces_right = (strlen($matches[0]) - strlen(rtrim($matches[0]))); + $pos = strpos($matches[0],$matches[1]); + $left = substr($matches[0],0,$pos); + $right = substr($matches[0],$pos+strlen($matches[1])); + if(empty($notice_id)){ $result = call_user_func_array($callback,$matches[1]); }else{ $result = call_user_func_array($callback, array($matches[1],$notice_id) ); } - return str_repeat(' ',$spaces_left) . $result . str_repeat(' ',$spaces_right); + return $left . $result . $right; } function curry($fn) { -- cgit v1.2.3-54-g00ecf From 579a41b56f3d11f77d837b286753fd7ac528590f Mon Sep 17 00:00:00 2001 From: Craig Andrews Date: Fri, 21 Aug 2009 21:11:23 -0400 Subject: Improve url finding more. Properly end urls when a space is caught. --- lib/util.php | 65 +++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 36 insertions(+), 29 deletions(-) diff --git a/lib/util.php b/lib/util.php index 575e796f1..091533afb 100644 --- a/lib/util.php +++ b/lib/util.php @@ -412,37 +412,44 @@ function common_render_text($text) function common_replace_urls_callback($text, $callback, $notice_id = null) { // Start off with a regex $regex = '#'. - '(?:^|[\s\(\)\[\]\{\}]+)('. - '(?:'. //Known protocols - '(?:'. - '(?:https?|ftps?|mms|rtsp|gopher|news|nntp|telnet|wais|file|prospero|webcal|irc)://'. - '|'. - '(?:mailto|aim|tel|xmpp):'. - ')[^\s\(\)\[\]\{\}]+'. + '(?:^|[\s\(\)\[\]\{\}]+)'. + '('. + '(?:'. + '(?:'. //Known protocols + '(?:'. + '(?:https?|ftps?|mms|rtsp|gopher|news|nntp|telnet|wais|file|prospero|webcal|irc)://'. + '|'. + '(?:mailto|aim|tel|xmpp):'. + ')[^\s\/]+'. + ')'. + '|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'. //IPv4 + '|(?:'. //IPv6 + '(?:[0-9a-f]{1,4}:){1,1}(?::[0-9a-f]{1,4}){1,6}|'. + '(?:[0-9a-f]{1,4}:){1,2}(?::[0-9a-f]{1,4}){1,5}|'. + '(?:[0-9a-f]{1,4}:){1,3}(?::[0-9a-f]{1,4}){1,4}|'. + '(?:[0-9a-f]{1,4}:){1,4}(?::[0-9a-f]{1,4}){1,3}|'. + '(?:[0-9a-f]{1,4}:){1,5}(?::[0-9a-f]{1,4}){1,2}|'. + '(?:[0-9a-f]{1,4}:){1,6}(?::[0-9a-f]{1,4}){1,1}|'. + '(?:(?:[0-9a-f]{1,4}:){1,7}|:):|'. + ':(?::[0-9a-f]{1,4}){1,7}|'. + '(?:(?:(?:[0-9a-f]{1,4}:){6})(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|'. + '(?:(?:[0-9a-f]{1,4}:){5}[0-9a-f]{1,4}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|'. + '(?:[0-9a-f]{1,4}:){5}:[0-9a-f]{1,4}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|'. + '(?:[0-9a-f]{1,4}:){1,1}(?::[0-9a-f]{1,4}){1,4}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|'. + '(?:[0-9a-f]{1,4}:){1,2}(?::[0-9a-f]{1,4}){1,3}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|'. + '(?:[0-9a-f]{1,4}:){1,3}(?::[0-9a-f]{1,4}){1,2}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|'. + '(?:[0-9a-f]{1,4}:){1,4}(?::[0-9a-f]{1,4}){1,1}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|'. + '(?:(?:[0-9a-f]{1,4}:){1,5}|:):(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|'. + ':(?::[0-9a-f]{1,4}){1,5}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}'. + ')|(?:'. //DNS + '\S+\.(?:museum|travel|onion|local|[a-z]{2,4})'. + ')'. ')'. - '|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'. //IPv4 - '|(?:'. //IPv6 - '(?:[0-9a-f]{1,4}:){1,1}(?::[0-9a-f]{1,4}){1,6}|'. - '(?:[0-9a-f]{1,4}:){1,2}(?::[0-9a-f]{1,4}){1,5}|'. - '(?:[0-9a-f]{1,4}:){1,3}(?::[0-9a-f]{1,4}){1,4}|'. - '(?:[0-9a-f]{1,4}:){1,4}(?::[0-9a-f]{1,4}){1,3}|'. - '(?:[0-9a-f]{1,4}:){1,5}(?::[0-9a-f]{1,4}){1,2}|'. - '(?:[0-9a-f]{1,4}:){1,6}(?::[0-9a-f]{1,4}){1,1}|'. - '(?:(?:[0-9a-f]{1,4}:){1,7}|:):|'. - ':(?::[0-9a-f]{1,4}){1,7}|'. - '(?:(?:(?:[0-9a-f]{1,4}:){6})(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|'. - '(?:(?:[0-9a-f]{1,4}:){5}[0-9a-f]{1,4}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|'. - '(?:[0-9a-f]{1,4}:){5}:[0-9a-f]{1,4}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|'. - '(?:[0-9a-f]{1,4}:){1,1}(?::[0-9a-f]{1,4}){1,4}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|'. - '(?:[0-9a-f]{1,4}:){1,2}(?::[0-9a-f]{1,4}){1,3}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|'. - '(?:[0-9a-f]{1,4}:){1,3}(?::[0-9a-f]{1,4}){1,2}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|'. - '(?:[0-9a-f]{1,4}:){1,4}(?::[0-9a-f]{1,4}){1,1}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|'. - '(?:(?:[0-9a-f]{1,4}:){1,5}|:):(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|'. - ':(?::[0-9a-f]{1,4}){1,5}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}'. - ')|(?:'. //DNS - '\S+\.(?:museum|travel|onion|local|[a-z]{2,4})'. + '(?:'. + '$|(?:'. + '/[^\s\(\)\[\]\{\}]*'. + ')'. ')'. - '([^\s\(\)\[\]\{\}]*)'. ')'. '#ix'; return preg_replace_callback($regex, curry(callback_helper,$callback,$notice_id) ,$text); -- cgit v1.2.3-54-g00ecf From 86ba7b13c2c48280fe371b81ffa14a8b387cd61b Mon Sep 17 00:00:00 2001 From: Craig Andrews Date: Fri, 21 Aug 2009 22:58:43 -0400 Subject: Finally got the IPv6 regex right in the url finder --- lib/util.php | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/lib/util.php b/lib/util.php index 091533afb..2be4213e7 100644 --- a/lib/util.php +++ b/lib/util.php @@ -423,24 +423,8 @@ function common_replace_urls_callback($text, $callback, $notice_id = null) { ')[^\s\/]+'. ')'. '|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'. //IPv4 - '|(?:'. //IPv6 - '(?:[0-9a-f]{1,4}:){1,1}(?::[0-9a-f]{1,4}){1,6}|'. - '(?:[0-9a-f]{1,4}:){1,2}(?::[0-9a-f]{1,4}){1,5}|'. - '(?:[0-9a-f]{1,4}:){1,3}(?::[0-9a-f]{1,4}){1,4}|'. - '(?:[0-9a-f]{1,4}:){1,4}(?::[0-9a-f]{1,4}){1,3}|'. - '(?:[0-9a-f]{1,4}:){1,5}(?::[0-9a-f]{1,4}){1,2}|'. - '(?:[0-9a-f]{1,4}:){1,6}(?::[0-9a-f]{1,4}){1,1}|'. - '(?:(?:[0-9a-f]{1,4}:){1,7}|:):|'. - ':(?::[0-9a-f]{1,4}){1,7}|'. - '(?:(?:(?:[0-9a-f]{1,4}:){6})(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|'. - '(?:(?:[0-9a-f]{1,4}:){5}[0-9a-f]{1,4}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3})|'. - '(?:[0-9a-f]{1,4}:){5}:[0-9a-f]{1,4}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|'. - '(?:[0-9a-f]{1,4}:){1,1}(?::[0-9a-f]{1,4}){1,4}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|'. - '(?:[0-9a-f]{1,4}:){1,2}(?::[0-9a-f]{1,4}){1,3}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|'. - '(?:[0-9a-f]{1,4}:){1,3}(?::[0-9a-f]{1,4}){1,2}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|'. - '(?:[0-9a-f]{1,4}:){1,4}(?::[0-9a-f]{1,4}){1,1}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|'. - '(?:(?:[0-9a-f]{1,4}:){1,5}|:):(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}|'. - ':(?::[0-9a-f]{1,4}){1,5}:(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)(?:\.(?:25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}'. + '|(?:'. //IPv6 + '(?:(?:(?:[0-9A-Fa-f]{1,4}:){7}(?:(?:[0-9A-Fa-f]{1,4})|:))|(?:(?:[0-9A-Fa-f]{1,4}:){6}(?::|(?:(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})(?:\.(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})|(?::[0-9A-Fa-f]{1,4})))|(?:(?:[0-9A-Fa-f]{1,4}:){5}(?:(?::(?:(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})(?:\.(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|(?:(?::[0-9A-Fa-f]{1,4}){1,2})))|(?:(?:[0-9A-Fa-f]{1,4}:){4}(?::[0-9A-Fa-f]{1,4}){0,1}(?:(?::(?:(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})(?:\.(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|(?:(?::[0-9A-Fa-f]{1,4}){1,2})))|(?:(?:[0-9A-Fa-f]{1,4}:){3}(?::[0-9A-Fa-f]{1,4}){0,2}(?:(?::(?:(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})(?:\.(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|(?:(?::[0-9A-Fa-f]{1,4}){1,2})))|(?:(?:[0-9A-Fa-f]{1,4}:){2}(?::[0-9A-Fa-f]{1,4}){0,3}(?:(?::(?:(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})(?:\.(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|(?:(?::[0-9A-Fa-f]{1,4}){1,2})))|(?:(?:[0-9A-Fa-f]{1,4}:)(?::[0-9A-Fa-f]{1,4}){0,4}(?:(?::(?:(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})(?:\.(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|(?:(?::[0-9A-Fa-f]{1,4}){1,2})))|(?::(?::[0-9A-Fa-f]{1,4}){0,5}(?:(?::(?:(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})(?:\.(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})?)|(?:(?::[0-9A-Fa-f]{1,4}){1,2})))|(?:(?:(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})(?:\.(?:25[0-5]|2[0-4]\d|[01]?\d{1,2})){3})))'. ')|(?:'. //DNS '\S+\.(?:museum|travel|onion|local|[a-z]{2,4})'. ')'. -- cgit v1.2.3-54-g00ecf From f3cdc7f272e409d391979d3e6c58dd63573530c0 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 24 Aug 2009 15:46:12 -0400 Subject: Add unit test directory and first test --- tests/URLDetectionTest.php | 189 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 tests/URLDetectionTest.php diff --git a/tests/URLDetectionTest.php b/tests/URLDetectionTest.php new file mode 100644 index 000000000..f35b03eaf --- /dev/null +++ b/tests/URLDetectionTest.php @@ -0,0 +1,189 @@ +assertEquals($expected, $rendered); + } + + static public function provider() + { + return array( + array('example', + 'example'), + array('http://example', + 'http://example'), + array('http://example/', + 'http://example/'), + array('http://example/path', + 'http://example/path'), + array('http://example.com', + 'http://example.com'), + array('https://example.com', + 'https://example.com'), + array('ftp://example.com', + 'ftp://example.com'), + array('ftps://example.com', + 'ftps://example.com'), + array('http://user@example.com', + 'http://user@example.com'), + array('http://user:pass@example.com', + 'http://user:pass@example.com'), + array('http://example.com:8080', + 'http://example.com:8080'), + array('http://www.example.com', + 'http://www.example.com'), + array('http://example.com/', + 'http://example.com/'), + array('http://example.com/path', + 'http://example.com/path'), + array('http://example.com/path.html', + 'http://example.com/path.html'), + array('http://example.com/path.html#fragment', + 'http://example.com/path.html#fragment'), + array('http://example.com/path.php?foo=bar&bar=foo', + 'http://example.com/path.php?foo=bar&bar=foo'), + array('http://müllärör.de', + 'http://müllärör.de'), + array('http://ﺱﺲﺷ.com', + 'http://ﺱﺲﺷ.com'), + array('http://сделаткартинки.com', + 'http://сделаткартинки.com'), + array('http://tūdaliņ.lv', + 'http://tūdaliņ.lv'), + array('http://brændendekærlighed.com', + 'http://brændendekærlighed.com'), + array('http://あーるいん.com', + 'http://あーるいん.com'), + array('http://예비교사.com', + 'http://예비교사.com'), + array('http://example.com.', + 'http://example.com.'), + array('http://example.com?', + 'http://example.com?'), + array('http://example.com!', + 'http://example.com!'), + array('http://example.com,', + 'http://example.com,'), + array('http://example.com;', + 'http://example.com;'), + array('http://example.com:', + 'http://example.com:'), + array('\'http://example.com\'', + '\'http://example.com\''), + array('"http://example.com"', + '"http://example.com"'), + array('http://example.com ', + 'http://example.com'), + array('(http://example.com)', + '(http://example.com)'), + array('[http://example.com]', + '[http://example.com]'), + array('', + '<http://example.com>'), + array('http://example.com/path/(foo)/bar', + 'http://example.com/path/(foo)/bar'), + array('http://example.com/path/[foo]/bar', + 'http://example.com/path/[foo]/bar'), + array('http://example.com/path/foo/(bar)', + 'http://example.com/path/foo/(bar)'), + array('http://example.com/path/foo/[bar]', + 'http://example.com/path/foo/[bar]'), + array('Hey, check out my cool site http://example.com okay?', + 'Hey, check out my cool site http://example.com okay?'), + array('What about parens (e.g. http://example.com/path/foo/(bar))?', + 'What about parens (e.g. http://example.com/path/foo/(bar))?'), + array('What about parens (e.g. http://example.com/path/foo/(bar)?', + 'What about parens (e.g. http://example.com/path/foo/(bar)?'), + array('What about parens (e.g. http://example.com/path/foo/(bar).)?', + 'What about parens (e.g. http://example.com/path/foo/(bar).)?'), + array('What about parens (e.g. http://example.com/path/(foo,bar)?', + 'What about parens (e.g. http://example.com/path/(foo,bar)?'), + array('Unbalanced too (e.g. http://example.com/path/((((foo)/bar)?', + 'Unbalanced too (e.g. http://example.com/path/((((foo)/bar)?'), + array('Unbalanced too (e.g. http://example.com/path/(foo))))/bar)?', + 'Unbalanced too (e.g. http://example.com/path/(foo))))/bar)?'), + array('Unbalanced too (e.g. http://example.com/path/foo/((((bar)?', + 'Unbalanced too (e.g. http://example.com/path/foo/((((bar)?'), + array('Unbalanced too (e.g. http://example.com/path/foo/(bar))))?', + 'Unbalanced too (e.g. http://example.com/path/foo/(bar))))?'), + array('example.com', + 'example.com'), + array('example.org', + 'example.org'), + array('example.co.uk', + 'example.co.uk'), + array('www.example.co.uk', + 'www.example.co.uk'), + array('farm1.images.example.co.uk', + 'farm1.images.example.co.uk'), + array('example.museum', + 'example.museum'), + array('example.travel', + 'example.travel'), + array('example.com.', + 'example.com.'), + array('example.com?', + 'example.com?'), + array('example.com!', + 'example.com!'), + array('example.com,', + 'example.com,'), + array('example.com;', + 'example.com;'), + array('example.com:', + 'example.com:'), + array('\'example.com\'', + '\'example.com\''), + array('"example.com"', + '"example.com"'), + array('example.com ', + 'example.com'), + array('(example.com)', + '(example.com)'), + array('[example.com]', + '[example.com]'), + array('', + '<example.com>'), + array('Hey, check out my cool site example.com okay?', + 'Hey, check out my cool site example.com okay?'), + array('Hey, check out my cool site example.com.I made it.', + 'Hey, check out my cool site example.com.I made it.'), + array('Hey, check out my cool site example.com.Funny thing...', + 'Hey, check out my cool site example.com.Funny thing...'), + array('Hey, check out my cool site example.com.You will love it.', + 'Hey, check out my cool site example.com.You will love it.'), + array('What about parens (e.g. example.com/path/foo/(bar))?', + 'What about parens (e.g. example.com/path/foo/(bar))?'), + array('What about parens (e.g. example.com/path/foo/(bar)?', + 'What about parens (e.g. example.com/path/foo/(bar)?'), + array('What about parens (e.g. example.com/path/foo/(bar).)?', + 'What about parens (e.g. example.com/path/foo/(bar).)?'), + array('What about parens (e.g. example.com/path/(foo,bar)?', + 'What about parens (e.g. example.com/path/(foo,bar)?'), + array('file.ext', + 'file.ext'), + array('file.html', + 'file.html'), + array('file.php', + 'file.php') + ); + } +} + -- cgit v1.2.3-54-g00ecf From 6bae2ad03a538c8c301b173b0dd6845aa181f3c5 Mon Sep 17 00:00:00 2001 From: Brenda Wallace Date: Tue, 25 Aug 2009 09:14:43 +1200 Subject: fix up tpl/index.php so doesn't throw errors on hosts with php shorttags on --- tpl/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tpl/index.php b/tpl/index.php index be375e75a..36a161144 100644 --- a/tpl/index.php +++ b/tpl/index.php @@ -1,4 +1,4 @@ - +xml version="1.0" encoding="UTF-8"?> <?php echo section('title'); ?> -- cgit v1.2.3-54-g00ecf From 008a4898c8f3b2624bde54517a54ac64c4ad354d Mon Sep 17 00:00:00 2001 From: Brenda Wallace Date: Mon, 24 Aug 2009 20:03:22 +1200 Subject: moved template folder into it's own method, so can be overridden --- plugins/TemplatePlugin.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/plugins/TemplatePlugin.php b/plugins/TemplatePlugin.php index 03daf6219..6c14f1988 100644 --- a/plugins/TemplatePlugin.php +++ b/plugins/TemplatePlugin.php @@ -198,13 +198,13 @@ class TemplatePlugin extends Plugin { // unless laconica config: // $config['template']['mode'] = 'html'; if (!(common_config('template', 'mode') == 'html')) { - $tpl_file = 'tpl/index.php'; + $tpl_file = $this->templateFolder() . '/index.php'; $tags = array_merge($vars,$this->blocks); include $tpl_file; return; } - $tpl_file = 'tpl/index.html'; + $tpl_file = $this->templateFolder() . '/index.html'; // read the static template $output = file_get_contents( $tpl_file ); @@ -236,6 +236,9 @@ class TemplatePlugin extends Plugin { return true; } + function templateFolder() { + return 'tpl'; + } // catching the StartShowHTML event to halt the rendering function onStartShowHTML( &$act ) { @@ -300,7 +303,7 @@ class TemplateAction extends Action $this->clientError(_('only User #1 can update the template'), $code = 401); // open the old template - $tpl_file = 'tpl/index.html'; + $tpl_file = $this->templateFolder() . '/index.html'; $fp = fopen( $tpl_file, 'w+' ); // overwrite with the new template -- cgit v1.2.3-54-g00ecf From eceffc4c01acd8e07cdb3b0a8591a7e65e5317be Mon Sep 17 00:00:00 2001 From: Brenda Wallace Date: Tue, 25 Aug 2009 09:23:09 +1200 Subject: ignore the local folder --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 5394f5eac..1cde3a625 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ avatar/* background/* files/* file/* +local/* _darcs/* logs/* config.php -- cgit v1.2.3-54-g00ecf From add42759c9ae1e8d765fa2098bd12ff8ba4d4eea Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 24 Aug 2009 17:48:24 -0400 Subject: change class to rel in unit tests for URL check --- tests/URLDetectionTest.php | 144 ++++++++++++++++++++++----------------------- 1 file changed, 72 insertions(+), 72 deletions(-) diff --git a/tests/URLDetectionTest.php b/tests/URLDetectionTest.php index f35b03eaf..ed29dc88e 100644 --- a/tests/URLDetectionTest.php +++ b/tests/URLDetectionTest.php @@ -34,149 +34,149 @@ class URLDetectionTest extends PHPUnit_Framework_TestCase array('http://example/path', 'http://example/path'), array('http://example.com', - 'http://example.com'), + 'http://example.com'), array('https://example.com', - 'https://example.com'), + 'https://example.com'), array('ftp://example.com', - 'ftp://example.com'), + 'ftp://example.com'), array('ftps://example.com', - 'ftps://example.com'), + 'ftps://example.com'), array('http://user@example.com', - 'http://user@example.com'), + 'http://user@example.com'), array('http://user:pass@example.com', - 'http://user:pass@example.com'), + 'http://user:pass@example.com'), array('http://example.com:8080', - 'http://example.com:8080'), + 'http://example.com:8080'), array('http://www.example.com', - 'http://www.example.com'), + 'http://www.example.com'), array('http://example.com/', - 'http://example.com/'), + 'http://example.com/'), array('http://example.com/path', - 'http://example.com/path'), + 'http://example.com/path'), array('http://example.com/path.html', - 'http://example.com/path.html'), + 'http://example.com/path.html'), array('http://example.com/path.html#fragment', - 'http://example.com/path.html#fragment'), + 'http://example.com/path.html#fragment'), array('http://example.com/path.php?foo=bar&bar=foo', - 'http://example.com/path.php?foo=bar&bar=foo'), + 'http://example.com/path.php?foo=bar&bar=foo'), array('http://müllärör.de', - 'http://müllärör.de'), + 'http://müllärör.de'), array('http://ﺱﺲﺷ.com', - 'http://ﺱﺲﺷ.com'), + 'http://ﺱﺲﺷ.com'), array('http://сделаткартинки.com', - 'http://сделаткартинки.com'), + 'http://сделаткартинки.com'), array('http://tūdaliņ.lv', - 'http://tūdaliņ.lv'), + 'http://tūdaliņ.lv'), array('http://brændendekærlighed.com', - 'http://brændendekærlighed.com'), + 'http://brændendekærlighed.com'), array('http://あーるいん.com', - 'http://あーるいん.com'), + 'http://あーるいん.com'), array('http://예비교사.com', - 'http://예비교사.com'), + 'http://예비교사.com'), array('http://example.com.', - 'http://example.com.'), + 'http://example.com.'), array('http://example.com?', - 'http://example.com?'), + 'http://example.com?'), array('http://example.com!', - 'http://example.com!'), + 'http://example.com!'), array('http://example.com,', - 'http://example.com,'), + 'http://example.com,'), array('http://example.com;', - 'http://example.com;'), + 'http://example.com;'), array('http://example.com:', - 'http://example.com:'), + 'http://example.com:'), array('\'http://example.com\'', - '\'http://example.com\''), + '\'http://example.com\''), array('"http://example.com"', - '"http://example.com"'), + '"http://example.com"'), array('http://example.com ', - 'http://example.com'), + 'http://example.com'), array('(http://example.com)', - '(http://example.com)'), + '(http://example.com)'), array('[http://example.com]', - '[http://example.com]'), + '[http://example.com]'), array('', - '<http://example.com>'), + '<http://example.com>'), array('http://example.com/path/(foo)/bar', - 'http://example.com/path/(foo)/bar'), + 'http://example.com/path/(foo)/bar'), array('http://example.com/path/[foo]/bar', - 'http://example.com/path/[foo]/bar'), + 'http://example.com/path/[foo]/bar'), array('http://example.com/path/foo/(bar)', - 'http://example.com/path/foo/(bar)'), + 'http://example.com/path/foo/(bar)'), array('http://example.com/path/foo/[bar]', - 'http://example.com/path/foo/[bar]'), + 'http://example.com/path/foo/[bar]'), array('Hey, check out my cool site http://example.com okay?', - 'Hey, check out my cool site http://example.com okay?'), + 'Hey, check out my cool site http://example.com okay?'), array('What about parens (e.g. http://example.com/path/foo/(bar))?', - 'What about parens (e.g. http://example.com/path/foo/(bar))?'), + 'What about parens (e.g. http://example.com/path/foo/(bar))?'), array('What about parens (e.g. http://example.com/path/foo/(bar)?', - 'What about parens (e.g. http://example.com/path/foo/(bar)?'), + 'What about parens (e.g. http://example.com/path/foo/(bar)?'), array('What about parens (e.g. http://example.com/path/foo/(bar).)?', - 'What about parens (e.g. http://example.com/path/foo/(bar).)?'), + 'What about parens (e.g. http://example.com/path/foo/(bar).)?'), array('What about parens (e.g. http://example.com/path/(foo,bar)?', - 'What about parens (e.g. http://example.com/path/(foo,bar)?'), + 'What about parens (e.g. http://example.com/path/(foo,bar)?'), array('Unbalanced too (e.g. http://example.com/path/((((foo)/bar)?', - 'Unbalanced too (e.g. http://example.com/path/((((foo)/bar)?'), + 'Unbalanced too (e.g. http://example.com/path/((((foo)/bar)?'), array('Unbalanced too (e.g. http://example.com/path/(foo))))/bar)?', - 'Unbalanced too (e.g. http://example.com/path/(foo))))/bar)?'), + 'Unbalanced too (e.g. http://example.com/path/(foo))))/bar)?'), array('Unbalanced too (e.g. http://example.com/path/foo/((((bar)?', - 'Unbalanced too (e.g. http://example.com/path/foo/((((bar)?'), + 'Unbalanced too (e.g. http://example.com/path/foo/((((bar)?'), array('Unbalanced too (e.g. http://example.com/path/foo/(bar))))?', - 'Unbalanced too (e.g. http://example.com/path/foo/(bar))))?'), + 'Unbalanced too (e.g. http://example.com/path/foo/(bar))))?'), array('example.com', - 'example.com'), + 'example.com'), array('example.org', - 'example.org'), + 'example.org'), array('example.co.uk', - 'example.co.uk'), + 'example.co.uk'), array('www.example.co.uk', - 'www.example.co.uk'), + 'www.example.co.uk'), array('farm1.images.example.co.uk', - 'farm1.images.example.co.uk'), + 'farm1.images.example.co.uk'), array('example.museum', - 'example.museum'), + 'example.museum'), array('example.travel', - 'example.travel'), + 'example.travel'), array('example.com.', - 'example.com.'), + 'example.com.'), array('example.com?', - 'example.com?'), + 'example.com?'), array('example.com!', - 'example.com!'), + 'example.com!'), array('example.com,', - 'example.com,'), + 'example.com,'), array('example.com;', - 'example.com;'), + 'example.com;'), array('example.com:', - 'example.com:'), + 'example.com:'), array('\'example.com\'', - '\'example.com\''), + '\'example.com\''), array('"example.com"', - '"example.com"'), + '"example.com"'), array('example.com ', - 'example.com'), + 'example.com'), array('(example.com)', - '(example.com)'), + '(example.com)'), array('[example.com]', - '[example.com]'), + '[example.com]'), array('', - '<example.com>'), + '<example.com>'), array('Hey, check out my cool site example.com okay?', - 'Hey, check out my cool site example.com okay?'), + 'Hey, check out my cool site example.com okay?'), array('Hey, check out my cool site example.com.I made it.', - 'Hey, check out my cool site example.com.I made it.'), + 'Hey, check out my cool site example.com.I made it.'), array('Hey, check out my cool site example.com.Funny thing...', - 'Hey, check out my cool site example.com.Funny thing...'), + 'Hey, check out my cool site example.com.Funny thing...'), array('Hey, check out my cool site example.com.You will love it.', - 'Hey, check out my cool site example.com.You will love it.'), + 'Hey, check out my cool site example.com.You will love it.'), array('What about parens (e.g. example.com/path/foo/(bar))?', - 'What about parens (e.g. example.com/path/foo/(bar))?'), + 'What about parens (e.g. example.com/path/foo/(bar))?'), array('What about parens (e.g. example.com/path/foo/(bar)?', - 'What about parens (e.g. example.com/path/foo/(bar)?'), + 'What about parens (e.g. example.com/path/foo/(bar)?'), array('What about parens (e.g. example.com/path/foo/(bar).)?', - 'What about parens (e.g. example.com/path/foo/(bar).)?'), + 'What about parens (e.g. example.com/path/foo/(bar).)?'), array('What about parens (e.g. example.com/path/(foo,bar)?', - 'What about parens (e.g. example.com/path/(foo,bar)?'), + 'What about parens (e.g. example.com/path/(foo,bar)?'), array('file.ext', 'file.ext'), array('file.html', -- cgit v1.2.3-54-g00ecf From 9fd3a41576bd5365f9156b47490eecddfb2aa842 Mon Sep 17 00:00:00 2001 From: Craig Andrews Date: Mon, 24 Aug 2009 20:44:06 -0400 Subject: ftps protocol should be handled the same way as ftp Canon urls that have a protocol followed by a host (and no path) automatcally get a trailing slash by the canon function - make the unit test match that --- classes/File_redirection.php | 2 +- tests/URLDetectionTest.php | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/classes/File_redirection.php b/classes/File_redirection.php index d6fa0bcb6..363e3b947 100644 --- a/classes/File_redirection.php +++ b/classes/File_redirection.php @@ -182,7 +182,7 @@ class File_redirection extends Memcached_DataObject } } - if (('ftp' == $p['scheme']) || ('http' == $p['scheme']) || ('https' == $p['scheme'])) { + if (('ftp' == $p['scheme']) || ('ftps' == $p['scheme']) || ('http' == $p['scheme']) || ('https' == $p['scheme'])) { if (empty($p['host'])) return false; if (empty($p['path'])) { $out_url .= '/'; diff --git a/tests/URLDetectionTest.php b/tests/URLDetectionTest.php index ed29dc88e..e69f1a2c3 100644 --- a/tests/URLDetectionTest.php +++ b/tests/URLDetectionTest.php @@ -28,27 +28,27 @@ class URLDetectionTest extends PHPUnit_Framework_TestCase array('example', 'example'), array('http://example', - 'http://example'), + 'http://example'), array('http://example/', - 'http://example/'), + 'http://example/'), array('http://example/path', - 'http://example/path'), + 'http://example/path'), array('http://example.com', - 'http://example.com'), + 'http://example.com'), array('https://example.com', - 'https://example.com'), + 'https://example.com'), array('ftp://example.com', - 'ftp://example.com'), + 'ftp://example.com'), array('ftps://example.com', - 'ftps://example.com'), + 'ftps://example.com'), array('http://user@example.com', - 'http://user@example.com'), + 'http://user@example.com'), array('http://user:pass@example.com', - 'http://user:pass@example.com'), + 'http://user:pass@example.com'), array('http://example.com:8080', - 'http://example.com:8080'), + 'http://example.com:8080'), array('http://www.example.com', - 'http://www.example.com'), + 'http://www.example.com'), array('http://example.com/', 'http://example.com/'), array('http://example.com/path', @@ -58,7 +58,7 @@ class URLDetectionTest extends PHPUnit_Framework_TestCase array('http://example.com/path.html#fragment', 'http://example.com/path.html#fragment'), array('http://example.com/path.php?foo=bar&bar=foo', - 'http://example.com/path.php?foo=bar&bar=foo'), + 'http://example.com/path.php?foo=bar&bar=foo'), array('http://müllärör.de', 'http://müllärör.de'), array('http://ﺱﺲﺷ.com', -- cgit v1.2.3-54-g00ecf From 3ff67b3bc185be255d0b54f7f9af7c9578b4330b Mon Sep 17 00:00:00 2001 From: Brenda Wallace Date: Tue, 25 Aug 2009 10:33:16 +1200 Subject: beginning of hashtag tests --- tests/HashTagDetectionTest.php | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 tests/HashTagDetectionTest.php diff --git a/tests/HashTagDetectionTest.php b/tests/HashTagDetectionTest.php new file mode 100644 index 000000000..71137b0b5 --- /dev/null +++ b/tests/HashTagDetectionTest.php @@ -0,0 +1,35 @@ +assertEquals($expected, $rendered); + } + + static public function provider() + { + return array( + array('hello', + 'hello'), + array('#hello', + 'hello'), + ); + } +} + -- cgit v1.2.3-54-g00ecf From 6a3a25b5a2b65e54841cc60c4f2254f6d7b6b54b Mon Sep 17 00:00:00 2001 From: Craig Andrews Date: Tue, 25 Aug 2009 11:21:45 -0400 Subject: Improved the URL tests, and improve the matcher so more tests are passed. The remaining failing tests I believe are incorrect. --- lib/util.php | 24 ++++---- tests/URLDetectionTest.php | 143 ++++++++++++++++++++++++++++++--------------- 2 files changed, 110 insertions(+), 57 deletions(-) diff --git a/lib/util.php b/lib/util.php index 2be4213e7..ee3fe5ddc 100644 --- a/lib/util.php +++ b/lib/util.php @@ -412,30 +412,34 @@ function common_render_text($text) function common_replace_urls_callback($text, $callback, $notice_id = null) { // Start off with a regex $regex = '#'. - '(?:^|[\s\(\)\[\]\{\}]+)'. - '('. + '(?:^|[\s\(\)\[\]\{\}\\\'\\\";]+)(?![\@\!\#])'. + '('. '(?:'. '(?:'. //Known protocols '(?:'. '(?:https?|ftps?|mms|rtsp|gopher|news|nntp|telnet|wais|file|prospero|webcal|irc)://'. '|'. '(?:mailto|aim|tel|xmpp):'. - ')[^\s\/]+'. + ')'. + '(?:[\pN\pL\-\_\+]+(?:\:[\pN\pL\-\_\+]+)?\@)?'. //user:pass@ + '[\pN\pL\-\_\:\.]+(?127.0.0.1'), + array('127.0.0.1/test.php', + '127.0.0.1/test.php'), + array('http://::1/test.php', + 'http://::1/test.php'), + array('http://::1', + 'http://::1'), + array('2001:4978:1b5:0:21d:e0ff:fe66:59ab/test.php', + '2001:4978:1b5:0:21d:e0ff:fe66:59ab/test.php'), + array('2001:4978:1b5:0:21d:e0ff:fe66:59ab', + '2001:4978:1b5:0:21d:e0ff:fe66:59ab'), + array('http://127.0.0.1', + 'http://127.0.0.1'), + array('example.com', + 'example.com'), + array('example.com', + 'example.com'), + array('http://example.com', + 'http://example.com'), + array('http://example.com.', + 'http://example.com.'), + array('/var/lib/example.so', + '/var/lib/example.so'), array('example', 'example'), + array('user@example.com', + 'user@example.com'), + array('user_name+other@example.com', + 'user_name+other@example.com'), + array('mailto:user@example.com', + 'mailto:user@example.com'), + array('mailto:user@example.com?subject=test', + 'mailto:user@example.com?subject=test'), + array('#example', + '#'), + array('#example.com', + '#'), + array('#.net', + '#'), array('http://example', 'http://example'), + array('http://3xampl3', + 'http://3xampl3'), array('http://example/', 'http://example/'), array('http://example/path', @@ -47,6 +87,10 @@ class URLDetectionTest extends PHPUnit_Framework_TestCase 'http://user:pass@example.com'), array('http://example.com:8080', 'http://example.com:8080'), + array('http://example.com:8080/test.php', + 'http://example.com:8080/test.php'), + array('example.com:8080/test.php', + 'example.com:8080/test.php'), array('http://www.example.com', 'http://www.example.com'), array('http://example.com/', @@ -59,60 +103,65 @@ class URLDetectionTest extends PHPUnit_Framework_TestCase 'http://example.com/path.html#fragment'), array('http://example.com/path.php?foo=bar&bar=foo', 'http://example.com/path.php?foo=bar&bar=foo'), + array('http://example.com.', + 'http://example.com.'), array('http://müllärör.de', - 'http://müllärör.de'), + 'http://müllärör.de'), array('http://ﺱﺲﺷ.com', - 'http://ﺱﺲﺷ.com'), + 'http://ﺱﺲﺷ.com'), array('http://сделаткартинки.com', - 'http://сделаткартинки.com'), + 'http://сделаткартинки.com'), array('http://tūdaliņ.lv', - 'http://tūdaliņ.lv'), + 'http://tūdaliņ.lv'), array('http://brændendekærlighed.com', - 'http://brændendekærlighed.com'), + 'http://brændendekærlighed.com'), array('http://あーるいん.com', - 'http://あーるいん.com'), + 'http://あーるいん.com'), array('http://예비교사.com', - 'http://예비교사.com'), + 'http://예비교사.com'), array('http://example.com.', - 'http://example.com.'), + 'http://example.com.'), array('http://example.com?', - 'http://example.com?'), + 'http://example.com?'), array('http://example.com!', - 'http://example.com!'), + 'http://example.com!'), array('http://example.com,', - 'http://example.com,'), + 'http://example.com,'), array('http://example.com;', - 'http://example.com;'), + 'http://example.com;'), array('http://example.com:', - 'http://example.com:'), + 'http://example.com:'), array('\'http://example.com\'', - '\'http://example.com\''), + '\'http://example.com\''), array('"http://example.com"', - '"http://example.com"'), - array('http://example.com ', - 'http://example.com'), + '"http://example.com"'), + array('http://example.com', + 'http://example.com'), array('(http://example.com)', - '(http://example.com)'), + '(http://example.com)'), array('[http://example.com]', - '[http://example.com]'), + '[http://example.com]'), array('', - '<http://example.com>'), + '<http://example.com>'), array('http://example.com/path/(foo)/bar', 'http://example.com/path/(foo)/bar'), + //Not a valid url - urls cannot contain unencoded square brackets array('http://example.com/path/[foo]/bar', 'http://example.com/path/[foo]/bar'), array('http://example.com/path/foo/(bar)', 'http://example.com/path/foo/(bar)'), - array('http://example.com/path/foo/[bar]', - 'http://example.com/path/foo/[bar]'), + //Not a valid url - urls cannot contain unencoded square brackets + //array('http://example.com/path/foo/[bar]', + // 'http://example.com/path/foo/[bar]'), array('Hey, check out my cool site http://example.com okay?', - 'Hey, check out my cool site http://example.com okay?'), + 'Hey, check out my cool site http://example.com okay?'), array('What about parens (e.g. http://example.com/path/foo/(bar))?', 'What about parens (e.g. http://example.com/path/foo/(bar))?'), array('What about parens (e.g. http://example.com/path/foo/(bar)?', 'What about parens (e.g. http://example.com/path/foo/(bar)?'), array('What about parens (e.g. http://example.com/path/foo/(bar).)?', 'What about parens (e.g. http://example.com/path/foo/(bar).)?'), + //Not a valid url - urls cannot contain unencoded commas array('What about parens (e.g. http://example.com/path/(foo,bar)?', 'What about parens (e.g. http://example.com/path/(foo,bar)?'), array('Unbalanced too (e.g. http://example.com/path/((((foo)/bar)?', @@ -124,51 +173,51 @@ class URLDetectionTest extends PHPUnit_Framework_TestCase array('Unbalanced too (e.g. http://example.com/path/foo/(bar))))?', 'Unbalanced too (e.g. http://example.com/path/foo/(bar))))?'), array('example.com', - 'example.com'), + 'example.com'), array('example.org', - 'example.org'), + 'example.org'), array('example.co.uk', - 'example.co.uk'), + 'example.co.uk'), array('www.example.co.uk', - 'www.example.co.uk'), + 'www.example.co.uk'), array('farm1.images.example.co.uk', - 'farm1.images.example.co.uk'), + 'farm1.images.example.co.uk'), array('example.museum', - 'example.museum'), + 'example.museum'), array('example.travel', - 'example.travel'), + 'example.travel'), array('example.com.', - 'example.com.'), + 'example.com.'), array('example.com?', - 'example.com?'), + 'example.com?'), array('example.com!', - 'example.com!'), + 'example.com!'), array('example.com,', - 'example.com,'), + 'example.com,'), array('example.com;', - 'example.com;'), + 'example.com;'), array('example.com:', - 'example.com:'), + 'example.com:'), array('\'example.com\'', - '\'example.com\''), + '\'example.com\''), array('"example.com"', - '"example.com"'), - array('example.com ', - 'example.com'), + '"example.com"'), + array('example.com', + 'example.com'), array('(example.com)', - '(example.com)'), + '(example.com)'), array('[example.com]', - '[example.com]'), + '[example.com]'), array('', - '<example.com>'), + '<example.com>'), array('Hey, check out my cool site example.com okay?', - 'Hey, check out my cool site example.com okay?'), + 'Hey, check out my cool site example.com okay?'), array('Hey, check out my cool site example.com.I made it.', - 'Hey, check out my cool site example.com.I made it.'), + 'Hey, check out my cool site example.com.I made it.'), array('Hey, check out my cool site example.com.Funny thing...', - 'Hey, check out my cool site example.com.Funny thing...'), + 'Hey, check out my cool site example.com.Funny thing...'), array('Hey, check out my cool site example.com.You will love it.', - 'Hey, check out my cool site example.com.You will love it.'), + 'Hey, check out my cool site example.com.You will love it.'), array('What about parens (e.g. example.com/path/foo/(bar))?', 'What about parens (e.g. example.com/path/foo/(bar))?'), array('What about parens (e.g. example.com/path/foo/(bar)?', -- cgit v1.2.3-54-g00ecf From 210bc4248b5e0c8bd577ac51c2f8df9ac05166ae Mon Sep 17 00:00:00 2001 From: Craig Andrews Date: Tue, 25 Aug 2009 14:12:31 -0400 Subject: All tests pass except for those that require matching parens or brackets --- lib/util.php | 40 +++++++++++++++++++++++++--------------- tests/URLDetectionTest.php | 13 ++++++++++--- 2 files changed, 35 insertions(+), 18 deletions(-) diff --git a/lib/util.php b/lib/util.php index ee3fe5ddc..36d1e4c0a 100644 --- a/lib/util.php +++ b/lib/util.php @@ -413,45 +413,55 @@ function common_replace_urls_callback($text, $callback, $notice_id = null) { // Start off with a regex $regex = '#'. '(?:^|[\s\(\)\[\]\{\}\\\'\\\";]+)(?![\@\!\#])'. - '('. + '(?P'. '(?:'. '(?:'. //Known protocols '(?:'. - '(?:https?|ftps?|mms|rtsp|gopher|news|nntp|telnet|wais|file|prospero|webcal|irc)://'. + '(?:(?:https?|ftps?|mms|rtsp|gopher|news|nntp|telnet|wais|file|prospero|webcal|irc)://)'. '|'. - '(?:mailto|aim|tel|xmpp):'. + '(?:(?:mailto|aim|tel|xmpp):)'. + ')'. + '(?:[\pN\pL\-\_\+]+(?::[\pN\pL\-\_\+]+)?\@)?'. //user:pass@ + '(?:'. + '(?:'. + '\[[\pN\pL\-\_\:\.]+(?http://127.0.0.1'), array('127.0.0.1', '127.0.0.1'), + array('127.0.0.1:99', + '127.0.0.1:99'), array('127.0.0.1/test.php', '127.0.0.1/test.php'), + array('http://[::1]:99/test.php', + 'http://[::1]:99/test.php'), array('http://::1/test.php', 'http://::1/test.php'), array('http://::1', 'http://::1'), array('2001:4978:1b5:0:21d:e0ff:fe66:59ab/test.php', '2001:4978:1b5:0:21d:e0ff:fe66:59ab/test.php'), + array('[2001:4978:1b5:0:21d:e0ff:fe66:59ab]:99/test.php', + '[2001:4978:1b5:0:21d:e0ff:fe66:59ab]:99/test.php'), array('2001:4978:1b5:0:21d:e0ff:fe66:59ab', '2001:4978:1b5:0:21d:e0ff:fe66:59ab'), array('http://127.0.0.1', @@ -145,14 +153,13 @@ class URLDetectionTest extends PHPUnit_Framework_TestCase '<http://example.com>'), array('http://example.com/path/(foo)/bar', 'http://example.com/path/(foo)/bar'), - //Not a valid url - urls cannot contain unencoded square brackets array('http://example.com/path/[foo]/bar', 'http://example.com/path/[foo]/bar'), array('http://example.com/path/foo/(bar)', 'http://example.com/path/foo/(bar)'), //Not a valid url - urls cannot contain unencoded square brackets - //array('http://example.com/path/foo/[bar]', - // 'http://example.com/path/foo/[bar]'), + array('http://example.com/path/foo/[bar]', + 'http://example.com/path/foo/[bar]'), array('Hey, check out my cool site http://example.com okay?', 'Hey, check out my cool site http://example.com okay?'), array('What about parens (e.g. http://example.com/path/foo/(bar))?', -- cgit v1.2.3-54-g00ecf From ff836eb38adbff2ca01e076ac66e6fc3d5833506 Mon Sep 17 00:00:00 2001 From: Craig Andrews Date: Tue, 25 Aug 2009 14:19:05 -0400 Subject: Add UTF-8 encodings of the IDN TLDs --- lib/util.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/util.php b/lib/util.php index 36d1e4c0a..d4e2841cd 100644 --- a/lib/util.php +++ b/lib/util.php @@ -437,7 +437,7 @@ function common_replace_urls_callback($text, $callback, $notice_id = null) { '(?:[\pN\pL\-\_\+]+(?:\:[\pN\pL\-\_\+]+)?\@)?'. //user:pass@ '[\pN\pL\-\_]+(?:\.[\pN\pL\-\_]+)*\.'. //tld list from http://data.iana.org/TLD/tlds-alpha-by-domain.txt, also added local, loc, and onion - '(?:AC|AD|AE|AERO|AF|AG|AI|AL|AM|AN|AO|AQ|AR|ARPA|AS|ASIA|AT|AU|AW|AX|AZ|BA|BB|BD|BE|BF|BG|BH|BI|BIZ|BJ|BM|BN|BO|BR|BS|BT|BV|BW|BY|BZ|CA|CAT|CC|CD|CF|CG|CH|CI|CK|CL|CM|CN|CO|COM|COOP|CR|CU|CV|CX|CY|CZ|DE|DJ|DK|DM|DO|DZ|EC|EDU|EE|EG|ER|ES|ET|EU|FI|FJ|FK|FM|FO|FR|GA|GB|GD|GE|GF|GG|GH|GI|GL|GM|GN|GOV|GP|GQ|GR|GS|GT|GU|GW|GY|HK|HM|HN|HR|HT|HU|ID|IE|IL|IM|IN|INFO|INT|IO|IQ|IR|IS|IT|JE|JM|JO|JOBS|JP|KE|KG|KH|KI|KM|KN|KP|KR|KW|KY|KZ|LA|LB|LC|LI|LK|LR|LS|LT|LU|LV|LY|MA|MC|MD|ME|MG|MH|MIL|MK|ML|MM|MN|MO|MOBI|MP|MQ|MR|MS|MT|MU|MUSEUM|MV|MW|MX|MY|MZ|NA|NAME|NC|NE|NET|NF|NG|NI|NL|NO|NP|NR|NU|NZ|OM|ORG|PA|PE|PF|PG|PH|PK|PL|PM|PN|PR|PRO|PS|PT|PW|PY|QA|RE|RO|RS|RU|RW|SA|SB|SC|SD|SE|SG|SH|SI|SJ|SK|SL|SM|SN|SO|SR|ST|SU|SV|SY|SZ|TC|TD|TEL|TF|TG|TH|TJ|TK|TL|TM|TN|TO|TP|TR|TRAVEL|TT|TV|TW|TZ|UA|UG|UK|US|UY|UZ|VA|VC|VE|VG|VI|VN|VU|WF|WS|XN--0ZWM56D|XN--11B5BS3A9AJ6G|XN--80AKHBYKNJ4F|XN--9T4B11YI5A|XN--DEBA0AD|XN--G6W251D|XN--HGBK6AJ7F53BBA|XN--HLCJ6AYA9ESC7A|XN--JXALPDLP|XN--KGBECHTV|XN--ZCKZAH|YE|YT|YU|ZA|ZM|ZW|local|loc|onion)'. + '(?:AC|AD|AE|AERO|AF|AG|AI|AL|AM|AN|AO|AQ|AR|ARPA|AS|ASIA|AT|AU|AW|AX|AZ|BA|BB|BD|BE|BF|BG|BH|BI|BIZ|BJ|BM|BN|BO|BR|BS|BT|BV|BW|BY|BZ|CA|CAT|CC|CD|CF|CG|CH|CI|CK|CL|CM|CN|CO|COM|COOP|CR|CU|CV|CX|CY|CZ|DE|DJ|DK|DM|DO|DZ|EC|EDU|EE|EG|ER|ES|ET|EU|FI|FJ|FK|FM|FO|FR|GA|GB|GD|GE|GF|GG|GH|GI|GL|GM|GN|GOV|GP|GQ|GR|GS|GT|GU|GW|GY|HK|HM|HN|HR|HT|HU|ID|IE|IL|IM|IN|INFO|INT|IO|IQ|IR|IS|IT|JE|JM|JO|JOBS|JP|KE|KG|KH|KI|KM|KN|KP|KR|KW|KY|KZ|LA|LB|LC|LI|LK|LR|LS|LT|LU|LV|LY|MA|MC|MD|ME|MG|MH|MIL|MK|ML|MM|MN|MO|MOBI|MP|MQ|MR|MS|MT|MU|MUSEUM|MV|MW|MX|MY|MZ|NA|NAME|NC|NE|NET|NF|NG|NI|NL|NO|NP|NR|NU|NZ|OM|ORG|PA|PE|PF|PG|PH|PK|PL|PM|PN|PR|PRO|PS|PT|PW|PY|QA|RE|RO|RS|RU|RW|SA|SB|SC|SD|SE|SG|SH|SI|SJ|SK|SL|SM|SN|SO|SR|ST|SU|SV|SY|SZ|TC|TD|TEL|TF|TG|TH|TJ|TK|TL|TM|TN|TO|TP|TR|TRAVEL|TT|TV|TW|TZ|UA|UG|UK|US|UY|UZ|VA|VC|VE|VG|VI|VN|VU|WF|WS|XN--0ZWM56D|测试|XN--11B5BS3A9AJ6G|परीक्षा|XN--80AKHBYKNJ4F|испытание|XN--9T4B11YI5A|테스트|XN--DEBA0AD|טעסט|XN--G6W251D|測試|XN--HGBK6AJ7F53BBA|آزمایشی|XN--HLCJ6AYA9ESC7A|பரிட்சை|XN--JXALPDLP|δοκιμή|XN--KGBECHTV|إختبار|XN--ZCKZAH|テスト|YE|YT|YU|ZA|ZM|ZW|local|loc|onion)'. ')(?![\pN\pL\-\_])'. ')'. '(?:'. -- cgit v1.2.3-54-g00ecf From 8cd474e985fcce754f435b8b8fa84c33a9d623e7 Mon Sep 17 00:00:00 2001 From: Craig Andrews Date: Tue, 25 Aug 2009 16:06:04 -0400 Subject: Correct the hash tag test --- tests/HashTagDetectionTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/HashTagDetectionTest.php b/tests/HashTagDetectionTest.php index 71137b0b5..55e1f65bf 100644 --- a/tests/HashTagDetectionTest.php +++ b/tests/HashTagDetectionTest.php @@ -28,7 +28,7 @@ class HashTagDetectionTest extends PHPUnit_Framework_TestCase array('hello', 'hello'), array('#hello', - 'hello'), + '#'), ); } } -- cgit v1.2.3-54-g00ecf From 31329c33aee7f3d4b5c1dd80f32fcd45e7877850 Mon Sep 17 00:00:00 2001 From: Craig Andrews Date: Tue, 25 Aug 2009 16:41:44 -0400 Subject: Handle grouping symbols ()[]{} correctly. Now passing all tests! --- lib/util.php | 50 +++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/lib/util.php b/lib/util.php index d4e2841cd..29eb6cbbc 100644 --- a/lib/util.php +++ b/lib/util.php @@ -445,7 +445,7 @@ function common_replace_urls_callback($text, $callback, $notice_id = null) { '(?:/[\pN\pL$\[\]\,\!\(\)\.\-\_\+\/\=\&\;]*)?'. // /path '(?:\?[\pN\pL\$\[\]\,\!\(\)\.\-\_\+\/\=\&\;\/]*)?'. // ?query string '(?:\#[\pN\pL$\[\]\,\!\(\)\.\-\_\+\/\=\&\;\/\?\#]*)?'. // #fragment - ')(?'(', + 'right'=>')' + ), + array( + 'left'=>'[', + 'right'=>']' + ), + array( + 'left'=>'{', + 'right'=>'}' + ) + ); + $cannotEndWith=array('.','?',',','#'); + $original_url=$url; + do{ + $original_url=$url; + foreach($groupSymbolSets as $groupSymbolSet){ + if(substr($url,-1)==$groupSymbolSet['right']){ + $group_left_count = substr_count($url,$groupSymbolSet['left']); + $group_right_count = substr_count($url,$groupSymbolSet['right']); + if($group_left_count<$group_right_count){ + $right-=1; + $url=substr($url,0,-1); + } + } + } + if(in_array(substr($url,-1),$cannotEndWith)){ + $right-=1; + $url=substr($url,0,-1); + } + }while($original_url!=$url); + + if(empty($notice_id)){ - $result = call_user_func_array($callback,$matches['url']); + $result = call_user_func_array($callback,$url); }else{ - $result = call_user_func_array($callback, array($matches['url'],$notice_id) ); + $result = call_user_func_array($callback, array($url,$notice_id) ); } - return $left . $result . $right; + return substr($matches[0],0,$left) . $result . substr($matches[0],$right); } function curry($fn) { -- cgit v1.2.3-54-g00ecf From fc89c345ed9fa7a72ce72e3b467a575580050b4f Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Tue, 25 Aug 2009 21:48:55 +0000 Subject: userdesign.go.js was incorrectly removed in commit 304db1d30b4ad96f8a2ca500d224bb1609588fed --- lib/designsettings.php | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/designsettings.php b/lib/designsettings.php index a48ec9d22..b86265971 100644 --- a/lib/designsettings.php +++ b/lib/designsettings.php @@ -326,6 +326,7 @@ class DesignSettingsAction extends AccountSettingsAction $this->script('js/farbtastic/farbtastic.js'); $this->script('js/farbtastic/farbtastic.go.js'); + $this->script('js/userdesign.go.js'); } /** -- cgit v1.2.3-54-g00ecf From a2117961be463d566c8f3c6ccd9b8e840f171804 Mon Sep 17 00:00:00 2001 From: Craig Andrews Date: Tue, 25 Aug 2009 17:52:16 -0400 Subject: Allow ({['" to preceded #tags --- lib/util.php | 2 +- tests/HashTagDetectionTest.php | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/util.php b/lib/util.php index 29eb6cbbc..7c1e21913 100644 --- a/lib/util.php +++ b/lib/util.php @@ -404,7 +404,7 @@ function common_render_text($text) $r = preg_replace('/[\x{0}-\x{8}\x{b}-\x{c}\x{e}-\x{19}]/', '', $r); $r = common_replace_urls_callback($r, 'common_linkify'); - $r = preg_replace('/(^|\(|\[|\s+)#([\pL\pN_\-\.]{1,64})/e', "'\\1#'.common_tag_link('\\2')", $r); + $r = preg_replace('/(^|\"\;|\'|\(|\[|\{|\s+)#([\pL\pN_\-\.]{1,64})/e', "'\\1#'.common_tag_link('\\2')", $r); // XXX: machine tags return $r; } diff --git a/tests/HashTagDetectionTest.php b/tests/HashTagDetectionTest.php index 55e1f65bf..901e0611c 100644 --- a/tests/HashTagDetectionTest.php +++ b/tests/HashTagDetectionTest.php @@ -27,8 +27,20 @@ class HashTagDetectionTest extends PHPUnit_Framework_TestCase return array( array('hello', 'hello'), - array('#hello', - '#'), + array('#hello people', + '# people'), + array('"#hello" people', + '"#" people'), + array('say "#hello" people', + 'say "#" people'), + array('say (#hello) people', + 'say (#) people'), + array('say [#hello] people', + 'say [#] people'), + array('say {#hello} people', + 'say {#} people'), + array('say \'#hello\' people', + 'say \'#\' people'), ); } } -- cgit v1.2.3-54-g00ecf From 3400f6f431436552d3bef81a4b25733db2cdd9b6 Mon Sep 17 00:00:00 2001 From: Brenda Wallace Date: Wed, 26 Aug 2009 10:00:29 +1200 Subject: renamed to plural, for consitency --- tests/HashTagDetectionTest.php | 35 ----------------------------------- tests/HashTagDetectionTests.php | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 35 deletions(-) delete mode 100644 tests/HashTagDetectionTest.php create mode 100644 tests/HashTagDetectionTests.php diff --git a/tests/HashTagDetectionTest.php b/tests/HashTagDetectionTest.php deleted file mode 100644 index 55e1f65bf..000000000 --- a/tests/HashTagDetectionTest.php +++ /dev/null @@ -1,35 +0,0 @@ -assertEquals($expected, $rendered); - } - - static public function provider() - { - return array( - array('hello', - 'hello'), - array('#hello', - '#'), - ); - } -} - diff --git a/tests/HashTagDetectionTests.php b/tests/HashTagDetectionTests.php new file mode 100644 index 000000000..4f0b31b0d --- /dev/null +++ b/tests/HashTagDetectionTests.php @@ -0,0 +1,35 @@ +assertEquals($expected, $rendered); + } + + static public function provider() + { + return array( + array('hello', + 'hello'), + array('#hello', + '#'), + ); + } +} + -- cgit v1.2.3-54-g00ecf From 70ef9d89fab6daaf0cf2169007475e92859d05c4 Mon Sep 17 00:00:00 2001 From: Sarven Capadisli Date: Tue, 25 Aug 2009 22:47:54 +0000 Subject: Updated rgb2hex() to handle IE. It turns out that jQuery is giving hex to IE and RGB to Firefox, Opera, Safari. Fun. --- js/userdesign.go.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/js/userdesign.go.js b/js/userdesign.go.js index c53569bea..8ddb9ec38 100644 --- a/js/userdesign.go.js +++ b/js/userdesign.go.js @@ -27,11 +27,12 @@ $(document).ready(function() { } } - /* rgb2hex written by R0bb13 */ function rgb2hex(rgb) { + if (rgb.slice(0,1) == '#') { return rgb; } rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/); return '#' + dec2hex(rgb[1]) + dec2hex(rgb[2]) + dec2hex(rgb[3]); } + /* dec2hex written by R0bb13 */ function dec2hex(x) { hexDigits = new Array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'); return isNaN(x) ? '00' : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16]; -- cgit v1.2.3-54-g00ecf From 0e3598cea950b7503b351af8fb4c59d6b029a16c Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Tue, 25 Aug 2009 20:45:09 -0700 Subject: Small update to the Facebook app section --- README | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README b/README index c13e28791..4611b06d6 100644 --- a/README +++ b/README @@ -629,10 +629,10 @@ key and secret, e.g.: In Facebook's application editor, specify the following URLs for your app: -- Callback URL: http://example.net/mublog/facebook/ -- Post-Remove URL: http://example.net/mublog/facebook/remove +- Canvas Callback URL: http://example.net/mublog/facebook/ +- Post-Remove Callback URL: http://example.net/mublog/facebook/remove - Post-Add Redirect URL: http://apps.facebook.com/yourapp/ -- Canvas URL: http://apps.facebook.com/yourapp/ +- Canvas Page URL: http://apps.facebook.com/yourapp/ (Replace 'example.net' with your host's URL, 'mublog' with the path to your Laconica installation, and 'yourapp' with the name of the -- cgit v1.2.3-54-g00ecf