[SPIP] ~v3.0.20-->v3.0.25
authorLudovic CHEVALIER <ludovic@beurresarrasin.net>
Wed, 3 May 2017 08:34:44 +0000 (10:34 +0200)
committerLudovic CHEVALIER <ludovic@beurresarrasin.net>
Wed, 3 May 2017 08:34:44 +0000 (10:34 +0200)
600 files changed:
www/CHANGELOG.txt
www/config/ecran_securite.php
www/ecrire/action/activer_plugins.php
www/ecrire/action/ajouter_lien.php
www/ecrire/action/annuler_job.php
www/ecrire/action/auth.php
www/ecrire/action/calculer_taille_cache.php
www/ecrire/action/confirmer_email.php
www/ecrire/action/confirmer_inscription.php
www/ecrire/action/converser.php
www/ecrire/action/cookie.php
www/ecrire/action/debloquer_edition.php
www/ecrire/action/desinstaller_plugin.php
www/ecrire/action/editer_article.php
www/ecrire/action/editer_auteur.php
www/ecrire/action/editer_liens.php
www/ecrire/action/editer_objet.php
www/ecrire/action/editer_rubrique.php
www/ecrire/action/etre_webmestre.php
www/ecrire/action/forcer_job.php
www/ecrire/action/iconifier.php
www/ecrire/action/inscrire_auteur.php
www/ecrire/action/instituer_langue_objet.php
www/ecrire/action/instituer_langue_rubrique.php
www/ecrire/action/instituer_objet.php
www/ecrire/action/logout.php
www/ecrire/action/menu_rubriques.php
www/ecrire/action/preferer.php
www/ecrire/action/purger.php
www/ecrire/action/purger_queue.php
www/ecrire/action/redirect.php
www/ecrire/action/referencer_traduction.php
www/ecrire/action/reorganiser.php
www/ecrire/action/session.php
www/ecrire/action/super_cron.php
www/ecrire/action/supprimer_lien.php
www/ecrire/action/supprimer_rubrique.php
www/ecrire/action/tester.php
www/ecrire/action/tester_taille.php
www/ecrire/auth/ldap.php
www/ecrire/auth/spip.php
www/ecrire/balise/configurer_metas.php
www/ecrire/balise/formulaire_.php
www/ecrire/balise/formulaire_admin.php
www/ecrire/balise/formulaire_ecrire_auteur.php
www/ecrire/balise/formulaire_inscription.php
www/ecrire/balise/info_.php
www/ecrire/balise/logo_.php
www/ecrire/balise/menu_lang.php
www/ecrire/balise/menu_lang_ecrire.php
www/ecrire/balise/url_.php
www/ecrire/balise/url_logout.php
www/ecrire/base/abstract_sql.php
www/ecrire/base/auxiliaires.php
www/ecrire/base/connect_sql.php
www/ecrire/base/create.php
www/ecrire/base/delete_all.php
www/ecrire/base/dump.php
www/ecrire/base/objets.php
www/ecrire/base/repair.php
www/ecrire/base/serial.php
www/ecrire/base/trouver_table.php
www/ecrire/base/upgrade.php
www/ecrire/charsets/iso-8859-15.php
www/ecrire/charsets/iso-8859-6.php
www/ecrire/charsets/iso-8859-9.php
www/ecrire/charsets/translitcomplexe.php
www/ecrire/exec/403.php
www/ecrire/exec/404.php
www/ecrire/exec/admin_plugin.php
www/ecrire/exec/base_delete_all.php
www/ecrire/exec/base_repair.php
www/ecrire/exec/demande_mise_a_jour.php
www/ecrire/exec/fond.php
www/ecrire/exec/fond_monobloc.php
www/ecrire/exec/informer.php
www/ecrire/exec/install.php
www/ecrire/exec/plonger.php
www/ecrire/exec/puce_statut.php
www/ecrire/exec/rechercher.php
www/ecrire/exec/selectionner.php
www/ecrire/exec/upgrade.php
www/ecrire/exec/valider_xml.php
www/ecrire/genie/mail.php
www/ecrire/genie/maintenance.php
www/ecrire/genie/mise_a_jour.php
www/ecrire/genie/optimiser.php
www/ecrire/inc/acces.php
www/ecrire/inc/actions.php
www/ecrire/inc/admin.php
www/ecrire/inc/aider.php
www/ecrire/inc/auth.php
www/ecrire/inc/autoriser.php
www/ecrire/inc/bandeau.php
www/ecrire/inc/boutons.php
www/ecrire/inc/charsets.php
www/ecrire/inc/chercher_logo.php
www/ecrire/inc/chercher_rubrique.php
www/ecrire/inc/commencer_page.php
www/ecrire/inc/config.php
www/ecrire/inc/cookie.php
www/ecrire/inc/couleurs.php
www/ecrire/inc/csv.php
www/ecrire/inc/cvt_autosave.php
www/ecrire/inc/cvt_configurer.php
www/ecrire/inc/cvt_multietapes.php
www/ecrire/inc/distant.php
www/ecrire/inc/documents.php
www/ecrire/inc/drapeau_edition.php
www/ecrire/inc/editer.php
www/ecrire/inc/envoyer_mail.php
www/ecrire/inc/filtres.php
www/ecrire/inc/filtres_boites.php
www/ecrire/inc/filtres_ecrire.php
www/ecrire/inc/filtres_images_lib_mini.php
www/ecrire/inc/filtres_images_mini.php
www/ecrire/inc/filtres_mime.php
www/ecrire/inc/filtres_mini.php
www/ecrire/inc/flock.php
www/ecrire/inc/genie.php
www/ecrire/inc/headers.php
www/ecrire/inc/icone_renommer.php
www/ecrire/inc/iconifier.php
www/ecrire/inc/idna_convert.class.php [new file with mode: 0755]
www/ecrire/inc/informer.php
www/ecrire/inc/install.php
www/ecrire/inc/invalideur.php
www/ecrire/inc/journal.php
www/ecrire/inc/json.php
www/ecrire/inc/lang.php
www/ecrire/inc/lang_liste.php
www/ecrire/inc/layer.php
www/ecrire/inc/lien.php
www/ecrire/inc/lien_court.php
www/ecrire/inc/lister_objets.php
www/ecrire/inc/log.php
www/ecrire/inc/mail.php
www/ecrire/inc/math.php
www/ecrire/inc/meta.php
www/ecrire/inc/minipres.php
www/ecrire/inc/modifier.php
www/ecrire/inc/notifications.php
www/ecrire/inc/pipelines.php
www/ecrire/inc/pipelines_ecrire.php
www/ecrire/inc/plonger.php
www/ecrire/inc/plugin.php
www/ecrire/inc/precharger_article.php
www/ecrire/inc/precharger_objet.php
www/ecrire/inc/prepare_recherche.php
www/ecrire/inc/preselectionner_parent_nouvel_objet.php
www/ecrire/inc/presentation.php
www/ecrire/inc/presentation_mini.php
www/ecrire/inc/presenter_enfants.php
www/ecrire/inc/puce_statut.php
www/ecrire/inc/queue.php
www/ecrire/inc/recherche_to_array.php
www/ecrire/inc/rechercher.php
www/ecrire/inc/rubriques.php
www/ecrire/inc/securiser_action.php
www/ecrire/inc/selectionner.php
www/ecrire/inc/session.php
www/ecrire/inc/simplexml_to_array.php
www/ecrire/inc/surligne.php
www/ecrire/inc/texte.php
www/ecrire/inc/texte_mini.php
www/ecrire/inc/traduire.php
www/ecrire/inc/urls.php
www/ecrire/inc/utils.php
www/ecrire/inc/xml.php
www/ecrire/inc_version.php
www/ecrire/index.php
www/ecrire/install/etape_.php
www/ecrire/install/etape_1.php
www/ecrire/install/etape_2.php
www/ecrire/install/etape_3.php
www/ecrire/install/etape_3b.php
www/ecrire/install/etape_4.php
www/ecrire/install/etape_chmod.php
www/ecrire/install/etape_fin.php
www/ecrire/install/etape_ldap1.php
www/ecrire/install/etape_ldap2.php
www/ecrire/install/etape_ldap3.php
www/ecrire/install/etape_ldap4.php
www/ecrire/install/etape_ldap5.php
www/ecrire/iterateur/condition.php
www/ecrire/iterateur/data.php
www/ecrire/iterateur/php.php
www/ecrire/iterateur/pour.php
www/ecrire/iterateur/sql.php
www/ecrire/maj/svn10000.php
www/ecrire/maj/v009.php
www/ecrire/maj/v010.php
www/ecrire/maj/v011.php
www/ecrire/maj/v012.php
www/ecrire/maj/v013.php
www/ecrire/maj/v014.php
www/ecrire/maj/v015.php
www/ecrire/maj/v016.php
www/ecrire/maj/v017.php
www/ecrire/maj/v018.php
www/ecrire/maj/v019.php
www/ecrire/maj/v019_pre193.php
www/ecrire/paquet.xml
www/ecrire/plugins/afficher_liste.php
www/ecrire/plugins/afficher_nom_plugin.php
www/ecrire/plugins/afficher_plugin.php
www/ecrire/plugins/afficher_repertoires.php
www/ecrire/plugins/extraire_boutons.php
www/ecrire/plugins/extraire_pipelines.php
www/ecrire/plugins/get_infos.php
www/ecrire/plugins/infos_paquet.php
www/ecrire/plugins/infos_plugin.php
www/ecrire/plugins/installer.php
www/ecrire/plugins/verifie_conformite.php
www/ecrire/prive.php
www/ecrire/public.php
www/ecrire/public/admin.php
www/ecrire/public/aiguiller.php
www/ecrire/public/assembler.php
www/ecrire/public/balises.php
www/ecrire/public/boucles.php
www/ecrire/public/cacher.php
www/ecrire/public/compiler.php
www/ecrire/public/composer.php
www/ecrire/public/criteres.php
www/ecrire/public/debusquer.php
www/ecrire/public/decompiler.php
www/ecrire/public/evaluer_page.php
www/ecrire/public/format_html.php
www/ecrire/public/interfaces.php
www/ecrire/public/iterateur.php
www/ecrire/public/jointures.php
www/ecrire/public/normaliser.php
www/ecrire/public/parametrer.php
www/ecrire/public/phraser_html.php
www/ecrire/public/quete.php
www/ecrire/public/references.php
www/ecrire/public/sandbox.php
www/ecrire/public/styliser.php
www/ecrire/public/styliser_par_z.php
www/ecrire/public/tracer.php
www/ecrire/req/mysql.php
www/ecrire/req/pg.php
www/ecrire/req/sqlite2.php
www/ecrire/req/sqlite3.php
www/ecrire/req/sqlite_fonctions.php
www/ecrire/req/sqlite_generique.php
www/ecrire/typographie/en.php
www/ecrire/typographie/fr.php
www/ecrire/urls/page.php
www/ecrire/xml/analyser_dtd.php
www/ecrire/xml/indenter.php
www/ecrire/xml/interfaces.php
www/ecrire/xml/sax.php
www/ecrire/xml/valider.php
www/htaccess.txt
www/plugins-dist/breves/action/editer_breve.php
www/plugins-dist/breves/base/breves.php
www/plugins-dist/breves/breves_administrations.php
www/plugins-dist/breves/breves_autoriser.php
www/plugins-dist/breves/breves_pipelines.php
www/plugins-dist/breves/formulaires/configurer_breves.php
www/plugins-dist/breves/formulaires/editer_breve.php
www/plugins-dist/breves/prive/squelettes/contenu/breves.html
www/plugins-dist/compresseur/compresseur_fonctions.php
www/plugins-dist/compresseur/compresseur_pipeline.php
www/plugins-dist/compresseur/formulaires/configurer_compresseur.php
www/plugins-dist/compresseur/inc/compresseur.php
www/plugins-dist/compresseur/inc/compresseur_concatener.php
www/plugins-dist/compresseur/inc/compresseur_embarquer.php
www/plugins-dist/compresseur/inc/compresseur_minifier.php
www/plugins-dist/compresseur/lib/csstidy/class.csstidy.php
www/plugins-dist/compresseur/lib/csstidy/class.csstidy_optimise.php
www/plugins-dist/compresseur/lib/csstidy/class.csstidy_print.php
www/plugins-dist/compresseur/paquet.xml
www/plugins-dist/dump/action/restaurer.php
www/plugins-dist/dump/action/sauvegarder.php
www/plugins-dist/dump/action/telecharger_dump.php
www/plugins-dist/dump/base/restaurer.php
www/plugins-dist/dump/connect/dump.php
www/plugins-dist/dump/exec/base_restaurer.php
www/plugins-dist/dump/formulaires/restaurer.php
www/plugins-dist/dump/formulaires/sauvegarder.php
www/plugins-dist/dump/inc/dump.php
www/plugins-dist/dump/inc/sauvegarder.php
www/plugins-dist/dump/prive/squelettes/contenu/restaurer_fonctions.php
www/plugins-dist/dump/prive/squelettes/contenu/sauvegarder_fonctions.php
www/plugins-dist/filtres_images/filtres/couleurs.php
www/plugins-dist/filtres_images/filtres/images_lib.php
www/plugins-dist/filtres_images/filtres/images_transforme.php
www/plugins-dist/filtres_images/filtres/images_typo.php
www/plugins-dist/filtres_images/images_fonctions.php
www/plugins-dist/filtres_images/inc/filtres_images.php
www/plugins-dist/filtres_images/inc/filtres_images_compat.php
www/plugins-dist/filtres_images/paquet.xml
www/plugins-dist/forum/action/editer_forum.php
www/plugins-dist/forum/action/instituer_forum.php
www/plugins-dist/forum/action/instituer_lot_forum.php
www/plugins-dist/forum/balise/formulaire_forum.php
www/plugins-dist/forum/balise/formulaire_forum_prive.php
www/plugins-dist/forum/base/forum.php
www/plugins-dist/forum/formulaires/activer_forums_objet.php
www/plugins-dist/forum/formulaires/configurer_forums_contenu.php
www/plugins-dist/forum/formulaires/configurer_forums_notifications.php
www/plugins-dist/forum/formulaires/configurer_forums_participants.php
www/plugins-dist/forum/formulaires/configurer_forums_prives.php
www/plugins-dist/forum/formulaires/forum.html
www/plugins-dist/forum/formulaires/forum.php
www/plugins-dist/forum/formulaires/forum_prive.php
www/plugins-dist/forum/formulaires/gestion_forum.php
www/plugins-dist/forum/formulaires/inc-forum_previsu.html
www/plugins-dist/forum/forum_administrations.php
www/plugins-dist/forum/forum_autoriser.php
www/plugins-dist/forum/forum_fonctions.php
www/plugins-dist/forum/forum_pipelines.php
www/plugins-dist/forum/inc/email_notification_forum.php
www/plugins-dist/forum/inc/forum.php
www/plugins-dist/forum/inc/forum_insert.php
www/plugins-dist/forum/paquet.xml
www/plugins-dist/forum/prive/modeles/forum_fonctions.php
www/plugins-dist/forum/public/forum.php
www/plugins-dist/forum/urls/generer_url_ecrire_forum.php
www/plugins-dist/forum/urls/generer_url_forum.php
www/plugins-dist/medias/action/acceder_document.php
www/plugins-dist/medias/action/ajouter_documents.php
www/plugins-dist/medias/action/changer_mode_document.php
www/plugins-dist/medias/action/copier_local.php
www/plugins-dist/medias/action/dissocier_document.php
www/plugins-dist/medias/action/editer_document.php
www/plugins-dist/medias/action/supprimer_document.php
www/plugins-dist/medias/action/supprimer_tous_orphelins.php
www/plugins-dist/medias/action/tourner.php
www/plugins-dist/medias/action/verifier_documents_brises.php
www/plugins-dist/medias/action/verifier_documents_liens.php
www/plugins-dist/medias/base/medias.php
www/plugins-dist/medias/base/typedoc.php
www/plugins-dist/medias/formulaires/changer_fichier_document.php
www/plugins-dist/medias/formulaires/configurer_documents.php
www/plugins-dist/medias/formulaires/editer_document.php
www/plugins-dist/medias/formulaires/illustrer_document.php
www/plugins-dist/medias/formulaires/joindre_document.php
www/plugins-dist/medias/inc/choisir_mode_document.php
www/plugins-dist/medias/inc/documenter_objet.php
www/plugins-dist/medias/inc/documents.php
www/plugins-dist/medias/inc/getdocument.php
www/plugins-dist/medias/inc/joindre_document.php
www/plugins-dist/medias/inc/marquer_doublons_doc.php
www/plugins-dist/medias/inc/renseigner_document.php
www/plugins-dist/medias/inc/verifier_document_mode_image.php
www/plugins-dist/medias/inc/verifier_document_mode_vignette.php
www/plugins-dist/medias/inc/vignette.php
www/plugins-dist/medias/medias_administrations.php
www/plugins-dist/medias/medias_autoriser.php
www/plugins-dist/medias/medias_fonctions.php
www/plugins-dist/medias/medias_pipelines.php
www/plugins-dist/medias/metadata/flv.php
www/plugins-dist/medias/metadata/html.php
www/plugins-dist/medias/metadata/image.php
www/plugins-dist/medias/metadata/svg.php
www/plugins-dist/medias/metadata/swf.php
www/plugins-dist/medias/paquet.xml
www/plugins-dist/medias/prive/objets/liste/documents.html
www/plugins-dist/medias/prive/squelettes/contenu/document_edit.html
www/plugins-dist/medias/prive/squelettes/inclure/ajouter-documents_fonctions.php
www/plugins-dist/medias/prive/squelettes/inclure/mediatheque-navigation_fonctions.php
www/plugins-dist/medias/puce_statut/document.php
www/plugins-dist/medias/urls/generer_url_document.php
www/plugins-dist/medias/urls/generer_url_ecrire_document.php
www/plugins-dist/mots/action/editer_groupe_mots.php
www/plugins-dist/mots/action/editer_mot.php
www/plugins-dist/mots/action/supprimer_groupe_mots.php
www/plugins-dist/mots/action/supprimer_mot.php
www/plugins-dist/mots/base/mots.php
www/plugins-dist/mots/formulaires/configurer_mots.php
www/plugins-dist/mots/formulaires/editer_groupe_mot.php
www/plugins-dist/mots/formulaires/editer_mot.php
www/plugins-dist/mots/inc/mots.php
www/plugins-dist/mots/mots_administrations.php
www/plugins-dist/mots/mots_autoriser.php
www/plugins-dist/mots/mots_pipelines.php
www/plugins-dist/mots/paquet.xml
www/plugins-dist/mots/prive/objets/infos/mot_fonctions.php
www/plugins-dist/mots/prive/objets/liste/mots-admin_fonctions.php
www/plugins-dist/mots/prive/squelettes/contenu/groupe_mots.html
www/plugins-dist/mots/prive/squelettes/contenu/mot_edit.html
www/plugins-dist/mots/prive/squelettes/contenu/mots.html
www/plugins-dist/mots/puce_statut/mot.php
www/plugins-dist/msie_compat/formulaires/configurer_vieux_butineurs.php
www/plugins-dist/organiseur/action/effacer_messagerecu.php
www/plugins-dist/organiseur/action/envoyer_message.php
www/plugins-dist/organiseur/action/quete_autocomplete.php
www/plugins-dist/organiseur/action/quete_calendrier_prive.php
www/plugins-dist/organiseur/action/supprimer_message.php
www/plugins-dist/organiseur/base/organiseur.php
www/plugins-dist/organiseur/formulaires/configurer_messagerie_agenda.php
www/plugins-dist/organiseur/formulaires/editer_message.php
www/plugins-dist/organiseur/inc/date_gestion.php
www/plugins-dist/organiseur/inc/messages.php
www/plugins-dist/organiseur/inc/quete_calendrier.php
www/plugins-dist/organiseur/notifications/instituermessage.php
www/plugins-dist/organiseur/organiseur_administrations.php
www/plugins-dist/organiseur/organiseur_autoriser.php
www/plugins-dist/organiseur/organiseur_fonctions.php
www/plugins-dist/organiseur/organiseur_pipelines.php
www/plugins-dist/petitions/action/confirmer_signature.php
www/plugins-dist/petitions/action/editer_petition.php
www/plugins-dist/petitions/action/editer_signature.php
www/plugins-dist/petitions/action/relancer_signature.php
www/plugins-dist/petitions/action/supprimer_signature.php
www/plugins-dist/petitions/action/traiter_lot_signature.php
www/plugins-dist/petitions/action/valider_signature.php
www/plugins-dist/petitions/balise/formulaire_signature.php
www/plugins-dist/petitions/base/petitions.php
www/plugins-dist/petitions/formulaires/activer_petition_article.php
www/plugins-dist/petitions/formulaires/signature.php
www/plugins-dist/petitions/petitions_administrations.php
www/plugins-dist/petitions/petitions_autoriser.php
www/plugins-dist/petitions/petitions_fonctions.php
www/plugins-dist/petitions/petitions_options.php
www/plugins-dist/petitions/petitions_pipelines.php
www/plugins-dist/porte_plume/css/barre_outils.css
www/plugins-dist/porte_plume/javascript/jquery.previsu_spip.js
www/plugins-dist/porte_plume/paquet.xml
www/plugins-dist/revisions/afficher_diff/champ.php
www/plugins-dist/revisions/afficher_diff/id_rubrique.php
www/plugins-dist/revisions/afficher_diff/jointure.php
www/plugins-dist/revisions/base/revisions.php
www/plugins-dist/revisions/formulaires/configurer_revisions_objets.php
www/plugins-dist/revisions/formulaires/reviser.php
www/plugins-dist/revisions/genie/optimiser_revisions.php
www/plugins-dist/revisions/inc/diff.php
www/plugins-dist/revisions/inc/revisions.php
www/plugins-dist/revisions/inc/revisions_autoriser.php
www/plugins-dist/revisions/inc/revisions_pipeline.php
www/plugins-dist/revisions/inc/suivi_versions.php
www/plugins-dist/revisions/paquet.xml
www/plugins-dist/revisions/prive/objets/liste/versions.html
www/plugins-dist/revisions/prive/rss/revisions_fonctions.php
www/plugins-dist/revisions/prive/squelettes/contenu/revision.html
www/plugins-dist/revisions/revisions_administrations.php
www/plugins-dist/safehtml/inc/safehtml.php
www/plugins-dist/sites/action/editer_site.php
www/plugins-dist/sites/action/exporter_bookmarks.php
www/plugins-dist/sites/action/importer_bookmarks_netscape.php
www/plugins-dist/sites/action/instituer_syndic_article.php
www/plugins-dist/sites/action/purger_site.php
www/plugins-dist/sites/action/syndiquer_site.php
www/plugins-dist/sites/balise/formulaire_site.php
www/plugins-dist/sites/base/sites.php
www/plugins-dist/sites/formulaires/configurer_sites.php
www/plugins-dist/sites/formulaires/editer_site.php
www/plugins-dist/sites/formulaires/editer_site_fonctions.php
www/plugins-dist/sites/formulaires/exporter_sites.php
www/plugins-dist/sites/formulaires/importer_sites.php
www/plugins-dist/sites/formulaires/regler_moderation_site.php
www/plugins-dist/sites/formulaires/site.php
www/plugins-dist/sites/genie/syndic.php
www/plugins-dist/sites/inc/site.php
www/plugins-dist/sites/inc/syndic.php
www/plugins-dist/sites/liens/implicite_site.php
www/plugins-dist/sites/paquet.xml
www/plugins-dist/sites/prive/objets/liste/syndic_articles.html
www/plugins-dist/sites/prive/objets/liste/syndic_articles_fonctions.php
www/plugins-dist/sites/prive/squelettes/contenu/site.html
www/plugins-dist/sites/puce_statut/site.php
www/plugins-dist/sites/sites_administrations.php
www/plugins-dist/sites/sites_autoriser.php
www/plugins-dist/sites/sites_fonctions.php
www/plugins-dist/sites/sites_pipelines.php
www/plugins-dist/squelettes_par_rubrique/squelettes_par_rubrique_options.php
www/plugins-dist/statistiques/base/delete_referers.php
www/plugins-dist/statistiques/base/delete_stats.php
www/plugins-dist/statistiques/base/stats.php
www/plugins-dist/statistiques/engines-list.txt
www/plugins-dist/statistiques/exec/base_delete_referers.php
www/plugins-dist/statistiques/exec/base_delete_stats.php
www/plugins-dist/statistiques/formulaires/configurer_compteur.php
www/plugins-dist/statistiques/genie/popularites.php
www/plugins-dist/statistiques/genie/visites.php
www/plugins-dist/statistiques/inc/referenceurs.php
www/plugins-dist/statistiques/inc/statistiques.php
www/plugins-dist/statistiques/inc/stats_referers_to_array.php
www/plugins-dist/statistiques/inc/stats_visites_to_array.php
www/plugins-dist/statistiques/paquet.xml
www/plugins-dist/statistiques/prive/squelettes/contenu/stats_lang_fonctions.php
www/plugins-dist/statistiques/prive/squelettes/contenu/stats_repartition_fonctions.php
www/plugins-dist/statistiques/prive/style_prive_plugin_stats.html
www/plugins-dist/statistiques/public/stats.php
www/plugins-dist/statistiques/stats_administrations.php
www/plugins-dist/svp/action/editer_depot.php
www/plugins-dist/svp/exec/admin_plugin.php
www/plugins-dist/svp/formulaires/admin_plugin.html
www/plugins-dist/svp/formulaires/inc-admin_plugin.html
www/plugins-dist/svp/formulaires/inc-confirmer_actions.html
www/plugins-dist/svp/formulaires/inc-plugins_trouves.html
www/plugins-dist/svp/inc/svp_decider.php
www/plugins-dist/svp/inc/svp_depoter_distant.php
www/plugins-dist/svp/paquet.xml
www/plugins-dist/svp/prive/squelettes/contenu/svp_admin_plugin.html
www/plugins-dist/svp/teleporter/http.php
www/plugins-dist/textwheel/inc/lien.php
www/plugins-dist/textwheel/inc/memoization-mini.php [deleted file]
www/plugins-dist/textwheel/inc/notes.php
www/plugins-dist/textwheel/inc/texte.php
www/plugins-dist/textwheel/inc/textwheel.php
www/plugins-dist/textwheel/paquet.xml
www/plugins-dist/textwheel/typographie/en.php
www/plugins-dist/textwheel/typographie/fr.php
www/plugins-dist/urls_etendues/action/editer_url.php
www/plugins-dist/urls_etendues/action/supprimer_url.php
www/plugins-dist/urls_etendues/action/urls_actualiser.php
www/plugins-dist/urls_etendues/action/urls_liberer.php
www/plugins-dist/urls_etendues/action/urls_verrouiller.php
www/plugins-dist/urls_etendues/base/urls.php
www/plugins-dist/urls_etendues/formulaires/configurer_urls.php
www/plugins-dist/urls_etendues/formulaires/editer_url_objet.php
www/plugins-dist/urls_etendues/paquet.xml
www/plugins-dist/urls_etendues/prive/objets/editer/url.html
www/plugins-dist/urls_etendues/prive/objets/liste/urls.html
www/plugins-dist/urls_etendues/prive/squelettes/navigation/controler_urls.html
www/plugins-dist/urls_etendues/urls/arbo.php
www/plugins-dist/urls_etendues/urls/html.php
www/plugins-dist/urls_etendues/urls/libres.php
www/plugins-dist/urls_etendues/urls/propres.php
www/plugins-dist/urls_etendues/urls/propres2.php
www/plugins-dist/urls_etendues/urls/propres_qs.php
www/plugins-dist/urls_etendues/urls/simple.php
www/plugins-dist/urls_etendues/urls/standard.php
www/plugins-dist/urls_etendues/urls_administrations.php
www/plugins-dist/urls_etendues/urls_pipeline.php
www/plugins-dist/vertebres/public/vertebrer.php
www/prive/aide_body.css
www/prive/aide_menu.html
www/prive/echafaudage/hierarchie/objet_fonctions.php
www/prive/formulaires/configurer_annonces.php
www/prive/formulaires/configurer_articles.php
www/prive/formulaires/configurer_avertisseur.php
www/prive/formulaires/configurer_flux.php
www/prive/formulaires/configurer_identite.php
www/prive/formulaires/configurer_langage.php
www/prive/formulaires/configurer_langue.php
www/prive/formulaires/configurer_logos.php
www/prive/formulaires/configurer_metas.php
www/prive/formulaires/configurer_moderniseur.php
www/prive/formulaires/configurer_multilinguisme.php
www/prive/formulaires/configurer_preferences.php
www/prive/formulaires/configurer_previsualiseur.php
www/prive/formulaires/configurer_redacteurs.php
www/prive/formulaires/configurer_reducteur.php
www/prive/formulaires/configurer_relayeur.php
www/prive/formulaires/configurer_rubriques.php
www/prive/formulaires/configurer_transcodeur.php
www/prive/formulaires/configurer_visiteurs.php
www/prive/formulaires/dater.html
www/prive/formulaires/dater.php
www/prive/formulaires/declarer_bases.php
www/prive/formulaires/editer_article.php
www/prive/formulaires/editer_auteur.php
www/prive/formulaires/editer_liens.php
www/prive/formulaires/editer_logo.php
www/prive/formulaires/editer_rubrique.php
www/prive/formulaires/instituer_objet.php
www/prive/formulaires/login.php
www/prive/formulaires/recherche_ecrire.php
www/prive/formulaires/rediriger_article.php
www/prive/formulaires/selecteur/inc-nav-rubriques.html
www/prive/formulaires/selecteur/lister-racine-articles.html
www/prive/formulaires/selecteur/lister-racine-rubriques.html
www/prive/formulaires/selecteur/lister-rubriques-articles.html
www/prive/formulaires/selecteur/lister-rubriques-rubriques.html
www/prive/formulaires/selecteur/lister.html
www/prive/formulaires/traduire.php
www/prive/informer_auteur_fonctions.php
www/prive/javascript/ajaxCallback.js
www/prive/javascript/jquery.autosave.js
www/prive/objets/liste/articles.html
www/prive/objets/liste/articles_fonctions.php [new file with mode: 0644]
www/prive/objets/liste/auteurs_associer_fonctions.php
www/prive/objets/liste/auteurs_fonctions.php
www/prive/objets/liste/auteurs_lies_fonctions.php
www/prive/objets/liste/objets-en-edition_fonctions.php
www/prive/objets/liste/objets-trad_fonctions.php
www/prive/objets/liste/visiteurs_fonctions.php
www/prive/spip_admin.css
www/prive/squelettes/ajax.html
www/prive/squelettes/head/dist.html
www/prive/squelettes/inclure/barre-nav.html
www/prive/squelettes/structure.html
www/prive/themes/spip/forms.css.html
www/prive/themes/spip/icons.css.html
www/prive/themes/spip/typo.css.html
www/spip.php
www/squelettes-dist/formulaires/ecrire_auteur.php
www/squelettes-dist/formulaires/inscription.php
www/squelettes-dist/formulaires/mot_de_passe.php
www/squelettes-dist/formulaires/oubli.php
www/squelettes-dist/formulaires/recherche.php
www/squelettes-dist/inc-rss-item.html
www/squelettes-dist/robots.txt.html
www/svn.revision

index 6fa24cb..65443c1 100644 (file)
@@ -1,3 +1,232 @@
+SPIP-Core spip-3.0.24 -> spip-3.0.25  06 mars 2017
+-------------------------------------------------------------
+
+r23221 | marcimat  |  (sam. 01 oct. 2016) | Report de r23219 : Retour sur r23197 : faire fonctionner correctement les commentaires de debug des slow queries :il faut transmettre $link Ã  la fonction !
+r23222 | cedric    |  (ven. 07 oct. 2016) | Revert de r23221 : au contraire de mysqli_real_escape_string, mysql_real_escape_string ne prent pas d'argument link en premier(cette difference est la cause du bug sur SPIP 3.1+ corrige par r23219 et reporte a tort sur SPIP 3.0)
+r23239 | cedric    |  (ven. 04 nov. 2016) | Report de r23237 : Fix #3832 : encoder en ascii les URLs internationales avec caracteres UTF avant de faire une requete http dessus
+r23245 | marcimat  |  (ven. 04 nov. 2016) | Report de r23243 : L'enregistrement des fichiers des plugins demandés, mais introuvables, ne listait que le dernier fichier en erreur,depuis l'introduction de la fonction en r18023 . Correction de la coquille donc.
+r23279 | eric      |  (sam. 19 nov. 2016) | Report de 23376.On ajoute une option Ã  la fonction table_valeur() pour permettre de renvoyer la valeur null d'un index existant.
+r23280 | eric      |  (sam. 19 nov. 2016) | On incrémente le numéro de la version SPIP de la branche 3.0 Ã  3.0.25-dev.En effet, la dernière version stable de cette branche est la 3.0.24 et laisser cette version sur la version en dev est confusionnant mais aussi empêche un plugin de mettre un nécessite sur cette version.On en profite aussi pour mettre Ã  jour en cohérence le paquet.xml.
+r23302 | cedric    |  (mar. 06 déc. 2016) | Report de r23300 : Avec le laxisme qu'il y avait sur sur la saisie de url_site avant r23061 les utilisateurs avaient pris la mauvaise habitude d'eluder le http:// dans la saisieOn gere donc le cas le plus courant : si l'url n'a pas de : et commence par www. on ajoute automatiquement http:// devant, cela simplifie la vie
+r23312 | b_b       |  (jeu. 22 déc. 2016) | report de r23310Fix #3879 : retour sur r23061 qui bloquait l'usage des raccourcis SPIP pour les liens dans le champ url_site de l'auteur
+r23314 | b_b       |  (ven. 23 déc. 2016) | Fix #3881 : report de tardif de r21744 & r23313 afin de rétablir l'usage de _TRI_ARTICLES_RUBRIQUE dans la branche 3.0
+r23317 | rasta     |  (lun. 02 janv. 2017) | Backport de r23315 : On corrige date_ical, qui pour l'immense majorité des cas DOIT avoir une date avec horaires précises (ce qui se matérialise soit avec l'heure GMT + Z Ã  la fin, soit en donnant le timezone), surtout pour tous les trucs générés par un site (publication d'articles, Ã©vénement qui se passent Ã  tel endroit, etc). Les seuls rares cas où les horaires dites "flottantes" sont acceptables c'est quand on parle d'une occupation d'un truc qui vaut peu importe l'endroit du genre "ce salarié sera occupé de 8h Ã  18h, qu'il se trouve Ã  new-york ou paris", bref Ã§a reste rare et surtout sans rapport avec ce qu'on génère nous par défaut, le core et nos plugins.
+
+SPIP-plugins-dist spip-3.0.24 -> spip-3.0.25  06 mars 2017
+-------------------------------------------------------------
+
+r100358 | b_b       |  (ven. 04 nov. 2016) | report de r100356retour sur r99431 : réparer le lien du form d'oubli de mot de passe quand le site est dans un sous dossiersignalé par johan sur spip-dev + merci Ã  cedric pour la solution
+r100572 | eric      |  (sam. 19 nov. 2016) | Report de 100570.Ajout d'une option Ã  bel_env pour afficher clairement les valeurs chaine vide et null.
+r100790 | tcharlss  |  (mer. 30 nov. 2016) | Report sur la branche 3.0 de https://core.spip.net/projects/medias/repository/revisions/100788 : lorsqu'on Ã©dite un document, ne pas réassocier les objets qui sont déjà liés au document, cela Ã©vite de perdre des informations en refaisant les liaisons (des rôles par exemple).
+r100810 | cedric    |  (sam. 03 déc. 2016) | Report de r100808 : _dist sur les fonctions de ce formulaire, par principe
+r100912 | maieul    |  (jeu. 08 déc. 2016) | report de r100911: première révision d'un objet: prendre effectivement en priorité le champ date_modif ou maj comme date de révision
+r101844 | b_b       |  (ven. 20 janv. 2017) | Fix #3839 : dans les listes de documents, afficher le logo du document et non celui de l'articlereport partiel de r100686 / Ref https://core.spip.net/issues/3889
+r102684 | teddy     |  (lun. 06 févr. 2017) | C'est inc/charsets avec un 's' et non inc/charset. :-)
+r102742 | Francky   |  (mar. 07 févr. 2017) | haosou est se nomme maintenant so
+r102744 | Francky   |  (mar. 07 févr. 2017) | report de https://zone.spip.org/trac/spip-zone/changeset/102735
+r102815 | Francky   |  (sam. 11 févr. 2017) | report de https://zone.spip.org/trac/spip-zone/changeset/102814
+
+
+
+
+
+SPIP-Core spip-3.0.23 -> spip-3.0.24  30 septembre 2016
+-------------------------------------------------------------
+
+r23176 | b_b       |  (lun. 26 sept. 2016) | report de r23174Depuis FF 49, la couleur #4444 est considérée valide, ce qui rend les labels du privé bien plus clairs que #666 qui Ã©tait appliqué avant (ou sous chromium). On passe donc en #444, pour Ãªtre certain d'avoir un contraste suffisant.Remarque : la couleur appliquée aux labels n'est jamais la même suivant la structure du formulaire (444, 666, 777, etc). Il serait inétréssant d'homogénéiser tout Ã§a.
+r23178 | b_b       |  (mar. 27 sept. 2016) | Fix #3831 : report de r23141 et r23148
+r23183 | cedric    |  (mar. 27 sept. 2016) | Report de r23179 : ne pas afficher l'url brute venant de la request (Nicolas CHATELAIN)
+r23184 | cedric    |  (mar. 27 sept. 2016) | Report de r23180 : pas d'url absolue dans var_url (Nicolas CHATELAIN)
+r23191 | cedric    |  (mar. 27 sept. 2016) | Report de r23185 : Eviter aussi les urls absolues windows c:\xxx et supprimer le onfocus obsolete au profit d'un placholder innofensif (Nicolas Chatelain)
+r23192 | cedric    |  (mar. 27 sept. 2016) | Report de r23186 : echapper les guillemets dans les noms de fichier pour ne pas generer du code invalide (Nicolas Chatelain)
+r23193 | cedric    |  (mar. 27 sept. 2016) | Report de r23187 : proteger des var_url fantaisistes sur le validateur_xml
+r23196 | cedric    |  (mar. 27 sept. 2016) | Report de r23194 : proteger HTTP_REFERER et var_recherche qui seront utilisee dans le surlignage JS (Rastapopoulos)
+r23199 | cedric    |  (mar. 27 sept. 2016) | Report de r23197 : proteger les commentaires de debug des slow queries
+r23202 | cedric    |  (mer. 28 sept. 2016) | Report de r23200 : - ?exec=valider_xml n'est executable que par les webmestres- var_url ne doit pas contenir de ../../ ni de ..\..\ (windows)- elle ne lance une action que si on a un var_token qui correspond soit a la signature de l'action en POST soit a la signature de l'action+var_url en GET. Ceci evite de faire lancer le validateur par un lien malveillant fourni a un webmstre d'un site auquel on a pas acces (CSRF)(Nicolas Chatelain)
+r23208 | cedric    |  (ven. 30 sept. 2016) | Report de r23206 : verification plus generique pour prendre en compte le cas windows
+
+SPIP-plugins-dist spip-3.0.23 -> spip-3.0.24  30 septembre 2016
+-------------------------------------------------------------
+
+r99661 | cedric    |  (mar. 27 sept. 2016) | Report de r85602 : Fix http://core.spip.org/issues/2938 : quand on met un zip dans tmp/ le memoriser dans la session pour le nettoyer au hit suivant si ce n'est pas un $_POST (ie si on a abandonne l'upload/deballage). Au passage on met les zip dans un sous dossier tmp/zip/ plutot que directement dans tmp/
+r99662 | cedric    |  (mar. 27 sept. 2016) | Report de r99659 : Complement a r85602 : utiliser la variable de session et ne passer qu'un md5 du chemin du zip dans le formulaire
+
+
+SPIP-Core spip-3.0.22 -> spip-3.0.23  23 septembre 2016
+-------------------------------------------------------------
+
+r22923 | cedric    |  (ven. 11 mars 2016) | version : ici on est en 3.0.23-dev
+r22924 | cedric    |  (ven. 11 mars 2016) | oups commit par erreur dans r22923
+r22930 | fil       |  (dim. 13 mars 2016) | report de r22929 : le robot facebook est mechant mais il est aussi bete, il faut donc le laisser faire son travail + mise a jour de la version de l'écran
+r22941 | cedric    |  (jeu. 17 mars 2016) | define('_CALCUL_PROFILER',300) permet de loger dans le profiler les calculs de squelette qui prennent plus de 300ms(a eclaircir : quand une boucle est lente et prends plusieurs secondes, cela n'affecte pas le temps calcule ici)
+r22948 | cedric    |  (jeu. 17 mars 2016) | Report de r22946 : un pipeline auth_administrer permet de personaliser le retour des differentes fonctions d'auth (par exemple pour renforcer la verification du mot de passe, quand flux['args']['fonction']=='verifier_pass'
+r22950 | cedric    |  (jeu. 17 mars 2016) | Report de r22055 : Permettre de choisir une langue par defaut autre que le francais -- utile pour les sites a destination d'un public non francophone, et qui utilise des plugins partiellement traduits -- clot #3292
+r22951 | cedric    |  (jeu. 17 mars 2016) | Report de r22062 : Il manquait des elements pour que le parametrage de la langue par defaut soit operationnel
+r22983 | b_b       |  (mer. 13 avril 2016) | report de r22981ne plus limiter la longueur maxi des logins dans test_login()
+r23015 | denisb    |  (lun. 23 mai 2016) | ecrire/inc/utils.php : on affecte une vraie valeur Ã  $prefs. report de r23013
+r23025 | b_b       |  (lun. 06 juin 2016) | report de r23023complément Ã  r20876 : pas de data dans le champ url_site
+r23032 | cedric    |  (sam. 11 juin 2016) | Report de r23030 : Bugfix erreur SQL sur langue_choisie, notamment lors de la syndication :il faut verifier l'existence du champ qui n'est pas systematique avec un champ lang+ prendre un argument $serveur en plus par coherence+ reports precedents sur les appels de calculer_langues_rubriques()
+r23038 | cedric    |  (lun. 13 juin 2016) | Report de r23036 : fixer le bug d'inclusion introduit par r23030
+r23059 | cedric    |  (sam. 25 juin 2016) | Report de r23057 : recuperer_infos_distantes() renvoyait a tort un tableau avec pour seul argument un mime_type vide quand le document n'existait pas, pouvant laisser croire a son existence. On sort explicitement avec false dans ce cas, comme prevu. Et on essaye meme pas de recuperer l'URL si la source fournie n'en est pas une
+r23062 | cedric    |  (lun. 27 juin 2016) | Report de r23060 : suite de r23023 et r20876 : soyons carrement restrictif sur ce qu'on attend
+r23065 | cedric    |  (lun. 27 juin 2016) | Report de r23063 : Sanitizer/controler les entree fournies a valider_xml_ok (Thomas Chauchefoin)
+r23068 | cedric    |  (lun. 27 juin 2016) | Report de r23066 : passer entites_html sur les id ajax par precaution (Guillaume Fahrer)
+r23071 | cedric    |  (lun. 27 juin 2016) | Report de r23069 : quand on faisait recherche=/ cela etait considere a tort comme une regexp (Thomas Chauchefoin)
+r23079 | cedric    |  (mar. 28 juin 2016) | Report de r23077 : report de r23049 sans le bug : si la request string contient le protocole et le host, il faut les depiler (cf test http://zone.spip.org/trac/spip-zone/changeset/98585)
+r23100 | cedric    |  (mer. 06 juil. 2016) | Report de r23098 : tester_url_absolue() n'accepte pas le protocole file:// car on est sur le web
+r23105 | cedric    |  (jeu. 07 juil. 2016) | Report de r23103 : completer r23098 : exclure tous les protocoles qui ne sont pas des URL mais que php accepte dans ses fonctions de lecture (guy)
+r23108 | cedric    |  (jeu. 07 juil. 2016) | Report de r23106 : suite de 23103 : la casse qui peut tout casser
+r23111 | marcimat  |  (jeu. 07 juil. 2016) | Report de r23109 : Compléter r23103 : retirer le protocole 'zip' Ã©galement, et phpdoc plus Ã  jour.
+r23153 | cedric    |  (ven. 09 sept. 2016) | Report de r23151 : Eviter d'accepter n'importe quoi dans les redirect de l'espace prive (Tim Coen)
+r23156 | cedric    |  (mar. 13 sept. 2016) | Report de r23154 : Quand un charger_fonction echoue renvoyer un 404 (et inliner les css si jamais on cherhcait un /truc.api/ pour que le rendu soit bon)
+r23158 | marcimat  |  (lun. 19 sept. 2016) | Parenthèse en trop dans r23154 (RealET)
+r23167 | cedric    |  (jeu. 22 sept. 2016) | Report de r23165 : le modele de mail utilise lors de l'inscription est modifiable via le tableau options de inscrire_auteur()
+
+SPIP-plugins-dist spip-3.0.22 -> spip-3.0.23  23 septembre 2016
+-------------------------------------------------------------
+
+r96125 | b_b       |  (lun. 21 mars 2016) | report de r93291il ne faut pas faire une alerte si c'est le form de forum en dessous de la previsu qu'on submit a nouveaucf https://core.spip.net/issues/3515
+r96640 | Nicod     |  (ven. 15 avril 2016) | report de r96638Générer des urls publiques dans les notifications de forums publics.
+r97979 | Yohann    |  (mar. 24 mai 2016) | Ajout d’une fonction aux statistiques pour désactiver les referers. Des fois, on en a pas besoin, et Ã§a prend de la place (beaucoup !) dans les tables SQL.
+r98016 | Francky   |  (mar. 24 mai 2016) | Il y a eu une coquille dans le dernier commit, la version passait de 0.4.36 Ã  0.4.4Je change le donc le z pour lui mettre 37
+r98068 | cedric    |  (jeu. 26 mai 2016) | Certains flux RSS publient l'integralite de leur contenus (par exemple http://www.lelotenaction.org/pages/do/rss.xml) ce qui produit inevitablement un timeout lors de l'analyse et de la syndication.On optimise les fonctions cdata_echappe et cdata_echappe_retour, et on limite la syndication aux 1000 premiers items, surchargeable par la constante _SYNDICATION_MAX_ITEMS
+r98104 | Yohann    |  (dim. 29 mai 2016) | On revert r97979 de la branche de maintenance.
+r98274 | rasta     |  (jeu. 09 juin 2016) | Backport de [98272] : Correction de bug : il manquait <!--affiche_milieu--> pour les documents, ce qui empêchait par exemple l'inseration des traductions ou autre ajout de ce genre.
+r98562 | cedric    |  (sam. 25 juin 2016) | Report de r98560 : plusieurs petits bugs sur les documents distants mal formates qui pourraient exister en base par des operations peu avouables, on teste systematiquement que le fichier ressemble bien a une URL avant de s'y fier
+r98605 | cedric    |  (mer. 29 juin 2016) | fix r96640 qui annoncait reporter r96638 mais avait reporte le true en false
+r99156 | b_b       |  (dim. 14 août 2016) | report de r99153revert de r86810Ref la kermesse de â€‹â€‹https://core.spip.net/issues/3368
+r99434 | cedric    |  (ven. 09 sept. 2016) | Report de r99431 : l'URL de rappel de mot de passe doit etre une URL safe, on la force sur l'adresse_site parametree dans la configuration du site
+
+
+
+SPIP-Core spip-3.0.21 -> spip-3.0.22  10 mars 2016
+-------------------------------------------------------------
+
+r22472 | ben       |  (dim. 01 nov. 2015) | 3.0.22-dev ! tonton 
+r22476 | b_b       |  (mar. 03 nov. 2015) | report de r22475Fix #3422 : classer les rubriques du picker ajax par rang, puis ordre alpha (maieul)
+r22483 | b_b       |  (mer. 04 nov. 2015) | report de r22482Fix #2745 : ajouter au htaccess la règle qui permet de servir les favicons des itrucs (commentée par défaut)
+r22491 | marcimat  |  (jeu. 05 nov. 2015) | Suppression d'un $requeter défini en double (azerttyu, via damien, via exakat.io).+ phpdoc de ces 2 fonctions tant qu'on y est.
+r22512 | marcimat  |  (ven. 06 nov. 2015) | Report de r22511 (et r22510 !) : Correction suite Ã  un report un peu erronné en r17385 et r17386 (mauvais copier / coller !)
+r22536 | cedric    |  (mar. 10 nov. 2015) | Report de r22530 : indentation et PHPDoc
+r22537 | cedric    |  (mar. 10 nov. 2015) | Report de r22531 : type dans PHPDoc (marcimat)
+r22538 | cedric    |  (mar. 10 nov. 2015) | Report de r22532 : PHPDoc, indentation
+r22539 | cedric    |  (mar. 10 nov. 2015) | Report de r22534 : Generalisation de la prise en charge de <procure> utilisable par les plugins pour signaler qu'ils fournissent le service d'un autre plugin<procure nom="xxxx" version "1.2.3" />si le procure est dans une version plus recente que le plugin du meme nom, c'est le procure qui l'emportePour les procure, on attribue un faux repertoire compose du repertoire du plugin qui procure suivi de /procure:xxxxce qui permet si besoin de savoir a partir de _DIR_PLUGIN_XXXX que c'est un procure, et qui procure.+ renommage d'une variable ambigue dans plugin_valide_resume
+r22559 | kent1     |  (lun. 16 nov. 2015) | Report de r22558Forcer la couleur de ces h6 pour Ã©viter des cas illisibles où le container a pour couleur #fff par exemple
+r22590 | rasta     |  (mar. 24 nov. 2015) | Backport de r22588 en 3.0 : On ajoute un fallback Ã  la fonction url_de_base() avec d'utiliser adresse_site en dernier recours. Cela permet d'avoir une URL de site dans tous les cas, même quand on ne navigue pas avec un client web classique (par exemple en CLI, mais Ã§a peut Ãªtre d'autres types d'appel).
+r22592 | marcimat  |  (mar. 24 nov. 2015) | Report de r22591 :  Erreur dans r22534 : $p n'est pas un tableau, mais le préfixe !
+r22600 | erational |  (jeu. 26 nov. 2015) | report de https://core.spip.net/projects/spip/repository/revisions/22599
+r22603 | cedric    |  (dim. 29 nov. 2015) | Report de r22602 : copie_locale prend un 4e argument optionnel pour specifier une taille maxi du telechargement (#3527)
+r22607 | cedric    |  (dim. 29 nov. 2015) | Report de r22606 : #3588 : n'appeller spip_clear_opcode_cache que lorsqu'on ecrit un fichier PHP (perf issue)
+r22609 | cedric    |  (dim. 29 nov. 2015) | Report de r22608 : oups : erreur sur r22606, toute ecriture de fichier provoquait un echec
+r22631 | cedric    |  (dim. 06 déc. 2015) | Fix #3542 : z-index du date-picker superieur a celui des icones et de la navigation principale
+r22633 | cedric    |  (dim. 06 déc. 2015) | Fix #3542 : probleme de overflow
+r22637 | b_b       |  (mar. 08 déc. 2015) | report de r22636 / Fix #3614 : affichage des icones en RTL (George)
+r22650 | cedric    |  (ven. 11 déc. 2015) | Report de r22648 : Fix #3617 : la fonction objet_modifier_champ utilise options[data] pour verifier les conflit, et si non fourni ou nul se rabat sur $_POST pour assurer la continuite de fonctionnement
+r22651 | cedric    |  (ven. 11 déc. 2015) | Report de r22649 : Fix #3617 : passer $set a objet_modifier_champs pour qu'elle ne detecte les conflits sur $_POST que quand c'est pertinent
+r22655 | cedric    |  (sam. 12 déc. 2015) | Report de r22652 : Full Path Disclosure dans le phraseur. Lorsqu'un symbole d'avant-boucle n'avait pas son chevron fermant,le compilateur signalait bien l'erreur mais produisait quand même du code PHP,leque Ã©tant syntaxiquement faux produisait une erreur PHP. Bonne stratégie: poursuivre la compilation un caractère après le chevron ouvrant de cette avant-boucle pour traquer les Ã©ventuelles erreurs plus loi.
+r22656 | cedric    |  (sam. 12 déc. 2015) | Indentation (soupe d'espaces et de tabulations)
+r22680 | cedric    |  (mer. 16 déc. 2015) | option peut prendre une valeur 'action' passee aux pipelines pre/post edition
+r22684 | cedric    |  (ven. 18 déc. 2015) | r22281 et r22282 ont introduit une dependance de la fonction liens_absolus aux fonctions extraire_attribut et inserer_attribut, mais qui ne sont pas forcement chargees. Faire un include_spip au besoin
+r22687 | cedric    |  (lun. 21 déc. 2015) | coquille affreuse dans r22603 qui cassait copie_locale
+r22693 | denisb    |  (ven. 01 janv. 2016) | bonne année.
+r22695 | erational |  (ven. 01 janv. 2016) | backport SPIP 3.1: Ã©viter le problème avec set_magic_quotes_runtime avec les versions PHP5.3+
+r22698 | cedric    |  (lun. 04 janv. 2016) | Report de r22697 : utiliser PHP_VERSION_ID plutot que version_compare pour ce code execute a chaque hit (perf issue) + emuler PHP_VERSION_ID si besoin
+r22721 | cedric    |  (lun. 11 janv. 2016) | Report de r22719 : Perf issue sur les filtres images appliques sur des images distantes en 404 :[(#VAL{http://example.org/fichier_inexistant.png}|image_reduire{64,64})] provoquait 3 operations file_exists sur http://example.org/fichier_inexistant.png.srcque PHP interprete en faisant 3 hits http sur le fichier sauf si PHP bloque ce type d'operation.
+r22781 | b_b       |  (mar. 02 févr. 2016) | report de r22779 : réparer le lien d'accès rapide vers la recherche (cf #3634)
+r22803 | james     |  (sam. 06 févr. 2016) | report @22801: Ã©viter des warning dans les logs (Camille Sauvage)
+r22806 | james     |  (sam. 06 févr. 2016) | report de r22805
+r22816 | james     |  (mar. 09 févr. 2016) | report r22814
+r22820 | james     |  (mar. 09 févr. 2016) | report r22818
+r22824 | marcimat  |  (mer. 10 févr. 2016) | Report de r22822 : Le cnx doit Ãªtre de la même forme dans tous les cas de retour, avec ou sans le login trouvé dans le formulaire de login. Clos https://core.spip.net/issues/3690 (Stéph R).
+r22834 | marcimat  |  (dim. 14 févr. 2016) | Report de r22833 : Coquille sur un log.
+r22840 | cedric    |  (jeu. 18 févr. 2016) | Catcher les erreurs de eval(), ce qui permet de generer une erreur squelette propre avec le nom du squelette qui a genere l'erreur, information qui manquait cruellement. Les utilisatateurs non admin ne voient pas l'erreur, et on genere un commentaire html a la place du resultat
+r22841 | cedric    |  (jeu. 18 févr. 2016) | Suite de r22840 : on expose le code PHP du squelette qui fait l'erreur d'eval, avec numerotation des
+r22865 | b_b       |  (ven. 26 févr. 2016) | report de r22863Fix #3660 : Ã©viter de retomber sur _MEMORY_LIMIT_MIN quand memory_limit est défini Ã  -1 dans php.ini
+r22874 | rasta     |  (jeu. 03 mars 2016) | Juste des tabulations et espacements, pour y voir plus clair et ne pas mélanger avec des vraies modifs.
+r22875 | rasta     |  (ven. 04 mars 2016) | Déplantage de la balise #RANG quand on a déclaré autre chose qu'un simple champ pour le titre (par exemple une expression avec fonctions et virgules).On garde exactement le même fonctionnement qu'avant avec un "AS titre_rang" rajouté. Mais on fait deux tests au lieu d'un seul :- d'abord on cherche le titre en se disant que "lang" est défini AVANT- et si on ne trouve pas, là on prend depuis le débutMais dans les deux cas, vu que c'est séparé en deux, et qu'on cherche "lang" explicitement et pas une virgule toute seule : on peut donc prendre tout caractère pour le titre, y compris les virgules qu'il y aurait dans des fonctions.Cela gère donc bien tous les cas, enfin de toute façon plus de cas qu'avant.
+r22885 | rasta     |  (mar. 08 mars 2016) | Backport de #22884 : Ã©chapper les apostrophes (quote simple) dans les appels javascript.
+r22888 | rasta     |  (mar. 08 mars 2016) | Backport de r22887 : Pour le javascript on fait un plus brutal "textebrut", là au moins Ã§a marche.
+r22901 | cedric    |  (jeu. 10 mars 2016) | Report de r22899 : Mise a jour de la liste des bots : Moreover|FunWebProducts|facebook|hootsuite|MetaURI|flipboard sont tous des bots
+r22903 | cedric    |  (jeu. 10 mars 2016) | Report de r22872 : Fix #3680 : on change le format du contexte ajax pour pouvoir verifier la cle de signature du contexte avant de deserializer, ce qui permet de faire confiance au contenu
+r22909 | cedric    |  (jeu. 10 mars 2016) | un var_isbot pour permettre le monitoring par robot (monitoring de la disponibilite user/robot)+ mise a jour de la liste des robots
+r22910 | cedric    |  (jeu. 10 mars 2016) | un filtre filtrer_entites
+
+SPIP-plugins-dist spip-3.0.21 -> spip-3.0.22  10 mars 2016
+-------------------------------------------------------------
+
+r92729 | marcimat  |  (sam. 07 nov. 2015) | Report de r92728: Il manquait le préfixe sur l'appel d'une chaine de langue.
+r92931 | real3t    |  (sam. 14 nov. 2015) | Ajout du moteur Lilo pour les statistiques
+r92992 | cedric    |  (mer. 18 nov. 2015) | Robustesse de la detection du titre qui pouichait quand la balise title etait sur plusieurs (contexte.com)
+r92995 | cedric    |  (mer. 18 nov. 2015) | On etend la prise en charge de _SYNDICATION_DEREFERENCER_URL a tout flux en verifiant que les URLs syndiquees ne sont pas des redirections, et en recuperant l'URL finale le cas echeant
+r92996 | cedric    |  (mer. 18 nov. 2015) | quand syndication=non mais qu'il y a des articles, afficher la liste en plus du bouton pour purger, car sinon on ne sait pas ce qu'on purge
+r93070 | eric      |  (sam. 21 nov. 2015) | Report des initialisations de certaines variables de la fonction printWordWrapped
+r93160 | guytarr   |  (mer. 25 nov. 2015) | report de [93159] (coquille)
+r93278 | cedric    |  (sam. 28 nov. 2015) | Version 1.5.5 de CSSTidy (bugfix font shorthand avec font-family:inherit)
+r93285 | cedric    |  (dim. 29 nov. 2015) | Report de r93284 : Fix https://core.spip.net/issues/3527 : accepter les paquets jusqu'a 64Mo, personalisable par la constante _SVP_PAQUET_MAX_SIZE
+r93407 | cedric    |  (dim. 06 déc. 2015) | Report de r93406 : Fix https://core.spip.net/issues/3571 : ne pas risquer que les fonctions de substitution cache_(get|set) du plugin soient utilisees par ailleurs car elles ne sont pas concues pour cela. On simplifie donc l'approche en les renommant et en les chargeant de deleguer aux fonctions de memoization si presentes
+r93426 | cedric    |  (lun. 07 déc. 2015) | bugfix sur les URLs des pages uniques (id_parent=-1) : on ne pouvait pas les supprimer, et leur id_parent les faisait passer devant une rubrique racine dans une recherche d'URL
+r93430 | cedric    |  (lun. 07 déc. 2015) | Utiliser partout autoriser(modifierurl) au lieu de autoriser(modifier) car cette derniere repond false quand l'objet n'existe plus en base, et dans ce cas precis on veut pouvoir supprimer l'URLautoriser(modifierurl) verifie donc si l'objet existe encore en base et dans le cas contraire on s'en remet a autoriser(administrer,url)
+r93499 | pierre    |  (mer. 09 déc. 2015) | Espaces insécables
+r93500 | pierre    |  (mer. 09 déc. 2015) | Annuler le commit précédent sur les espaces insécables.C'est probablement sur la chaine de langue qu'il faut intervenir.Elle est dans ecrire_fr.php, ne faudrait-il pas la déplacer dans le plugin forum texte_statut_publiestexte_statut_attente_validation?
+r93710 | cedric    |  (mer. 16 déc. 2015) | Un hreflang sur les articles syndiques qui ne sont pas dans la langue courante
+r93711 | cedric    |  (mer. 16 déc. 2015) | utiliser objet_modifier_champs plutot que sql_updateq, cela permet de passer par les pipelines pre/post edition
+r93712 | cedric    |  (mer. 16 déc. 2015) | passer l'action 'syndiquer' a objet_modifier_champs
+r93713 | cedric    |  (mer. 16 déc. 2015) | version
+r93746 | erational |  (jeu. 17 déc. 2015) | Le tri par défaut doit Ãªtre en multi titre pour respecter la langue(report de http://zone.spip.org/trac/spip-zone/changeset/93745 )
+r94397 | denisb    |  (ven. 01 janv. 2016) | bonne année.
+r95237 | Francky   |  (ven. 19 févr. 2016) | Ne sont que pour spip 3.0, ils ont une autre version pour spip 3.1
+r95523 | b_b       |  (ven. 26 févr. 2016) | quelques pétouilles pour ie cf https://core.spip.net/issues/3650
+r95524 | b_b       |  (ven. 26 févr. 2016) | encore des CDATA Ã  Ã©chapper cf https://core.spip.net/issues/3650pour plus d'infos sur les différentes syntaxes voir http://javascript.about.com/library/blxhtml.htm
+r95651 | b_b       |  (mar. 01 mars 2016) | report de r85647 cf https://core.spip.net/issues/2283
+r95776 | cedric    |  (sam. 05 mars 2016) | Eviter une notice
+
+SPIP-Core spip-3.0.20 -> spip-3.0.21  31 octobre 2015
+-------------------------------------------------------------
+
+r22267 | cedric    |  (mer. 24 juin 2015) | Quand la source image est dans IMG/ et contient une query-string complexe et que le fichier existe sans la query-string, on l'ignore. Repare le traitement des images qui ont une URL restreinte basee sur la query-string+htaccess
+r22282 | fil       |  (lun. 29 juin 2015) | report de #22281 (https://core.spip.net/issues/3456)
+r22315 | cedric    |  (lun. 20 juil. 2015) | Reparer la desinstallation des plugins dans _DIR_PLUGINS_SUPPL
+r22326 | cedric    |  (ven. 24 juil. 2015) | Report de r22325 : Fix #3504 : purge des autosave cvt en session
+r22327 | cedric    |  (ven. 24 juil. 2015) | Report de r21817 : 0 est une valeur acceptable pour un champ obligatoire (Frederic, Pierretux)
+r22342 | cedric    |  (sam. 25 juil. 2015) | Fix #3510 : parametre_url sur les arguments de type tableau. On backporte la version du trunk 3.1 sur laquelle le bug a ete corrige
+r22344 | cedric    |  (dim. 26 juil. 2015) | Report de r22343 : Fix #3494 : quand la date de redaction anterieure est utilisee, il faut pouvoir l'editer sur un article en cours de redaction, comme avant, mais sans permettre l'edition de la date.On robustifie traiter() en verifiant le droit a edition qui a ete calcule dans charger() avant de prendre en compte les request, ce qui evite tout risque de manipulation du form et d'injection d'input en html+ Report de r22338 au passage
+r22362 | kent1     |  (mar. 28 juil. 2015) | Récupérer le title et le hreflang du lien entourant un modèle cf #3516
+r22384 | kent1     |  (mer. 12 août 2015) | Gros bug sur r22282 (cf #3456)Le passage en liens absolus se faisait uniquement sur le premier href ou src, remplaçant le premier href ou src par le dernier href / src présent dans le texte...On ne remplaçait plus lien par lien
+r22392 | erational |  (mar. 25 août 2015) | report de c22360
+r22393 | erational |  (mar. 25 août 2015) | arménien en code HTML
+r22402 | rasta     |  (jeu. 03 sept. 2015) | RAH. On corrige enfin ce fichu gros bug du compilateur qui faisait qu'on ne pouvait pas avoir un critère conditionnel ET plusieurs arguments.Ça marchait pour les critères sans arguments ou avec un seul argument.La raison ? Non-factorisation et doublonnage de code : actuellement, les critères mêmes persos (pas juste les trucs SQL) qui ont 0 ou 1 arguments, ne passent PAS par le même code que ceux avec 2 ou plus. Alors qu'ensuite le traitement et la regex associée sont quasiment les mêmes… mais pas tout Ã  fait, puisque dans le cas 2 ou plus Ã§a ne cherchait pas le "?".Pour l'instant on corrige juste le bug, mais il faudrait nettoyer le code et factoriser pour ne plus générer d'erreur de ce genre…Au passage, pour SPIP 3.0, on backport la correction du "_" manquant qui faisait, là aussi qu'avec 2 arguments ou plus, on avait pas le droit d'avoir des critères avec_plusieurs_mots, alors qu'on peut avec 0 ou 1 argument. Même raison : code fait deux fois différemment, dont la regex.
+r22434 | erational |  (ven. 16 oct. 2015) | pas d'accent sur Kreyòl (Peyi Dayiti)
+r22436 | cedric    |  (lun. 19 oct. 2015) | On ajoute l'heure de publication au survol de la date, cela est utile pour faire de la programmation intensive d'article a l'avance
+r22442 | cedric    |  (mar. 27 oct. 2015) | Report de r22441 : r17234 a introduit un include_spip() au debut de base/connect_sql.php, ce qui etait une erreur car ce fichier est inclus par inc_version avant toute initialisation du core et chargement des caches.Du coup chaque hit provoquait une invalidation du chemin car find_in_path appele trop tot croyait que son find etait nouveau, donc le hit se finissait par une ecriture du fichier tmp/cache/chemin.txt.Comme ce fichier peut etre assez gros (>100ko) et ecrit en posant un verrou, cela impactait la performance par un debit d'ecriture sur le disque et des possibles attentes entre hit concourants.Bug repere par nicod en 3.0 et confirme par RealET en 3.1
+r22444 | cedric    |  (mar. 27 oct. 2015) | Report de r22443 : Complement a r22441 : ne pas lever le flag en cas de find_in_path appele trop tot si le fichier n'est pas trouve
+r22449 | cedric    |  (jeu. 29 oct. 2015) | Report de r22427 : #3371 Les squelettes de l'espace prive recoivent un flag espace_prive=1 a toute fin utile
+r22450 | cedric    |  (jeu. 29 oct. 2015) | Report de r22428 : Fix #3371 : dans la fonction typo, si un flag espace_prive=1 est present dans le env, on echappe tout html suspect, ie qui ne passe pas a travers safehtml sans censure. Pour limiter l'impact perfo on conditionne l'echappement a la presence des caracteres < et = dans le texte, c'est a dire une balise avec un attribut, ce qui ne traitera donc quasiment aucun contenu par defaut, sauf quelques rares <span lang='en'> ou autre curiosite de ce type
+r22451 | cedric    |  (jeu. 29 oct. 2015) | Report de r22429 : oups oubli dans r22428 : cas de typo appele en php depuis l'espace prive
+r22452 | b_b       |  (jeu. 29 oct. 2015) | report de r22346Fix #3430 : les boucles avec langue utilisaient lang_select_public() qui changeait sauvagement la langue en debut de boucle, sans la restaurer en fin de boucle, provoquant des bugs de contexteOn modifie la compulation des boucles : lang_select_public() appelle toujours lang_select(...) avec eventuellement la langue inchangee, et la boucle finit par un lang_select() qui depile et restaure la langue pour l'iteration suivante.
+
+SPIP-plugins-dist spip-3.0.20 -> spip-3.0.21  31 octobre 2015
+-------------------------------------------------------------
+
+r91143 | kent1     |  (mar. 28 juil. 2015) | Récupérer le title et le hreflang du lien entourant un modèle cf #3516
+r91205 | cedric    |  (jeu. 30 juil. 2015) | bug lors d'une erreur a la creation d'un mot (confirmation sur un doublon par exexemple)
+r91206 | cedric    |  (jeu. 30 juil. 2015) | complement a r91205
+r91209 | cy_altern |  (jeu. 30 juil. 2015) | report de 91148 (acces de google bot aux js et css)
+r91271 | cedric    |  (mer. 05 août 2015) | On ne verifie et alerte sur le doublon de titre de mot cle uniquement si c'est un nouveau mot cle ou si on retitre un mot cle existant, sinon c'est penible
+r91274 | cedric    |  (mer. 05 août 2015) | ne pas syndiquer un site en refuse
+r91290 | real3t    |  (ven. 07 août 2015) | Mise Ã  jour pour la reconnaissance des moteurs de recherche. Reportable en 2.1.
+r91384 | real3t    |  (dim. 16 août 2015) | Un paramètre de plus reconnu pour Google
+r91608 | kent1     |  (jeu. 03 sept. 2015) | Report de la fonctionnalité de z91607"Faire prendre en compte Ã  la prévisu l'hypothétique dir="ltr" ou dir="rtl" sur le textarea"
+r91797 | marcimat  |  (sam. 12 sept. 2015) | Report de r91796 :  Le pipeline "afficher_contenu_objet" n'était pas appelé pour l'affichage des groupes de mots sur la page exec=mots.
+r92079 | chankalan |  (mar. 29 sept. 2015) | pour affichage des colonnes des visites, report de http://zone.spip.org/trac/spip-zone/changeset/91091/  et http://zone.spip.org/trac/spip-zone/changeset/91404/
+r92236 | cedric    |  (sam. 10 oct. 2015) | Report de r92235 : soyons un peu moins bisounours : les diff necessitent aussi un interdire_scripts comme tous les contenus affiches dans l'espace prive
+r92513 | b_b       |  (jeu. 29 oct. 2015) | Report de r92512 : Ã©viter d'afficher le script d'autosave dans la prévisu d'un forum quand le site est en mode parano avec $filtrer_javascript = -1;Ref â€‹https://core.spip.net/issues/3413 merci Ã‰quipement
+r92523 | b_b       |  (jeu. 29 oct. 2015) | report de r92522 : Ã©viter une erreur PHP Strict Standards: Only variables should be passed by reference (Eric Camus)Ref â€‹https://core.spip.net/issues/3373
+r92525 | b_b       |  (jeu. 29 oct. 2015) | version 0.80.27 : report de r92524fix installation d'un plugin qui nécessite un plugin du core sur un site neuf, â€‹https://core.spip.net/issues/3572À la fin de svp_ajouter_depot(), utiliser svp_actualiser_paquets_locaux(true) qui, comme son nom l'indique, actualise les paquets locaux puis supprime les paquets locaux avec l'option true.Merci marcimat :)
+r92568 | real3t    |  (sam. 31 oct. 2015) | Et report en 3.0
+r92576 | real3t    |  (sam. 31 oct. 2015) | Sur une suggestion de Franck, intégration de Haosou dont parle cet article.
+r92578 | Francky   |  (sam. 31 oct. 2015) | Il semble que sogou soit un moteur en chinehttp://www.journaldunet.com/solutions/expert/59882/haosoule-moteur-de-recherche-qui-pourrait-changer-le-monde-du-seo-chinois.shtml
+r92580 | Francky   |  (sam. 31 oct. 2015) | Rangement alphabétique
+
 SPIP-Core spip-3.0.19 -> spip-3.0.20  23 juin 2015
 -------------------------------------------------------------
 r22106 | ben       |  (sam. 09 mai 2015) | 3.0.20 dev
@@ -596,7 +825,7 @@ r78152 | ben       |  (sam. 09 nov. 2013) | maj langues
 SPIP-Core spip-3.0.10 -> spip-3.0.11  09 août 2013
 -------------------------------------------------------------
 
-r20605 | ben       |  (lun 27 mai 2013) | prenons de bonnes habitudes : dès qu'une release est faite, on passe en dev pour ceux/celles qui utilisent svn (eric) 
+r20605 | ben       |  (lun 27 mai 2013) | prenons de bonnes habitudes : dès qu'une release est faite, on passe en dev pour ceux/celles qui utilisent svn (eric)
 r20606 | cedric    |  (lun 27 mai 2013) | Ferme #2860 : appliquer les règles typographiques de la langue de l'article sur son texte (et son titre) dans l'espace privé.Pour cela, on reforme changer_typo() qui ne renvoit plus rien, et annule la dérogation de lang_typo quand on lui passe une chaine vide.
 r20613 | cedric    |  (jeu 30 mai 2013) | Report adapté de r20611, et retour sur r20576 : tester_statut_inscription() revient a son role initial qui est de tester le mode fourni ou de retourner le meilleur mode possible si aucun mode n'est fourni lors de l'inscription. Il accepte aussi un id en second argument, comme c'était le cas en 2.1, non usité par défaut, mais qui peut l'être si passé au #FORMULAIRE_INSCRIPTIONtester_config() est rebranché sur la fonction tester_statut_inscription()
 r20640 | cedric    |  (lun 10 jun 2013) | un filtre liens_nofollow qui ajoute un rel="nofollow" Ã  tous les liens du texte passé en argument
@@ -1094,7 +1323,7 @@ r70865 | ben       |  (lun. 18 mars 2013) | Un ptit update de langue avant la so
 
 
 SPIP-core spip-3.0.4 -> spip-3.0.5
---------------------------------- 
+---------------------------------
 
 r19786 | cedric    | 2012-08-02 14:35:20 | Complement a r19775 : explications et optimisation (il faut en fait doubler la condition objet='xxx' pour Ãªtre exact et optimisé)
 r19794 | cedric    | 2012-08-05 00:02:49 | eviter une notice
@@ -1125,8 +1354,8 @@ r19894 | cedric    | 2012-09-11 09:43:31 | La fonction notifications_envoyer_mai
 r19897 | cedric    | 2012-09-11 12:56:18 | Dans une requete HEAD renvoyer le vrai en-tête. Pour cela on est bien obligé de calculer toute la page, mais on coupe la connexion après les entête http.On perd donc la rapidité de calcul des requetes HEAD au profit de leur exactitude.Dans la mesure ou HEAD représente en général moins de 1% des requetes (voire de l'ordre de 2/1000 sur un echantillon de sites en production) la perte en performance serveur est négligeable (d'autant plus qu'une réponse 200 a toute les chances de générer une requete complète Ã  suivre).A contrario, en cas de soucis, ou pour analyser une page ou le comportement de SPIP, avoir une réponse pertinente sur HEAD est plus utile. Et la page est en cache pour l'éventuelle requete complète qui suit.
 r19901 | marcimat  | 2012-09-12 11:15:21 | Report de r19900 : classes lat sur les colonnes des exec php
 
-plugins-dist spip-3.0.4 -> spip-3.0.5 
---------------------------------- 
+plugins-dist spip-3.0.4 -> spip-3.0.5
+---------------------------------
 
 r64570 | yffic     | 2012-08-07 19:46:04 | Petite précision sur le message d'erreur en cas de répertoire lib inexistant
 r64787 | kent1     | 2012-08-14 11:34:43 | un peu de documentation
index bcf6179..ba47691 100644 (file)
@@ -5,7 +5,7 @@
  * ------------------
  */
 
-define('_ECRAN_SECURITE', '1.2.2'); // 2014-12-01
+define('_ECRAN_SECURITE', '1.3.0'); // 2017-03-06
 
 /*
  * Documentation : http://www.spip.net/fr_article4200.html
@@ -17,20 +17,29 @@ define('_ECRAN_SECURITE', '1.2.2'); // 2014-12-01
 if (isset($_GET['test_ecran_securite']))
        $ecran_securite_raison = 'test '._ECRAN_SECURITE;
 
+/*
+ * Monitoring
+ * var_isbot=0 peut etre utilise par un bot de monitoring pour surveiller la disponibilite d'un site vu par les users
+ * var_isbot=1 peut etre utilise pour monitorer la disponibilite pour les bots (sujets a 503 de delestage si
+ * le load depasse ECRAN_SECURITE_LOAD)
+ */
+if (!defined('_IS_BOT') and isset($_GET['var_isbot']))
+               define('_IS_BOT',$_GET['var_isbot']?true:false);
+
 /*
  * Détecteur de robot d'indexation
  */
 if (!defined('_IS_BOT'))
        define('_IS_BOT',
                isset($_SERVER['HTTP_USER_AGENT'])
-               AND preg_match(
+               and preg_match(
            // mots generiques
            ',bot|slurp|crawler|spider|webvac|yandex|'
            // MSIE 6.0 est un botnet 99,9% du temps, on traite donc ce USER_AGENT comme un bot
            . 'MSIE 6\.0|'
            // UA plus cibles
-           . '80legs|accoona|AltaVista|ASPSeek|Baidu|Charlotte|EC2LinkFinder|eStyle|Google|Genieo|INA dlweb|InfegyAtlas|Java VM|LiteFinder|Lycos|Rambler|Scooter|ScrubbyBloglines|Yahoo|Yeti'
-           . ',i',(string) $_SERVER['HTTP_USER_AGENT'])
+           . '80legs|accoona|AltaVista|ASPSeek|Baidu|Charlotte|EC2LinkFinder|eStyle|flipboard|hootsuite|FunWebProducts|Google|Genieo|INA dlweb|InfegyAtlas|Java VM|LiteFinder|Lycos|MegaIndex|MetaURI|Moreover|Rambler|Scrapy|Scooter|ScrubbyBloglines|Yahoo|Yeti'
+           . ',i', (string) $_SERVER['HTTP_USER_AGENT'])
        );
 
 /*
@@ -41,32 +50,32 @@ if (!defined('_IS_BOT'))
  * (id_base est une variable de la config des widgets de WordPress)
  */
 foreach ($_GET as $var => $val)
-       if ($_GET[$var] AND strncmp($var,"id_",3)==0
-       AND !in_array($var, array('id_table','id_base')))
-               $_GET[$var] = is_array($_GET[$var])?@array_map('intval',$_GET[$var]):intval($_GET[$var]);
+       if ($_GET[$var] and strncmp($var, "id_", 3) == 0
+       and !in_array($var, array('id_table', 'id_base')))
+               $_GET[$var] = is_array($_GET[$var])?@array_map('intval', $_GET[$var]):intval($_GET[$var]);
 foreach ($_POST as $var => $val)
-       if ($_POST[$var] AND strncmp($var,"id_",3)==0
-       AND !in_array($var, array('id_table','id_base')))
-               $_POST[$var] = is_array($_POST[$var])?@array_map('intval',$_POST[$var]):intval($_POST[$var]);
+       if ($_POST[$var] and strncmp($var, "id_", 3) == 0
+       and !in_array($var, array('id_table', 'id_base')))
+               $_POST[$var] = is_array($_POST[$var])?@array_map('intval', $_POST[$var]):intval($_POST[$var]);
 foreach ($GLOBALS as $var => $val)
-       if ($GLOBALS[$var] AND strncmp($var,"id_",3)==0
-       AND !in_array($var, array('id_table','id_base')))
-               $GLOBALS[$var] = is_array($GLOBALS[$var])?@array_map('intval',$GLOBALS[$var]):intval($GLOBALS[$var]);
+       if ($GLOBALS[$var] and strncmp($var, "id_", 3) == 0
+       and !in_array($var, array('id_table', 'id_base')))
+               $GLOBALS[$var] = is_array($GLOBALS[$var])?@array_map('intval', $GLOBALS[$var]):intval($GLOBALS[$var]);
 
 /*
  * Interdit la variable $cjpeg_command, qui Ã©tait utilisée sans
  * précaution dans certaines versions de dev (1.8b2 -> 1.8b5)
  */
-$cjpeg_command='';
+$cjpeg_command = '';
 
 /*
  * Contrôle de quelques variables (XSS)
  */
-foreach(array('lang', 'var_recherche', 'aide', 'var_lang_r', 'lang_r', 'var_ajax_ancre') as $var) {
+foreach(array('lang', 'var_recherche', 'aide', 'var_lang_r', 'lang_r', 'var_ajax_ancre', 'nom_fichier') as $var) {
        if (isset($_GET[$var]))
-               $_REQUEST[$var] = $GLOBALS[$var] = $_GET[$var] = preg_replace(',[^\w\,/#&;-]+,',' ',(string)$_GET[$var]);
+               $_REQUEST[$var] = $GLOBALS[$var] = $_GET[$var] = preg_replace(',[^\w\,/#&;-]+,', ' ', (string)$_GET[$var]);
        if (isset($_POST[$var]))
-               $_REQUEST[$var] = $GLOBALS[$var] = $_POST[$var] = preg_replace(',[^\w\,/#&;-]+,',' ',(string)$_POST[$var]);
+               $_REQUEST[$var] = $GLOBALS[$var] = $_POST[$var] = preg_replace(',[^\w\,/#&;-]+,', ' ', (string)$_POST[$var]);
 }
 
 /*
@@ -79,38 +88,47 @@ if (preg_match(',^(.*/)?spip_acces_doc\.,', (string)$_SERVER['REQUEST_URI'])) {
 /*
  * Pas d'inscription abusive
  */
-if (isset($_REQUEST['mode']) AND isset($_REQUEST['page'])
-AND !in_array($_REQUEST['mode'],array("6forum","1comite"))
-AND $_REQUEST['page'] == "identifiants")
+if (isset($_REQUEST['mode']) and isset($_REQUEST['page'])
+and !in_array($_REQUEST['mode'], array("6forum", "1comite"))
+and $_REQUEST['page'] == "identifiants")
        $ecran_securite_raison = "identifiants";
 
 /*
  * Agenda joue Ã  l'injection php
  */
 if (isset($_REQUEST['partie_cal'])
-AND $_REQUEST['partie_cal'] !== htmlentities((string)$_REQUEST['partie_cal']))
+and $_REQUEST['partie_cal'] !== htmlentities((string)$_REQUEST['partie_cal']))
        $ecran_securite_raison = "partie_cal";
 if (isset($_REQUEST['echelle'])
-AND $_REQUEST['echelle'] !== htmlentities((string)$_REQUEST['echelle']))
+and $_REQUEST['echelle'] !== htmlentities((string)$_REQUEST['echelle']))
        $ecran_securite_raison = "echelle";
 
 /*
  * Espace privé
  */
 if (isset($_REQUEST['exec'])
-AND !preg_match(',^[\w-]+$,', (string)$_REQUEST['exec']))
+and !preg_match(',^[\w-]+$,', (string)$_REQUEST['exec']))
        $ecran_securite_raison = "exec";
 if (isset($_REQUEST['cherche_auteur'])
-AND preg_match(',[<],', (string)$_REQUEST['cherche_auteur']))
+and preg_match(',[<],', (string)$_REQUEST['cherche_auteur']))
        $ecran_securite_raison = "cherche_auteur";
 if (isset($_REQUEST['exec'])
-AND $_REQUEST['exec'] == 'auteurs'
-AND preg_match(',[<],', (string)$_REQUEST['recherche']))
+and $_REQUEST['exec'] == 'auteurs'
+and preg_match(',[<],', (string)$_REQUEST['recherche']))
        $ecran_securite_raison = "recherche";
+if (isset($_REQUEST['exec'])
+and $_REQUEST['exec'] == 'info_plugin'
+and preg_match(',[<],', (string)$_REQUEST['plugin']))
+       $ecran_securite_raison = "plugin";
+if (isset($_REQUEST['exec'])
+and $_REQUEST['exec'] == 'puce_statut'
+and isset($_REQUEST['id'])
+and !intval($_REQUEST['id']))
+       $ecran_securite_raison = "puce_statut";
 if (isset($_REQUEST['action'])
-AND $_REQUEST['action'] == 'configurer') {
+and $_REQUEST['action'] == 'configurer') {
        if (@file_exists('inc_version.php')
-       OR @file_exists('ecrire/inc_version.php')) {
+       or @file_exists('ecrire/inc_version.php')) {
                function action_configurer() {
                        include_spip('inc/autoriser');
                        if(!autoriser('configurer', _request('configuration'))) {
@@ -138,7 +156,7 @@ if (strpos(
  * Bloque les requêtes fond=formulaire_
  */
 if (isset($_REQUEST['fond'])
-AND preg_match(',^formulaire_,i', $_REQUEST['fond']))
+and preg_match(',^formulaire_,i', $_REQUEST['fond']))
        $ecran_securite_raison = "fond=formulaire_";
 
 /*
@@ -152,9 +170,9 @@ if (isset($_REQUEST['GLOBALS']))
  * les agenda
  * les paginations entremélées
  */
-if (_IS_BOT AND (
-       (isset($_REQUEST['echelle']) AND isset($_REQUEST['partie_cal']) AND isset($_REQUEST['type']))
-       OR (strpos((string)$_SERVER['REQUEST_URI'],'debut_') AND preg_match(',[?&]debut_.*&debut_,', (string)$_SERVER['REQUEST_URI']))
+if (_IS_BOT and (
+       (isset($_REQUEST['echelle']) and isset($_REQUEST['partie_cal']) and isset($_REQUEST['type']))
+       or (strpos((string)$_SERVER['REQUEST_URI'], 'debut_') and preg_match(',[?&]debut_.*&debut_,', (string)$_SERVER['REQUEST_URI']))
 )
 )
        $ecran_securite_raison = "robot agenda/double pagination";
@@ -164,12 +182,12 @@ if (_IS_BOT AND (
  * Bloque un XSS sur une page inexistante
  */
 if (isset($_REQUEST['page'])) {
-       if ($_REQUEST['page']=='test_cfg')
+       if ($_REQUEST['page'] == 'test_cfg')
                $ecran_securite_raison = "test_cfg";
        if ($_REQUEST['page'] !== htmlspecialchars((string)$_REQUEST['page']))
                $ecran_securite_raison = "xsspage";
        if ($_REQUEST['page'] == '404'
-       AND isset($_REQUEST['erreur']))
+       and isset($_REQUEST['erreur']))
                $ecran_securite_raison = "xss404";
 }
 
@@ -177,7 +195,7 @@ if (isset($_REQUEST['page'])) {
  * XSS par array
  */
 foreach (array('var_login') as $var)
-if (isset($_REQUEST[$var]) AND is_array($_REQUEST[$var]))
+if (isset($_REQUEST[$var]) and is_array($_REQUEST[$var]))
        $ecran_securite_raison = "xss ".$var;
 
 /*
@@ -185,11 +203,11 @@ if (isset($_REQUEST[$var]) AND is_array($_REQUEST[$var]))
  */
 if (!function_exists('tmp_lkojfghx')) {
        function tmp_lkojfghx() {}
-       function tmp_lkojfghx2($a=0, $b=0, $c=0, $d=0) {
+       function tmp_lkojfghx2($a = 0, $b = 0, $c = 0, $d = 0) {
                // si jamais on est arrivé ici sur une erreur php
                // et qu'un autre gestionnaire d'erreur est défini, l'appeller
-               if ($b&&$GLOBALS['tmp_xhgfjokl'])
-                       call_user_func($GLOBALS['tmp_xhgfjokl'],$a,$b,$c,$d);
+               if ($b && $GLOBALS['tmp_xhgfjokl'])
+                       call_user_func($GLOBALS['tmp_xhgfjokl'], $a, $b, $c, $d);
        }
 }
 if (isset($_POST['tmp_lkojfghx3']))
@@ -201,14 +219,26 @@ if (isset($_POST['tmp_lkojfghx3']))
 if (isset($_REQUEST['transformer_xml']))
        $ecran_securite_raison = "transformer_xml";
 
+/*
+ * Outils XML mal sécurisés again
+ */
+if (isset($_REQUEST['var_url']) and $_REQUEST['var_url'] and isset($_REQUEST['exec']) and $_REQUEST['exec']=='valider_xml'){
+       $url = trim($_REQUEST['var_url']);
+       if (strncmp($url,'/',1)==0
+         or (($p=strpos($url,'..'))!==false AND strpos($url,'..',$p+3)!==false)
+               or (strpos($url,'://')!==false or strpos($url,':\\')!==false)) {
+               $ecran_securite_raison = 'URL interdite pour var_url';
+       }
+}
+
 /*
  * Sauvegarde mal securisée < 2.0.9
  */
 if (isset($_REQUEST['nom_sauvegarde'])
-AND strstr((string)$_REQUEST['nom_sauvegarde'], '/'))
+and strstr((string)$_REQUEST['nom_sauvegarde'], '/'))
        $ecran_securite_raison = 'nom_sauvegarde manipulee';
 if (isset($_REQUEST['znom_sauvegarde'])
-AND strstr((string)$_REQUEST['znom_sauvegarde'], '/'))
+and strstr((string)$_REQUEST['znom_sauvegarde'], '/'))
        $ecran_securite_raison = 'znom_sauvegarde manipulee';
 
 
@@ -216,17 +246,17 @@ AND strstr((string)$_REQUEST['znom_sauvegarde'], '/'))
  * op permet des inclusions arbitraires ;
  * on vérifie 'page' pour ne pas bloquer ... drupal
  */
-if (isset($_REQUEST['op']) AND isset($_REQUEST['page'])
-AND $_REQUEST['op'] !== preg_replace('/[^\-\w]/', '', $_REQUEST['op']))
+if (isset($_REQUEST['op']) and isset($_REQUEST['page'])
+and $_REQUEST['op'] !== preg_replace('/[^\-\w]/', '', $_REQUEST['op']))
        $ecran_securite_raison = 'op';
 
 /*
  * Forms & Table ne se méfiait pas assez des uploads de fichiers
  */
 if (count($_FILES)){
-       foreach($_FILES as $k=>$v){
-                if (preg_match(',^fichier_\d+$,',$k)
-                AND preg_match(',\.php,i',$v['name']))
+       foreach($_FILES as $k => $v){
+                if (preg_match(',^fichier_\d+$,', $k)
+                and preg_match(',\.php,i', $v['name']))
                        unset($_FILES[$k]);
        }
 }
@@ -234,7 +264,7 @@ if (count($_FILES)){
  * et Contact trop laxiste avec une variable externe
  * on bloque pas le post pour eviter de perdre des donnees mais on unset la variable et c'est tout
  */
-if (isset($_REQUEST['pj_enregistrees_nom']) AND $_REQUEST['pj_enregistrees_nom']){
+if (isset($_REQUEST['pj_enregistrees_nom']) and $_REQUEST['pj_enregistrees_nom']){
        unset($_REQUEST['pj_enregistrees_nom']);
        unset($_GET['pj_enregistrees_nom']);
        unset($_POST['pj_enregistrees_nom']);
@@ -244,7 +274,7 @@ if (isset($_REQUEST['pj_enregistrees_nom']) AND $_REQUEST['pj_enregistrees_nom']
  * reinstall=oui un peu trop permissif
  */
 if (isset($_REQUEST['reinstall'])
-AND $_REQUEST['reinstall'] == 'oui')
+and $_REQUEST['reinstall'] == 'oui')
        $ecran_securite_raison = 'reinstall=oui';
 
 /*
@@ -256,9 +286,9 @@ if (isset($_SERVER['HTTP_REFERER']))
 /*
  * Réinjection des clés en html dans l'admin r19561
  */
-if (strpos($_SERVER['REQUEST_URI'],"ecrire/")!==false){
-       $zzzz=implode("",array_keys($_REQUEST));
-       if (strlen($zzzz)!=strcspn($zzzz,'<>"\''))
+if (strpos($_SERVER['REQUEST_URI'], "ecrire/") !== false){
+       $zzzz = implode("", array_keys($_REQUEST));
+       if (strlen($zzzz) != strcspn($zzzz, '<>"\''))
                $ecran_securite_raison = 'Cle incorrecte en $_REQUEST';
 }
 
@@ -266,13 +296,13 @@ if (strpos($_SERVER['REQUEST_URI'],"ecrire/")!==false){
  * Injection par connect
  */
 if (isset($_REQUEST['connect'])
-       AND
+       and
        // cas qui permettent de sortir d'un commentaire PHP
-       (strpos($_REQUEST['connect'], "?")!==false
-        OR strpos($_REQUEST['connect'], "<")!==false
-        OR strpos($_REQUEST['connect'], ">")!==false
-        OR strpos($_REQUEST['connect'], "\n")!==false
-        OR strpos($_REQUEST['connect'], "\r")!==false)
+       (strpos($_REQUEST['connect'], "?") !== false
+        or strpos($_REQUEST['connect'], "<") !== false
+        or strpos($_REQUEST['connect'], ">") !== false
+        or strpos($_REQUEST['connect'], "\n") !== false
+        or strpos($_REQUEST['connect'], "\r") !== false)
        ) {
        $ecran_securite_raison = "malformed connect argument";
 }
@@ -289,6 +319,17 @@ if (isset($ecran_securite_raison)) {
        die("<html><title>Error 403: Forbidden</title><body><h1>Error 403</h1><p>You are not authorized to view this page ($ecran_securite_raison)</p></body></html>");
 }
 
+/*
+ * Un filtre filtrer_entites securise
+ */
+if (!function_exists('filtre_filtrer_entites_dist')) {
+       function filtre_filtrer_entites_dist($t) {
+               include_spip('inc/texte');
+               return interdire_scripts(filtrer_entites($t));
+       }
+}
+
+
 /*
  * Fin sécurité
  */
@@ -303,23 +344,23 @@ if (!defined('_ECRAN_SECURITE_LOAD'))
 
 if (
        defined('_ECRAN_SECURITE_LOAD')
-       AND _ECRAN_SECURITE_LOAD>0
-       AND _IS_BOT
-       AND $_SERVER['REQUEST_METHOD'] === 'GET'
-       AND (
+       and _ECRAN_SECURITE_LOAD > 0
+       and _IS_BOT
+       and $_SERVER['REQUEST_METHOD'] === 'GET'
+       and (
                (function_exists('sys_getloadavg')
-                 AND $load = sys_getloadavg()
-                 AND is_array($load)
-                 AND $load = array_shift($load)
+                 and $load = sys_getloadavg()
+                 and is_array($load)
+                 and $load = array_shift($load)
                )
-               OR
+               or
                (@is_readable('/proc/loadavg')
-                 AND $load = file_get_contents('/proc/loadavg')
-                 AND $load = floatval($load)
+                 and $load = file_get_contents('/proc/loadavg')
+                 and $load = floatval($load)
                )
        )
-       AND $load > _ECRAN_SECURITE_LOAD // eviter l'evaluation suivante si de toute facon le load est inferieur a la limite
-       AND rand(0, $load*$load) > _ECRAN_SECURITE_LOAD*_ECRAN_SECURITE_LOAD
+       and $load > _ECRAN_SECURITE_LOAD // eviter l'evaluation suivante si de toute facon le load est inferieur a la limite
+       and rand(0, $load * $load) > _ECRAN_SECURITE_LOAD * _ECRAN_SECURITE_LOAD
 ) {
        header("HTTP/1.0 503 Service Unavailable");
        header("Retry-After: 300");
@@ -329,6 +370,3 @@ if (
        header("Content-Type: text/html");
        die("<html><title>Status 503: Site temporarily unavailable</title><body><h1>Status 503</h1><p>Site temporarily unavailable (load average $load)</p></body></html>");
 }
-
-
-?>
\ No newline at end of file
index 448d7a7..0226197 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index f2fd355..83baced 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 78239c0..86b4068 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index f850e7c..ebf6ec6 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 1665e12..84f34de 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index caf4c5b..5f02ffe 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index ed5bbbc..398f7bb 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 3744f76..50b9631 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 06cce14..56c2182 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 9f4bfc2..168963c 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 89a35fa..8c7505f 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -22,7 +22,7 @@ function action_desinstaller_plugin_dist() {
        if (defined('_DIR_PLUGINS_SUPPL') AND $dir_plugins==_DIR_PLUGINS_SUPPL)
                $dir_type = "_DIR_PLUGINS_SUPPL";
        $installer_plugins = charger_fonction('installer', 'plugins');
-       $infos = $installer_plugins($plugin, 'uninstall');
+       $infos = $installer_plugins($plugin, 'uninstall',$dir_type);
        if ($infos AND !$infos['install_test'][0]) {
                include_spip('inc/plugin');
                ecrire_plugin_actifs(array($plugin),false,'enleve');
index 09ad864..982bddc 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -77,6 +77,7 @@ function article_modifier($id_article, $set=null) {
 
        if ($err = objet_modifier_champs('article', $id_article,
                array(
+                       'data' => $set,
                        'nonvide' => array('titre' => _T('info_nouvel_article')." "._T('info_numero_abbreviation').$id_article),
                        'invalideur' => $invalideur,
                        'indexation' => $indexation,
index 81e4204..210fa32 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -112,6 +112,7 @@ function auteur_modifier($id_auteur, $set = null, $force_update=false) {
 
        if ($err = objet_modifier_champs('auteur', $id_auteur,
                array(
+                       'data' => $set,
                        'nonvide' => array('nom' => _T('ecrire:item_nouvel_auteur'))
                ),
                $c))
index f5d5f87..c05a4e3 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 17a7ece..8df6352 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -106,6 +106,7 @@ function objet_modifier($objet, $id, $set=null) {
 
        if ($err = objet_modifier_champs($objet, $id,
                array(
+                       'data' => $set,
                        'nonvide' => '',
                        'invalideur' => $invalideur,
                        'indexation' => $indexation,
index 2c6ed64..c52e1a7 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -132,6 +132,7 @@ function rubrique_modifier($id_rubrique, $set=null) {
 
        if ($err = objet_modifier_champs('rubrique', $id_rubrique,
                array(
+                       'data' => $set,
                        'nonvide' => array('titre' => _T('titre_nouvelle_rubrique')." "._T('info_numero_abbreviation').$id_rubrique)
                ),
                $c))
index b9eede3..fbdb07b 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 4a62ff7..a6fd254 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index f71b953..54e359d 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index bf9211b..ed1f959 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -26,6 +26,7 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
  *   id : id_rubrique fournit en second arg de #FORMULAIRE_INSCRIPTION
  *   from : email de l'envoyeur pour l'envoi du mail d'inscription
  *   force_nouveau : forcer le statut nouveau sur l'auteur inscrit, meme si il existait deja en base
+ *   modele_mail : squelette de mail a utiliser
  * @return array|string
  */
 function action_inscrire_auteur_dist($statut, $mail_complet, $nom, $options = array()){
@@ -177,13 +178,6 @@ function test_login($nom, $mail) {
        if (strlen($login_base) < 3)
                $login_base = 'user';
 
-       // eviter aussi qu'il soit trop long (essayer d'attraper le prenom)
-       if (strlen($login_base) > 10) {
-               $login_base = preg_replace("/^(.{4,}(_.{1,7})?)_.*/",
-                       '\1', $login_base);
-               $login_base = substr($login_base, 0,13);
-       }
-
        $login = $login_base;
 
        for ($i = 1; ; $i++) {
@@ -217,8 +211,12 @@ function envoyer_inscription_dist($desc, $nom, $mode, $options=array()) {
        $contexte['url_confirm'] = parametre_url($contexte['url_confirm'],'email',$desc['email']);
        $contexte['url_confirm'] = parametre_url($contexte['url_confirm'],'jeton',$desc['jeton']);
 
-       $message = recuperer_fond('modeles/mail_inscription',$contexte);
-       $from = (isset($options['from'])?$options['from']:null);
+       $modele_mail = 'modeles/mail_inscription';
+       if (isset($options['modele_mail']) and $options['modele_mail']){
+               $modele_mail = $options['modele_mail'];
+       }
+       $message = recuperer_fond($modele_mail, $contexte);
+       $from = (isset($options['from']) ? $options['from'] : null);
        $head = null;
        return array("", $message,$from,$head);
 }
@@ -337,4 +335,4 @@ function auteur_verifier_jeton($jeton){
  */
 function auteur_effacer_jeton($id_auteur){
        return sql_updateq("spip_auteurs", array("cookie_oubli" => ''), "id_auteur=" . intval($id_auteur));
-}
\ No newline at end of file
+}
index 4ffac96..4b49751 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -18,25 +18,45 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
  * @param int $id
  * @param int $id_rubrique
  * @param string $changer_lang
+ * @param string $serveur
  * @return string
  */
-function action_instituer_langue_objet_dist($objet,$id, $id_rubrique, $changer_lang) {
+function action_instituer_langue_objet_dist($objet, $id, $id_rubrique, $changer_lang, $serveur='') {
        if ($changer_lang) {
                $table_objet_sql = table_objet_sql($objet);
                $id_table_objet = id_table_objet($objet);
-
+               $trouver_table = charger_fonction('trouver_table', 'base');
+               $desc = $trouver_table($table_objet_sql, $serveur);
+               
+               $set = array();
+               if (isset($desc['field']['langue_choisie'])){
+                       $set['langue_choisie'] = 'oui';
+               }
+               
                if ($changer_lang != "herit") {
-                       sql_updateq($table_objet_sql, array('lang'=>$changer_lang, 'langue_choisie'=>'oui'), "$id_table_objet=".intval($id));
-                       include_spip('inc/rubriques');
-                       $langues = calculer_langues_utilisees();
+                       $set['lang'] = $changer_lang;
+                       sql_updateq($table_objet_sql, $set, "$id_table_objet=" . intval($id),'',$serveur);
+                       include_spip('inc/rubriques'); // pour calculer_langues_rubriques et calculer_langues_utilisees
+                       if ($table_objet_sql == 'spip_rubriques') {
+                               calculer_langues_rubriques();
+                       }
+                       $langues = calculer_langues_utilisees($serveur);
                        ecrire_meta('langues_utilisees', $langues);
                }
                else {
                        $langue_parent = sql_getfetsel("lang", "spip_rubriques", "id_rubrique=" . intval($id_rubrique));
                        if (!$langue_parent)
                                $langue_parent = $GLOBALS['meta']['langue_site'];
-                       sql_updateq($table_objet_sql, array('lang'=>$langue_parent, 'langue_choisie'=>'non'), "$id_table_objet=".intval($id));
                        $changer_lang = $langue_parent;
+                       $set['lang'] = $changer_lang;
+                       if (isset($set['langue_choisie'])){
+                               $set['langue_choisie'] = 'non';
+                       }
+                       sql_updateq($table_objet_sql, $set, "$id_table_objet=" . intval($id),'',$serveur);
+                       if ($table_objet_sql == 'spip_rubriques') {
+                               include_spip('inc/rubriques');
+                               calculer_langues_rubriques();
+                       }
                }
        }
        return $changer_lang;
index 0de3358..1889317 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index ef86dbf..b3a0180 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 4abb813..97adb05 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 8b97c78..c6a8877 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 1292b7d..89428aa 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index cc4359c..fef9f1a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 886c2e5..0bd4986 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index bf2f297..292eb98 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 114dffa..855777a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 0b1b3d7..53cb8b5 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 212afb4..a5f6150 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 4449356..2451d38 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index f8f1343..e89fb3e 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 4d5c685..8f805ca 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 32c1e71..decb36f 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 1fe1626..6fe03fc 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 4de7df6..3ceec10 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -136,9 +136,9 @@ function auth_ldap_search($login, $pass, $checkpass=true, $serveur=''){
        if (!$ldap = auth_ldap_connect($serveur))
                return '';
 
-       $ldap_link = $ldap['link'];
-       $ldap_base = $ldap['base'];
-       $desc = $ldap['attributes'] ? $ldap['attributes'] : $GLOBALS['ldap_attributes'] ;
+       $ldap_link = isset($ldap['link']) ? $ldap['link'] : null;
+       $ldap_base = isset($ldap['base']) ? $ldap['base'] : null;
+       $desc = isset($ldap['attributes']) && $ldap['attributes'] ? $ldap['attributes'] : $GLOBALS['ldap_attributes'] ;
 
        $logins = is_array($desc['login']) ? $desc['login'] : array($desc['login']);
 
index 5da5853..3221063 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 93c3248..7ea1438 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 631b865..28ea0da 100644 (file)
@@ -2,7 +2,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 31a988c..4bc30c6 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index a91987a..629d229 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 7831b25..be6dd66 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 6c0c91e..23c021e 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 16e1fba..70370c4 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index d72a5e5..64b9dd1 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index ab48a33..9fede36 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 833b492..f888feb 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index b0dc3fb..3d6459e 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 5c115a9..a7332fc 100644 (file)
@@ -3,7 +3,7 @@
 /* *************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 61e7918..72b8b3f 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 41eeff1..e215a0e 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -11,7 +11,7 @@
 \***************************************************************************/
 
 if (!defined('_ECRIRE_INC_VERSION')) return;
-include_spip('base/objets');
+require_once _ROOT_RESTREINT . 'base/objets.php';
 
 //
 // Utilitaires indispensables autour des serveurs SQL
index 2b97459..1740bb6 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 481b272..be29f99 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 8b2709d..58639ad 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 42e07f7..42aa17e 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 4d13029..e5d3ee3 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index e454b5c..e4f3a90 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 7f42984..1e3dd37 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index cb12422..61e46c6 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 34e39a0..34c0e00 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 1ed320a..077d36b 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index bbdd0bc..617e419 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 71f29b6..9f0ffc4 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 90ef329..1086e9e 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 8003d0e..b533584 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 1e615e5..b4f3d96 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 0927bfe..c7f2f38 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index fcd3d99..81e231a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index d7c3d97..cf53cd5 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 4f8047b..17e3d09 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 216f898..4ca8f0a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 7abfd23..c30fe6c 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index e4266b0..c2f1fd5 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 838daf7..048e179 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 50a6d36..0d362c5 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 3c630ab..4a70f24 100644 (file)
@@ -2,7 +2,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 710c7f0..41d5bb8 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 2f54a9e..f601c37 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index db3ee92..b6a8fbe 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -27,23 +27,60 @@ include_spip('public/debusquer');
 // http://doc.spip.org/@exec_valider_xml_dist
 function exec_valider_xml_dist()
 {
-       if (!autoriser('sauvegarder')) {
+       if (!autoriser('webmestre')) {
                include_spip('inc/minipres');
                echo minipres();
-       } else valider_xml_ok(_request('var_url'), _request('ext'), intval(_request('limit')), _request('recur'));
+       } else {
+               $erreur = "";
+               // verifier que les var de l'URL sont conformes avant d'appeler la fonction
+               $url = trim(_request('var_url'));
+               if (strncmp($url,'/',1)==0) $erreur = 'Chemin absolu interdit pour var_url';
+               // on a pas le droit de remonter plus de 1 fois dans le path (pas 2 occurences de ../ ou ..\ (win))
+               if (($p=strpos($url,'..'))!==false AND strpos($url,'..',$p+3)!==false) $erreur = 'Interdit de remonter en dehors de la racine';
+               if (strpos($url,'://')!==false or strpos($url,':\\')!==false) $erreur = 'URL absolue interdite pour var_url';
+
+               $ext = trim(_request('ext'));
+               $ext = ltrim($ext,'.'); // precaution
+               if (preg_match('/\W/',$ext)) $erreur = 'Extension invalide';
+
+               // en GET var_url doit etre signee, en POST seule l'action est signee
+               // CSRF safe
+               $process = true;
+               if ($url){
+                       include_spip('inc/securiser_action');
+                       if ($_SERVER["REQUEST_METHOD"]=='POST'){
+                               if (!$token = _request('var_token')
+                                 or !verifier_cle_action("valider_xml",$token)){
+                                       $process = false;
+                               }
+                       }
+                       if ($_SERVER["REQUEST_METHOD"]!='POST'){
+                               if (!$token = _request('var_token')
+                                 or !verifier_cle_action("valider_xml&var_url=$url",$token)){
+                                       $process = false;
+                               }
+                       }
+               }
+
+               if ($erreur){
+                       include_spip('inc/minipres');
+                       echo minipres($erreur);
+               }
+               else {
+                       valider_xml_ok($url, $ext, intval(_request('limit')), _request('recur'), $process);
+               }
+       }
 }
 
 // http://doc.spip.org/@valider_xml_ok
-function valider_xml_ok($url, $req_ext, $limit, $rec)
-{
+function valider_xml_ok($url, $req_ext, $limit, $rec, $process = true) {
        $url = urldecode($url);
        $rec = !$rec ? false : array();
        if (!$limit) $limit = 200;
        $titre = _T('analyse_xml');
        if (!$url) {
-               $url_aff = 'http://';
-               $onfocus = "this.value='';";
-               $texte = $bandeau = $err = '';
+               $url_aff = '';
+               $bandeau = $err = '';
        } else {
                include_spip('inc/distant');
 
@@ -78,24 +115,28 @@ function valider_xml_ok($url, $req_ext, $limit, $rec)
                                }
                        } else { $dir = 'exec'; $script = $url; $args = true;}
 
-                       $transformer_xml = charger_fonction('valider', 'xml');
-                       $onfocus = "this.value='" . addslashes($url) . "';";
-                       if (preg_match(',^[a-z][0-9a-z_]*$,i', $url)) {
-                               $res = $transformer_xml(charger_fonction($url, $dir), $args);
-                               $url_aff = valider_pseudo_url($dir, $script);
-                       } else {
-                               $res = $transformer_xml(recuperer_page($url));
-                               $url_aff = entites_html($url);
-                       }
-                       list($texte, $err) = emboite_texte($res);
-                       if (!$err) {
-                               $err = '<h3>' . _T('spip_conforme_dtd') . '</h3>';
+                       $url_aff = entites_html($url);
+                       $bandeau = "";
+                       $res = "";
+                       if ($process) {
+                               $transformer_xml = charger_fonction('valider', 'xml');
+                               if (preg_match(',^[a-z][0-9a-z_]*$,i', $url)) {
+                                       $res = $transformer_xml(charger_fonction($url, $dir), $args);
+                                       $url_aff = valider_pseudo_url($dir, $script);
+                               } else {
+                                       $res = $transformer_xml(recuperer_page($url));
+                                       $url_aff = entites_html($url);
+                               }
+                               list($texte, $err) = emboite_texte($res);
+                               if (!$err) {
+                                       $err = '<h3>' . _T('spip_conforme_dtd') . '</h3>';
+                               }
+                               $res =
+                                       "<div style='text-align: center'>" . $err . "</div>" .
+                                       "<div style='margin: 10px; text-align: left'>" . $texte . '</div>';
+                               $bandeau = "<a href='$url_aff'>".$url_aff."</a>";
                        }
 
-                       $res =
-                       "<div style='text-align: center'>" . $err . "</div>" .
-                       "<div style='margin: 10px; text-align: left'>" . $texte . '</div>';
-                       $bandeau = "<a href='$url_aff'>$url</a>";
                }
        }
 
@@ -103,19 +144,34 @@ function valider_xml_ok($url, $req_ext, $limit, $rec)
        $debut = $commencer_page($titre);
        $jq = http_script("", 'jquery.js');
        
+
        echo str_replace('<head>', "<head>$jq", $debut);
-       $onfocus = '<input type="text" size="70" value="' .$url_aff .'" name="var_url" id="var_url" onfocus="'.$onfocus . '" />';
-       $onfocus = generer_form_ecrire('valider_xml', $onfocus, " method='get'");
+       include_spip('inc/securiser_action');
+       $token = calculer_cle_action("valider_xml");
+       $texte = '<input type="text" size="70" value="' . $url_aff . '" name="var_url" id="var_url" placeholder="http://" />';
+       $texte .= '<input type="hidden" value="' . $token . '" name="var_token" />';
+       $texte .= '<input type="hidden" value="' . $req_ext . '" name="ext" />';
+       $texte .= '<input type="submit" value="Go" />';
+       $texte = generer_form_ecrire('valider_xml', $texte, " method='post'");
+
+       $self = generer_url_ecrire('valider_xml');
+       $self = parametre_url($self, 'var_url', $url);
+       $self = parametre_url($self, 'ext', $req_ext);
+       $self = parametre_url($self, 'limit', $limit);
+       $self = parametre_url($self, 'rec', $rec);
+       $self = "<a href='$self'>$self</a>";
 
-       echo "<h1>", $titre, '<br>', $bandeau, '</h1>',
-         "<div style='text-align: center'>", $onfocus, "</div>",
+       echo "<h1 class='grostitre'>", $titre, " <small>$bandeau</small>", '</h1>',
+         "<div style='text-align: center'>", $texte, "</div>",
          $res,
+         "<br /><br /><p><small>$self</small></p>",
          fin_page();
 }
 
 // http://doc.spip.org/@valider_resultats
 function valider_resultats($res, $mode)
 {
+       include_spip('inc/securiser_action');
        $i = $j = 0;
        $table = '';
        rsort($res);
@@ -132,10 +188,14 @@ function valider_resultats($res, $mode)
                  ($erreurs[0][0] . ' ' . _T('ligne') . ' ' .
                   $erreurs[0][1] .($nb==1? '': '  ...'));
                if ($err) $j++;
-               $h = $mode
-               ? ($appel . '&var_mode=debug&var_mode_affiche=validation')
-               : generer_url_ecrire('valider_xml', "var_url=" . urlencode($appel));
-               
+               if ($mode) {
+                       $h = $appel . '&var_mode=debug&var_mode_affiche=validation';
+               }
+               else {
+                       $h = generer_url_ecrire('valider_xml', "var_url=" . urlencode($appel));
+                       $h = parametre_url($h,'var_token', calculer_cle_action("valider_xml&var_url=$appel"));
+               }
+
                $table .= "<tr class='$class'>"
                . "<td style='text-align: right'>$nb</td>"
                . "<td style='text-align: right$color'>$texte</td>"
index d584959..2859347 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 0508135..9f76add 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 31eefb8..86a0868 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 200b579..4d93291 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index c7bb2d3..90cd3dc 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 7e2cb76..0981bab 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index e902262..2f70a84 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index bae9078..90b8f43 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index be9e706..c4b6f20 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -325,9 +325,18 @@ function auth_administrer($fonction,$args,$defaut=false){
        if ($auth = charger_fonction($auth_methode,'auth',true)
                AND function_exists($f="auth_{$auth_methode}_$fonction")
        )
-               return call_user_func_array($f, $args);
+               $res = call_user_func_array($f, $args);
        else
-               return $defaut;
+               $res = $defaut;
+       $res = pipeline('auth_administrer',array(
+               'args' => array(
+                       'fonction' => $fonction,
+                       'methode' => $auth_methode,
+                       'args' => $args
+               ),
+               'data' => $res
+       ));
+       return $res;
 }
 
 /**
index c3c91a9..fbccc13 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 1dade27..e272254 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index ec9a28f..aa8be69 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index c7a0859..01cdecd 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 35151ce..abd81d7 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index e68c549..b37e58c 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index d60c54a..7fa1488 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index c843898..1d1aacf 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 0e4c622..d19364f 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index f410fca..58cb005 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 2f52bfd..ae90101 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index af7837e..36b41c3 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -75,7 +75,9 @@ function cvtautosave_formulaire_traiter($flux){
        if ($cle_autosave = _request('autosave')){
                include_spip('inc/session');
                session_set('session_autosave_'.$cle_autosave, null);
+       }
 
+       if (isset($GLOBALS['visiteur_session']) AND $GLOBALS['visiteur_session']){
                // delai par defaut avant purge d'un backup de form : 72H
                if (!defined('_AUTOSAVE_GB_DELAY')) define('_AUTOSAVE_GB_DELAY',72*3600);
                $time_too_old = time() - _AUTOSAVE_GB_DELAY;
@@ -92,6 +94,7 @@ function cvtautosave_formulaire_traiter($flux){
                        }
                }
        }
+       
        return $flux;
 }
 
index ed20842..da1901f 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 84ecde5..00c8623 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 31b5e51..f998959 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -45,9 +45,11 @@ define('_REGEXP_COPIE_LOCALE', ',' .
  *   'force' - charger toujours (mettre a jour)
  * @param string $local
  *   permet de specifier le nom du fichier local (stockage d'un cache par exemple, et non document IMG)
+ * @param int $taille_max
+ *   taille maxi de la copie local, par defaut _COPIE_LOCALE_MAX_SIZE
  * @return bool|string
  */
-function copie_locale($source, $mode='auto', $local = null) {
+function copie_locale($source, $mode='auto', $local=null, $taille_max=null){
 
        // si c'est la protection de soi-meme, retourner le path
        if ($mode !== 'force' AND preg_match(_REGEXP_COPIE_LOCALE, $source, $match)) {
@@ -82,7 +84,8 @@ function copie_locale($source, $mode='auto', $local = null) {
                // passer par un fichier temporaire unique pour gerer les echecs en cours de recuperation
                // et des eventuelles recuperations concurantes
                include_spip("inc/acces");
-               $res = recuperer_page($source, $localrac, false, _COPIE_LOCALE_MAX_SIZE, '', '', false, $t ? filemtime($localrac) : '');
+               if (!$taille_max) $taille_max = _COPIE_LOCALE_MAX_SIZE;
+               $res = recuperer_page($source, $localrac, false, $taille_max, '', '', false, $t ? filemtime($localrac) : '');
                if (!$res) {
                        if (!$t) // si $t c'est sans doute juste un not-modified-since qui fait renvoyer false
                                spip_log("copie_locale : Echec recuperation $source sur $localrac",_LOG_INFO_IMPORTANTE);
@@ -191,6 +194,31 @@ function prepare_donnees_post($donnees, $boundary = '') {
        return array($entete, $chaine);
 }
 
+/**
+ * Convertir une URL dont le host est en utf8 en ascii
+ * Utilise la librairie https://github.com/phlylabs/idna-convert/tree/v0.9.1
+ * dans sa derniere version compatible toutes version PHP 5
+ * La fonction PHP idn_to_ascii depend d'un package php5-intl et est rarement disponible
+ *
+ * @param string $url_idn
+ * @return array|string
+ */
+function url_to_ascii($url_idn) {
+
+       if ($parts = parse_url($url_idn)) {
+               $host = $parts['host'];
+               if (!preg_match(',^[a-z0-9_\.\-]+$,i', $host)) {
+                       include_spip('inc/idna_convert.class');
+                       $IDN = new idna_convert();
+                       $host_ascii = $IDN->encode($host);
+                       $url_idn = explode($host, $url_idn, 2);
+                       $url_idn = implode($host_ascii, $url_idn);
+               }
+       }
+
+       return $url_idn;
+}
+
 //
 // Recupere une page sur le net
 // et au besoin l'encode dans le charset local
@@ -222,6 +250,7 @@ function recuperer_page($url, $trans = false, $get_headers = false,
        // Accepter les URLs au format feed:// ou qui ont oublie le http://
        $url = preg_replace(',^feed://,i', 'http://', $url);
        if (!preg_match(',^[a-z]+://,i', $url)) $url = 'http://' . $url;
+       $url = url_to_ascii($url);
 
        if ($taille_max==0)
                $get = 'HEAD';
@@ -503,6 +532,11 @@ function fichier_copie_locale($source){
 // http://doc.spip.org/@recuperer_infos_distantes
 function recuperer_infos_distantes($source, $max = 0, $charger_si_petite_image = true){
 
+       // pas la peine de perdre son temps
+       if (!tester_url_absolue($source)) {
+               return false;
+       }
+       
        # charger les alias des types mime
        include_spip('base/typedoc');
        global $mime_alias;
@@ -581,6 +615,11 @@ function recuperer_infos_distantes($source, $max = 0, $charger_si_petite_image =
                $a = recuperer_infos_distantes($source, _INC_DISTANT_MAX_SIZE);
        }
 
+       // si on a rien trouve pas la peine d'insister
+       if (!$a) {
+               return false;
+       }
+
        // S'il s'agit d'une image pas trop grosse ou d'un fichier html, on va aller
        // recharger le document en GET et recuperer des donnees supplementaires...
        if (preg_match(',^image/(jpeg|gif|png|swf),', $mime_type)){
index 634a55a..038e1ec 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index e82df71..394a86f 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index af084e4..51f59f0 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -69,7 +69,8 @@ function formulaires_editer_objet_verifier($type,$id='new', $oblis = array()){
                }
        }
        foreach($oblis as $obli) {
-               if (!_request($obli)) {
+               $value = _request($obli);
+               if (is_null($value) OR !(is_array($value)?count($value):strlen($value))) {
                        if (!isset($erreurs[$obli])) { $erreurs[$obli] = ''; }
                        $erreurs[$obli] .= _T("info_obligatoire");
                }
index 367430c..187eab5 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index ae61ab2..96df45b 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -419,6 +419,19 @@ function filtrer_entites($texte) {
        return $texte;
 }
 
+/**
+ * Version securisee de filtrer_entites
+ * @param string $t
+ * @return string
+ */
+if (!function_exists('filtre_filtrer_entites_dist')) {
+       function filtre_filtrer_entites_dist($t) {
+               include_spip('inc/texte');
+               return interdire_scripts(filtrer_entites($t));
+       }
+}
+
+
 // caracteres de controle - http://www.w3.org/TR/REC-xml/#charsets
 // http://doc.spip.org/@supprimer_caracteres_illegaux
 function supprimer_caracteres_illegaux($texte) {
@@ -426,7 +439,7 @@ function supprimer_caracteres_illegaux($texte) {
        static $to = null;
        
        if (is_array($texte)) {
-               return array_map('corriger_caracteres_windows', $texte);
+               return array_map('supprimer_caracteres_illegaux', $texte);
        }
        
        if (!$to) $to = str_repeat('-', strlen($from));
@@ -1322,8 +1335,8 @@ function filtrer_ical($texte) {
 function date_ical($date, $addminutes = 0) {
        list($heures, $minutes, $secondes) = recup_heure($date);
        list($annee, $mois, $jour) = recup_date($date);
-       return date("Ymd\THis", 
-                   mktime($heures, $minutes+$addminutes,$secondes,$mois,$jour,$annee));
+
+       return gmdate("Ymd\THis\Z", mktime($heures, $minutes + $addminutes, $secondes, $mois, $jour, $annee));
 }
 
 // date_iso retourne la date au format "RFC 3339" / "ISO 8601"
@@ -2201,21 +2214,31 @@ function url_absolue_css ($css) {
  * @param mixed $defaut
  *             Valeur par defaut retournee si la cle demandee n'existe pas
  * 
+ * @param bool  $conserver_null
+ *     Permet de forcer la fonction Ã  renvoyer la valeur null d'un index
+ *     et non pas $defaut comme cela est fait naturellement par la fonction
+ *     isset. On utilise alors array_key_exists() Ã  la place de isset().
+ *
  * @return mixed Valeur trouvee ou valeur par defaut.
 **/
-function table_valeur($table, $cle, $defaut='') {
+function table_valeur($table, $cle, $defaut = '', $conserver_null = false) {
        foreach (explode('/', $cle) as $k) {
 
                $table = is_string($table) ? @unserialize($table) : $table;
 
                if (is_object($table)) {
-                       $table =  (($k !== "") and isset($table->$k)) ? $table->$k : $defaut;
+                       $table = (($k !== "") and isset($table->$k)) ? $table->$k : $defaut;
                } elseif (is_array($table)) {
-                       $table = isset($table[$k]) ? $table[$k] : $defaut;
+                       if ($conserver_null) {
+                               $table = array_key_exists($k, $table) ? $table[$k] : $defaut;
+                       } else {
+                               $table = isset($table[$k]) ? $table[$k] : $defaut;
+                       }
                } else {
                        $table = $defaut;
                }
        }
+
        return $table;
 }
 
@@ -2507,8 +2530,10 @@ function encoder_contexte_ajax($c,$form='', $emboite=NULL, $ajaxid='') {
        
        if (!function_exists('calculer_cle_action'))
                include_spip("inc/securiser_action");
-       $cle = calculer_cle_action($form.(is_array($c)?serialize($c):$c));
-       $c = serialize(array($c,$cle));
+
+       $c = serialize($c);
+       $cle = calculer_cle_action($form . $c);
+       $c = "$cle:$c";
 
        // on ne stocke pas les contextes dans des fichiers caches
        // par defaut, sauf si cette configuration a ete forcee
@@ -2554,8 +2579,10 @@ function encoder_contexte_ajax($c,$form='', $emboite=NULL, $ajaxid='') {
        $r = self();
        $r = ' data-origin="'.$r.'"';
        $class = 'ajaxbloc';
-       if ($ajaxid AND is_string($ajaxid)){
-               $class .= ' ajax-id-'.$ajaxid;
+       if ($ajaxid and is_string($ajaxid)) {
+               // ajaxid est normalement conforme a un nom de classe css
+               // on ne verifie pas la conformite, mais on passe entites_html par dessus par precaution
+               $class .= ' ajax-id-' . entites_html($ajaxid);
        }
        return "<div class='$class' "."data-ajax-env='$env'$r>\n$emboite</div><!--ajaxbloc-->\n";
 }
@@ -2575,10 +2602,20 @@ function decoder_contexte_ajax($c,$form='') {
                if (function_exists('gzdeflate') && function_exists('gzinflate'))
                        $c = @gzinflate($c);
        }
-       list($env, $cle) = @unserialize($c);
 
-       if ($cle == calculer_cle_action($form.(is_array($env)?serialize($env):$env)))
-               return $env;
+       // extraire la signature en debut de contexte
+       // et la verifier avant de deserializer
+       // format : signature:donneesserializees
+       if ($p = strpos($c,":")){
+               $cle = substr($c,0,$p);
+               $c = substr($c,$p+1);
+
+               if ($cle == calculer_cle_action($form . $c)) {
+                       $env = @unserialize($c);
+                       return $env;
+               }
+       }
+
        return false;
 }
 
index 2f2c628..51feb3a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 8d310fb..edd6087 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 03620a1..468d619 100644 (file)
@@ -3,7 +3,7 @@
 /* *************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -145,6 +145,11 @@ function _image_valeurs_trans($img, $effet, $forcer_format = false, $fonction_cr
        }       else {
                // enlever le timestamp eventuel
                $source=preg_replace(',[?][0-9]+$,','',$source);
+               if (strpos($source,"?")!==false
+                       AND strncmp($source,_DIR_IMG,strlen(_DIR_IMG))==0
+                       AND file_exists($f=preg_replace(',[?].*$,','',$source))){
+                       $source = $f;
+               }
                $fichier = $source;
        }
 
@@ -508,8 +513,8 @@ function _image_gd_output($img,$valeurs, $qualite=_IMG_GD_QUALITE){
 function reconstruire_image_intermediaire($fichier_manquant){
        $reconstruire = array();
        $fichier = $fichier_manquant;
-       while (
-               !@file_exists($fichier)
+       while (strpos($fichier,"://")===false
+               and !@file_exists($fichier)
                AND lire_fichier($src = "$fichier.src",$source)
                AND $valeurs=unserialize($source)
     AND ($fichier = $valeurs['fichier']) # l'origine est connue (on ne verifie pas son existence, qu'importe ...)
@@ -528,10 +533,29 @@ function reconstruire_image_intermediaire($fichier_manquant){
        ramasse_miettes($fichier_manquant);
 }
 
-// http://doc.spip.org/@ramasse_miettes
-function ramasse_miettes($fichier){
-       if (!lire_fichier($src = "$fichier.src",$source) 
-               OR !$valeurs=unserialize($source)) return;
+/**
+ * Indique qu'un fichier d'image calculé est Ã  conserver
+ *
+ * Permet de rendre une image définitive et de supprimer les images
+ * intermédiaires Ã  son calcul.
+ *
+ * Supprime le fichier de contrôle de l’image cible (le $fichier.src)
+ * ce qui indique que l'image est définitive.
+ *
+ * Remonte ensuite la chaîne des fichiers de contrôle pour supprimer
+ * les images temporaires (mais laisse les fichiers de contrôle permettant
+ * de les reconstruire).
+ *
+ * @param string $fichier
+ *     Chemin du fichier d'image calculé
+ **/
+function ramasse_miettes($fichier) {
+       if (strpos($fichier,"://")!==false
+               or !lire_fichier($src = "$fichier.src", $source)
+               or !$valeurs = unserialize($source)
+       ) {
+               return;
+       }
        spip_unlink($src); # on supprime la reference a sa source pour marquer cette image comme non intermediaire
        while (
             ($fichier = $valeurs['fichier']) # l'origine est connue (on ne verifie pas son existence, qu'importe ...)
@@ -558,8 +582,10 @@ function image_graver($img){
        if (strlen($fichier) < 1)
                $fichier = $img;
        # si jamais le fichier final n'a pas ete calcule car suppose temporaire
-       if (!@file_exists($fichier))
+       # et qu'il ne s'agit pas d'une URL
+       if (strpos($fichier,"://")===false and !@file_exists($fichier)) {
                reconstruire_image_intermediaire($fichier);
+       }
        ramasse_miettes($fichier);
        return $img; // on ne change rien
 }
index 5bcdf14..fc47c45 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 4b6973c..9f11d0f 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index cc10091..c65a2da 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -100,22 +100,25 @@ function protocole_implicite($url_absolue){
 // ne s'applique qu'aux textes contenant des liens
 // http://doc.spip.org/@liens_absolus
 function liens_absolus($texte, $base='') {
-       if (preg_match_all(',(<(a|link|image)[[:space:]]+[^<>]*href=["\']?)([^"\' ><[:space:]]+)([^<>]*>),imsS', 
+       if (preg_match_all(',(<(a|link|image|img|script)\s[^<>]*(href|src)=[^<>]*>),imsS', 
        $texte, $liens, PREG_SET_ORDER)) {
-               foreach ($liens as $lien) {
-                       $abs = url_absolue($lien[3], $base);
-                       if ($abs <> $lien[3] and !preg_match('/^#/',$lien[3]))
-                               $texte = str_replace($lien[0], $lien[1].$abs.$lien[4], $texte);
+               if (!function_exists('extraire_attribut')) {
+                       include_spip('inc/filtres');
                }
-       }
-       if (preg_match_all(',(<(img|script)[[:space:]]+[^<>]*src=["\']?)([^"\' ><[:space:]]+)([^<>]*>),imsS', 
-       $texte, $liens, PREG_SET_ORDER)) {
                foreach ($liens as $lien) {
-                       $abs = url_absolue($lien[3], $base);
-                       if ($abs <> $lien[3])
-                               $texte = str_replace($lien[0], $lien[1].$abs.$lien[4], $texte);
+                       foreach(array('href', 'src') as $attr) {
+                               $href = extraire_attribut($lien[0], $attr);
+                               if (strlen($href)>0) {
+                                       $abs = url_absolue($href, $base);
+                                       if ($href != $abs and !preg_match('/^#/',$href)) {
+                                               $texte_lien = inserer_attribut($lien[0], $attr, $abs);
+                                               $texte = str_replace($lien[0],$texte_lien,$texte);
+                                       }
+                               }
+                       }
                }
        }
+
        return $texte;
 }
 
index 75b0fcb..6a96201 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -181,7 +181,9 @@ function ecrire_fichier ($fichier, $contenu, $ignorer_echec = false, $truncate=t
                // liberer le verrou et fermer le fichier
                @chmod($fichier, _SPIP_CHMOD & 0666);
                if ($ok) {
-                       spip_clear_opcode_cache(realpath($fichier));
+                       if (strpos($fichier,".php")!==false){
+                               spip_clear_opcode_cache(realpath($fichier));
+                       }
                        return $ok;
                }
        }
@@ -415,14 +417,7 @@ function sous_repertoire($base, $subdir='', $nobase = false, $tantpis=false) {
        @mkdir($path, _SPIP_CHMOD);
        @chmod($path, _SPIP_CHMOD);
 
-       $ok = false;
-       if ($test = @fopen("$path/dir_test.php", "w")) {
-               @fputs($test, '<'.'?php $ok = true; ?'.'>');
-               @fclose($test);
-               @include("$path/dir_test.php");
-               spip_unlink("$path/dir_test.php");
-       }
-       if ($ok) {
+       if (is_dir($path) && is_writable($path)) {
                @touch ("$path/.ok");
                spip_log("creation $base$subdir/");
                return $baseaff.($dirs[$base.$subdir] = "$subdir/");
@@ -440,7 +435,7 @@ function sous_repertoire($base, $subdir='', $nobase = false, $tantpis=false) {
                if (!_DIR_RESTREINT)
                        $base = preg_replace(',^' . _DIR_RACINE .',', '',$base);
                $base .= $subdir;
-               raler_fichier($base . ($test?'/.ok':'/dir_test.php'));
+               raler_fichier($base . '/.plat');
        }
        spip_log("faux sous-repertoire $base${subdir}");
        return $baseaff.($dirs[$base.$subdir] = "${subdir}_");
index a688129..4ba2608 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index b237baa..ca8a4f5 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index cfa9a41..97a873a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 81bf8f0..618d2b7 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
diff --git a/www/ecrire/inc/idna_convert.class.php b/www/ecrire/inc/idna_convert.class.php
new file mode 100755 (executable)
index 0000000..5407a99
--- /dev/null
@@ -0,0 +1,3461 @@
+<?php
+
+// {{{ license
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker: */
+//
+// +----------------------------------------------------------------------+
+// | This library is free software; you can redistribute it and/or modify |
+// | it under the terms of the GNU Lesser General Public License as       |
+// | published by the Free Software Foundation; either version 2.1 of the |
+// | License, or (at your option) any later version.                      |
+// |                                                                      |
+// | This library 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    |
+// | Lesser General Public License for more details.                      |
+// |                                                                      |
+// | You should have received a copy of the GNU Lesser General Public     |
+// | License along with this library; if not, write to the Free Software  |
+// | Foundation, Inc., 51 Franklin St, Boston, MA 02110, United States    |
+// +----------------------------------------------------------------------+
+//
+// }}}
+
+/**
+ * Encode/decode Internationalized Domain Names.
+ *
+ * The class allows to convert internationalized domain names
+ * (see RFC 3490 for details) as they can be used with various registries worldwide
+ * to be translated between their original (localized) form and their encoded form
+ * as it will be used in the DNS (Domain Name System).
+ *
+ * The class provides two public methods, encode() and decode(), which do exactly
+ * what you would expect them to do. You are allowed to use complete domain names,
+ * simple strings and complete email addresses as well. That means, that you might
+ * use any of the following notations:
+ *
+ * - www.nörgler.com
+ * - xn--nrgler-wxa
+ * - xn--brse-5qa.xn--knrz-1ra.info
+ *
+ * Unicode input might be given as either UTF-8 string, UCS-4 string or UCS-4 array.
+ * Unicode output is available in the same formats.
+ * You can select your preferred format via {@link set_paramter()}.
+ *
+ * ACE input and output is always expected to be ASCII.
+ *
+ * @author  Matthias Sommerfeld <mso@phlylabs.de>
+ * @copyright 2004-2016 phlyLabs Berlin, http://phlylabs.de
+ * @version 0.9.1 2016-01-06
+ */
+class idna_convert {
+
+    private $version = '0.9.1';
+    protected $sub_version = 'main';
+
+    // NP See below
+    // Internal settings, do not mess with them
+    protected $_punycode_prefix = 'xn--';
+    protected $_invalid_ucs = 0x80000000;
+    protected $_max_ucs = 0x10FFFF;
+    protected $_base = 36;
+    protected $_tmin = 1;
+    protected $_tmax = 26;
+    protected $_skew = 38;
+    protected $_damp = 700;
+    protected $_initial_bias = 72;
+    protected $_initial_n = 0x80;
+    protected $_sbase = 0xAC00;
+    protected $_lbase = 0x1100;
+    protected $_vbase = 0x1161;
+    protected $_tbase = 0x11A7;
+    protected $_lcount = 19;
+    protected $_vcount = 21;
+    protected $_tcount = 28;
+    protected $_ncount = 588;   // _vcount * _tcount
+    protected $_scount = 11172; // _lcount * _tcount * _vcount
+    protected $_error = false;
+    protected static $_mb_string_overload = null;
+    // See {@link set_paramter()} for details of how to change the following
+    // settings from within your script / application
+    protected $_api_encoding = 'utf8';   // Default input charset is UTF-8
+    protected $_allow_overlong = false;  // Overlong UTF-8 encodings are forbidden
+    protected $_strict_mode = false;     // Behave strict or not
+    protected $_idn_version = 2003;      // Can be either 2003 (old, default) or 2008
+
+    /**
+     * the constructor
+     *
+     * @param array $options
+     * @return boolean
+     * @since 0.5.2
+     */
+    public function __construct($options = false)
+    {
+        $this->slast = $this->_sbase + $this->_lcount * $this->_vcount * $this->_tcount;
+        // If parameters are given, pass these to the respective method
+        if (is_array($options)) {
+            $this->set_parameter($options);
+        }
+
+        // populate mbstring overloading cache if not set
+        if (self::$_mb_string_overload === null) {
+            self::$_mb_string_overload = (extension_loaded('mbstring') && (ini_get('mbstring.func_overload') & 0x02) === 0x02);
+        }
+    }
+
+    public function get_version()
+    {
+        return $this->version.'-'.$this->sub_version;
+    }
+
+    /**
+     * Sets a new option value. Available options and values:
+     * [encoding - Use either UTF-8, UCS4 as array or UCS4 as string as input ('utf8' for UTF-8,
+     *         'ucs4_string' and 'ucs4_array' respectively for UCS4); The output is always UTF-8]
+     * [overlong - Unicode does not allow unnecessarily long encodings of chars,
+     *             to allow this, set this parameter to true, else to false;
+     *             default is false.]
+     * [strict - true: strict mode, good for registration purposes - Causes errors
+     *           on failures; false: loose mode, ideal for "wildlife" applications
+     *           by silently ignoring errors and returning the original input instead
+     *
+     * @param    mixed     Parameter to set (string: single parameter; array of Parameter => Value pairs)
+     * @param    string    Value to use (if parameter 1 is a string)
+     * @return   boolean   true on success, false otherwise
+     */
+    public function set_parameter($option, $value = false)
+    {
+        if (!is_array($option)) {
+            $option = array($option => $value);
+        }
+        foreach ($option as $k => $v) {
+            switch ($k) {
+                case 'encoding':
+                    switch ($v) {
+                        case 'utf8':
+                        case 'ucs4_string':
+                        case 'ucs4_array':
+                            $this->_api_encoding = $v;
+                            break;
+                        default:
+                            $this->_error('Set Parameter: Unknown parameter ' . $v . ' for option ' . $k);
+                            return false;
+                    }
+                    break;
+                case 'overlong':
+                    $this->_allow_overlong = ($v) ? true : false;
+                    break;
+                case 'strict':
+                    $this->_strict_mode = ($v) ? true : false;
+                    break;
+                case 'idn_version':
+                    if (in_array($v, array('2003', '2008'))) {
+                        $this->_idn_version = $v;
+                    } else {
+                        $this->_error('Set Parameter: Unknown parameter ' . $v . ' for option ' . $k);
+                    }
+                    break;
+                case 'encode_german_sz': // Deprecated
+                    if (!$v) {
+                        self::$NP['replacemaps'][0xDF] = array(0x73, 0x73);
+                    } else {
+                        unset(self::$NP['replacemaps'][0xDF]);
+                    }
+                    break;
+                default:
+                    $this->_error('Set Parameter: Unknown option ' . $k);
+                    return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Decode a given ACE domain name
+     * @param    string   Domain name (ACE string)
+     * [@param    string   Desired output encoding, see {@link set_parameter}]
+     * @return   string   Decoded Domain name (UTF-8 or UCS-4)
+     */
+    public function decode($input, $one_time_encoding = false)
+    {
+        // Optionally set
+        if ($one_time_encoding) {
+            switch ($one_time_encoding) {
+                case 'utf8':
+                case 'ucs4_string':
+                case 'ucs4_array':
+                    break;
+                default:
+                    $this->_error('Unknown encoding ' . $one_time_encoding);
+                    return false;
+            }
+        }
+        // Make sure to drop any newline characters around
+        $input = trim($input);
+
+        // Negotiate input and try to determine, whether it is a plain string,
+        // an email address or something like a complete URL
+        if (strpos($input, '@')) { // Maybe it is an email address
+            // No no in strict mode
+            if ($this->_strict_mode) {
+                $this->_error('Only simple domain name parts can be handled in strict mode');
+                return false;
+            }
+            list ($email_pref, $input) = explode('@', $input, 2);
+            $arr = explode('.', $input);
+            foreach ($arr as $k => $v) {
+                if (preg_match('!^' . preg_quote($this->_punycode_prefix, '!') . '!', $v)) {
+                    $conv = $this->_decode($v);
+                    if ($conv) {
+                        $arr[$k] = $conv;
+                    }
+                }
+            }
+            $input = join('.', $arr);
+            $arr = explode('.', $email_pref);
+            foreach ($arr as $k => $v) {
+                if (preg_match('!^' . preg_quote($this->_punycode_prefix, '!') . '!', $v)) {
+                    $conv = $this->_decode($v);
+                    if ($conv) {
+                        $arr[$k] = $conv;
+                    }
+                }
+            }
+            $email_pref = join('.', $arr);
+            $return = $email_pref . '@' . $input;
+        } elseif (preg_match('![:\./]!', $input)) { // Or a complete domain name (with or without paths / parameters)
+            // No no in strict mode
+            if ($this->_strict_mode) {
+                $this->_error('Only simple domain name parts can be handled in strict mode');
+                return false;
+            }
+            $parsed = parse_url($input);
+            if (isset($parsed['host'])) {
+                $arr = explode('.', $parsed['host']);
+                foreach ($arr as $k => $v) {
+                    $conv = $this->_decode($v);
+                    if ($conv) {
+                        $arr[$k] = $conv;
+                    }
+                }
+                $parsed['host'] = join('.', $arr);
+                $return = (empty($parsed['scheme']) ? '' : $parsed['scheme'] . (strtolower($parsed['scheme']) == 'mailto' ? ':' : '://')).
+                        (empty($parsed['user']) ? '' : $parsed['user'] . (empty($parsed['pass']) ? '' : ':' . $parsed['pass']) . '@').
+                        $parsed['host'].
+                        (empty($parsed['port']) ? '' : ':' . $parsed['port']).
+                        (empty($parsed['path']) ? '' : $parsed['path']).
+                        (empty($parsed['query']) ? '' : '?' . $parsed['query']).
+                        (empty($parsed['fragment']) ? '' : '#' . $parsed['fragment']);
+            } else { // parse_url seems to have failed, try without it
+                $arr = explode('.', $input);
+                foreach ($arr as $k => $v) {
+                    $conv = $this->_decode($v);
+                    $arr[$k] = ($conv) ? $conv : $v;
+                }
+                $return = join('.', $arr);
+            }
+        } else { // Otherwise we consider it being a pure domain name string
+            $return = $this->_decode($input);
+            if (!$return) {
+                $return = $input;
+            }
+        }
+        // The output is UTF-8 by default, other output formats need conversion here
+        // If one time encoding is given, use this, else the objects property
+        switch (($one_time_encoding) ? $one_time_encoding : $this->_api_encoding) {
+            case 'utf8':        return $return; // break;
+            case 'ucs4_string': return $this->_ucs4_to_ucs4_string($this->_utf8_to_ucs4($return));  // break;
+            case 'ucs4_array':  return $this->_utf8_to_ucs4($return); // break;
+            default:            $this->_error('Unsupported output format'); return false;
+        }
+    }
+
+    /**
+     * Encode a given UTF-8 domain name
+     * @param    string   Domain name (UTF-8 or UCS-4)
+     * [@param    string   Desired input encoding, see {@link set_parameter}]
+     * @return   string   Encoded Domain name (ACE string)
+     */
+    public function encode($decoded, $one_time_encoding = false)
+    {
+        // Forcing conversion of input to UCS4 array
+        // If one time encoding is given, use this, else the objects property
+        switch ($one_time_encoding ? $one_time_encoding : $this->_api_encoding) {
+            case 'utf8':
+                $decoded = $this->_utf8_to_ucs4($decoded);
+                break;
+            case 'ucs4_string':
+                $decoded = $this->_ucs4_string_to_ucs4($decoded);
+            case 'ucs4_array':
+                break;
+            default:
+                $this->_error('Unsupported input format: ' . ($one_time_encoding ? $one_time_encoding : $this->_api_encoding));
+                return false;
+        }
+
+        // No input, no output, what else did you expect?
+        if (empty($decoded)) {
+            return '';
+        }
+
+        // Anchors for iteration
+        $last_begin = 0;
+        // Output string
+        $output = '';
+        foreach ($decoded as $k => $v) {
+            // Make sure to use just the plain dot
+            switch ($v) {
+                case 0x3002:
+                case 0xFF0E:
+                case 0xFF61:
+                    $decoded[$k] = 0x2E;
+                    // Right, no break here, the above are converted to dots anyway
+                // Stumbling across an anchoring character
+                case 0x2E:
+                case 0x2F:
+                case 0x3A:
+                case 0x3F:
+                case 0x40:
+                    // Neither email addresses nor URLs allowed in strict mode
+                    if ($this->_strict_mode) {
+                        $this->_error('Neither email addresses nor URLs are allowed in strict mode.');
+                        return false;
+                    } else {
+                        // Skip first char
+                        if ($k) {
+                            $encoded = '';
+                            $encoded = $this->_encode(array_slice($decoded, $last_begin, (($k) - $last_begin)));
+                            if ($encoded) {
+                                $output .= $encoded;
+                            } else {
+                                $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($k) - $last_begin)));
+                            }
+                            $output .= chr($decoded[$k]);
+                        }
+                        $last_begin = $k + 1;
+                    }
+            }
+        }
+        // Catch the rest of the string
+        if ($last_begin) {
+            $inp_len = sizeof($decoded);
+            $encoded = '';
+            $encoded = $this->_encode(array_slice($decoded, $last_begin, (($inp_len) - $last_begin)));
+            if ($encoded) {
+                $output .= $encoded;
+            } else {
+                $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($inp_len) - $last_begin)));
+            }
+            return $output;
+        } else {
+            if (false !== ($output = $this->_encode($decoded))) {
+                return $output;
+            } else {
+                return $this->_ucs4_to_utf8($decoded);
+            }
+        }
+    }
+
+    /**
+     * Removes a weakness of encode(), which cannot properly handle URIs but instead encodes their
+     * path or query components, too.
+     * @param string  $uri  Expects the URI as a UTF-8 (or ASCII) string
+     * @return  string  The URI encoded to Punycode, everything but the host component is left alone
+     * @since 0.6.4
+     */
+    public function encode_uri($uri)
+    {
+        $parsed = parse_url($uri);
+        if (!isset($parsed['host'])) {
+            $this->_error('The given string does not look like a URI');
+            return false;
+        }
+        $arr = explode('.', $parsed['host']);
+        foreach ($arr as $k => $v) {
+            $conv = $this->encode($v, 'utf8');
+            if ($conv) {
+                $arr[$k] = $conv;
+            }
+        }
+        $parsed['host'] = join('.', $arr);
+        $return = (empty($parsed['scheme']) ? '' : $parsed['scheme'] . (strtolower($parsed['scheme']) == 'mailto' ? ':' : '://')).
+                (empty($parsed['user']) ? '' : $parsed['user'] . (empty($parsed['pass']) ? '' : ':' . $parsed['pass']) . '@').
+                $parsed['host'].
+                (empty($parsed['port']) ? '' : ':' . $parsed['port']).
+                (empty($parsed['path']) ? '' : $parsed['path']).
+                (empty($parsed['query']) ? '' : '?' . $parsed['query']).
+                (empty($parsed['fragment']) ? '' : '#' . $parsed['fragment']);
+        return $return;
+    }
+
+    /**
+     * Use this method to get the last error ocurred
+     * @param    void
+     * @return   string   The last error, that occured
+     */
+    public function get_last_error()
+    {
+        return $this->_error;
+    }
+
+    /**
+     * The actual decoding algorithm
+     * @param string
+     * @return mixed
+     */
+    protected function _decode($encoded)
+    {
+        $decoded = array();
+        // find the Punycode prefix
+        if (!preg_match('!^' . preg_quote($this->_punycode_prefix, '!') . '!', $encoded)) {
+            $this->_error('This is not a punycode string');
+            return false;
+        }
+        $encode_test = preg_replace('!^' . preg_quote($this->_punycode_prefix, '!') . '!', '', $encoded);
+        // If nothing left after removing the prefix, it is hopeless
+        if (!$encode_test) {
+            $this->_error('The given encoded string was empty');
+            return false;
+        }
+        // Find last occurence of the delimiter
+        $delim_pos = strrpos($encoded, '-');
+        if ($delim_pos > self::byteLength($this->_punycode_prefix)) {
+            for ($k = self::byteLength($this->_punycode_prefix); $k < $delim_pos; ++$k) {
+                $decoded[] = ord($encoded{$k});
+            }
+        }
+        $deco_len = count($decoded);
+        $enco_len = self::byteLength($encoded);
+
+        // Wandering through the strings; init
+        $is_first = true;
+        $bias = $this->_initial_bias;
+        $idx = 0;
+        $char = $this->_initial_n;
+
+        for ($enco_idx = ($delim_pos) ? ($delim_pos + 1) : 0; $enco_idx < $enco_len; ++$deco_len) {
+            for ($old_idx = $idx, $w = 1, $k = $this->_base; 1; $k += $this->_base) {
+                $digit = $this->_decode_digit($encoded{$enco_idx++});
+                $idx += $digit * $w;
+                $t = ($k <= $bias) ? $this->_tmin :
+                        (($k >= $bias + $this->_tmax) ? $this->_tmax : ($k - $bias));
+                if ($digit < $t) {
+                    break;
+                }
+                $w = (int) ($w * ($this->_base - $t));
+            }
+            $bias = $this->_adapt($idx - $old_idx, $deco_len + 1, $is_first);
+            $is_first = false;
+            $char += (int) ($idx / ($deco_len + 1));
+            $idx %= ($deco_len + 1);
+            if ($deco_len > 0) {
+                // Make room for the decoded char
+                for ($i = $deco_len; $i > $idx; $i--) {
+                    $decoded[$i] = $decoded[($i - 1)];
+                }
+            }
+            $decoded[$idx++] = $char;
+        }
+        return $this->_ucs4_to_utf8($decoded);
+    }
+
+    /**
+     * The actual encoding algorithm
+     * @param  string
+     * @return mixed
+     */
+    protected function _encode($decoded)
+    {
+        // We cannot encode a domain name containing the Punycode prefix
+        $extract = self::byteLength($this->_punycode_prefix);
+        $check_pref = $this->_utf8_to_ucs4($this->_punycode_prefix);
+        $check_deco = array_slice($decoded, 0, $extract);
+
+        if ($check_pref == $check_deco) {
+            $this->_error('This is already a punycode string');
+            return false;
+        }
+        // We will not try to encode strings consisting of basic code points only
+        $encodable = false;
+        foreach ($decoded as $k => $v) {
+            if ($v > 0x7a) {
+                $encodable = true;
+                break;
+            }
+        }
+        if (!$encodable) {
+            $this->_error('The given string does not contain encodable chars');
+            return false;
+        }
+        // Do NAMEPREP
+        $decoded = $this->_nameprep($decoded);
+        if (!$decoded || !is_array($decoded)) {
+            return false; // NAMEPREP failed
+        }
+        $deco_len = count($decoded);
+        if (!$deco_len) {
+            return false; // Empty array
+        }
+        $codecount = 0; // How many chars have been consumed
+        $encoded = '';
+        // Copy all basic code points to output
+        for ($i = 0; $i < $deco_len; ++$i) {
+            $test = $decoded[$i];
+            // Will match [-0-9a-zA-Z]
+            if ((0x2F < $test && $test < 0x40) || (0x40 < $test && $test < 0x5B) || (0x60 < $test && $test <= 0x7B) || (0x2D == $test)) {
+                $encoded .= chr($decoded[$i]);
+                $codecount++;
+            }
+        }
+        if ($codecount == $deco_len) {
+            return $encoded; // All codepoints were basic ones
+        }
+        // Start with the prefix; copy it to output
+        $encoded = $this->_punycode_prefix . $encoded;
+        // If we have basic code points in output, add an hyphen to the end
+        if ($codecount) {
+            $encoded .= '-';
+        }
+        // Now find and encode all non-basic code points
+        $is_first = true;
+        $cur_code = $this->_initial_n;
+        $bias = $this->_initial_bias;
+        $delta = 0;
+        while ($codecount < $deco_len) {
+            // Find the smallest code point >= the current code point and
+            // remember the last ouccrence of it in the input
+            for ($i = 0, $next_code = $this->_max_ucs; $i < $deco_len; $i++) {
+                if ($decoded[$i] >= $cur_code && $decoded[$i] <= $next_code) {
+                    $next_code = $decoded[$i];
+                }
+            }
+            $delta += ($next_code - $cur_code) * ($codecount + 1);
+            $cur_code = $next_code;
+
+            // Scan input again and encode all characters whose code point is $cur_code
+            for ($i = 0; $i < $deco_len; $i++) {
+                if ($decoded[$i] < $cur_code) {
+                    $delta++;
+                } elseif ($decoded[$i] == $cur_code) {
+                    for ($q = $delta, $k = $this->_base; 1; $k += $this->_base) {
+                        $t = ($k <= $bias) ? $this->_tmin :
+                                (($k >= $bias + $this->_tmax) ? $this->_tmax : $k - $bias);
+                        if ($q < $t) {
+                            break;
+                        }
+                        $encoded .= $this->_encode_digit(intval($t + (($q - $t) % ($this->_base - $t)))); //v0.4.5 Changed from ceil() to intval()
+                        $q = (int) (($q - $t) / ($this->_base - $t));
+                    }
+                    $encoded .= $this->_encode_digit($q);
+                    $bias = $this->_adapt($delta, $codecount + 1, $is_first);
+                    $codecount++;
+                    $delta = 0;
+                    $is_first = false;
+                }
+            }
+            $delta++;
+            $cur_code++;
+        }
+        return $encoded;
+    }
+
+    /**
+     * Adapt the bias according to the current code point and position
+     * @param int $delta
+     * @param int $npoints
+     * @param int $is_first
+     * @return int
+     */
+    protected function _adapt($delta, $npoints, $is_first)
+    {
+        $delta = intval($is_first ? ($delta / $this->_damp) : ($delta / 2));
+        $delta += intval($delta / $npoints);
+        for ($k = 0; $delta > (($this->_base - $this->_tmin) * $this->_tmax) / 2; $k += $this->_base) {
+            $delta = intval($delta / ($this->_base - $this->_tmin));
+        }
+        return intval($k + ($this->_base - $this->_tmin + 1) * $delta / ($delta + $this->_skew));
+    }
+
+    /**
+     * Encoding a certain digit
+     * @param    int $d
+     * @return string
+     */
+    protected function _encode_digit($d)
+    {
+        return chr($d + 22 + 75 * ($d < 26));
+    }
+
+    /**
+     * Decode a certain digit
+     * @param    int $cp
+     * @return int
+     */
+    protected function _decode_digit($cp)
+    {
+        $cp = ord($cp);
+        return ($cp - 48 < 10) ? $cp - 22 : (($cp - 65 < 26) ? $cp - 65 : (($cp - 97 < 26) ? $cp - 97 : $this->_base));
+    }
+
+    /**
+     * Internal error handling method
+     * @param  string $error
+     */
+    protected function _error($error = '')
+    {
+        $this->_error = $error;
+    }
+
+    /**
+     * Do Nameprep according to RFC3491 and RFC3454
+     * @param    array    Unicode Characters
+     * @return   string   Unicode Characters, Nameprep'd
+     */
+    protected function _nameprep($input)
+    {
+        $output = array();
+        //
+        // Mapping
+        // Walking through the input array, performing the required steps on each of
+        // the input chars and putting the result into the output array
+        // While mapping required chars we apply the cannonical ordering
+        foreach ($input as $v) {
+            // Map to nothing == skip that code point
+            if (in_array($v, self::$NP['map_nothing'])) {
+                continue;
+            }
+            // Try to find prohibited input
+            if (in_array($v, self::$NP['prohibit']) || in_array($v, self::$NP['general_prohibited'])) {
+                $this->_error('NAMEPREP: Prohibited input U+' . sprintf('%08X', $v));
+                return false;
+            }
+            foreach (self::$NP['prohibit_ranges'] as $range) {
+                if ($range[0] <= $v && $v <= $range[1]) {
+                    $this->_error('NAMEPREP: Prohibited input U+' . sprintf('%08X', $v));
+                    return false;
+                }
+            }
+
+            if (0xAC00 <= $v && $v <= 0xD7AF) {
+                // Hangul syllable decomposition
+                foreach ($this->_hangul_decompose($v) as $out) {
+                    $output[] = (int) $out;
+                }
+            } elseif (($this->_idn_version == '2003') && isset(self::$NP['replacemaps_2003'][$v])) {
+                foreach ($this->_apply_cannonical_ordering(self::$NP['replacemaps_2003'][$v]) as $out) {
+                    $output[] = (int) $out;
+                }
+            } elseif (($this->_idn_version == '2008') && isset(self::$NP['replacemaps'][$v])) {
+                foreach ($this->_apply_cannonical_ordering(self::$NP['replacemaps'][$v]) as $out) {
+                    $output[] = (int) $out;
+                }
+            } else {
+                $output[] = (int) $v;
+            }
+        }
+        // Before applying any Combining, try to rearrange any Hangul syllables
+        $output = $this->_hangul_compose($output);
+        //
+        // Combine code points
+        //
+        $last_class = 0;
+        $last_starter = 0;
+        $out_len = count($output);
+        for ($i = 0; $i < $out_len; ++$i) {
+            $class = $this->_get_combining_class($output[$i]);
+            if ((!$last_class || $last_class > $class) && $class) {
+                // Try to match
+                $seq_len = $i - $last_starter;
+                $out = $this->_combine(array_slice($output, $last_starter, $seq_len));
+                // On match: Replace the last starter with the composed character and remove
+                // the now redundant non-starter(s)
+                if ($out) {
+                    $output[$last_starter] = $out;
+                    if (count($out) != $seq_len) {
+                        for ($j = $i + 1; $j < $out_len; ++$j) {
+                            $output[$j - 1] = $output[$j];
+                        }
+                        unset($output[$out_len]);
+                    }
+                    // Rewind the for loop by one, since there can be more possible compositions
+                    $i--;
+                    $out_len--;
+                    $last_class = ($i == $last_starter) ? 0 : $this->_get_combining_class($output[$i - 1]);
+                    continue;
+                }
+            }
+            // The current class is 0
+            if (!$class) {
+                $last_starter = $i;
+            }
+            $last_class = $class;
+        }
+        return $output;
+    }
+
+    /**
+     * Decomposes a Hangul syllable
+     * (see http://www.unicode.org/unicode/reports/tr15/#Hangul
+     * @param    integer  32bit UCS4 code point
+     * @return   array    Either Hangul Syllable decomposed or original 32bit value as one value array
+     */
+    protected function _hangul_decompose($char)
+    {
+        $sindex = (int) $char - $this->_sbase;
+        if ($sindex < 0 || $sindex >= $this->_scount) {
+            return array($char);
+        }
+        $result = array();
+        $result[] = (int) $this->_lbase + $sindex / $this->_ncount;
+        $result[] = (int) $this->_vbase + ($sindex % $this->_ncount) / $this->_tcount;
+        $T = intval($this->_tbase + $sindex % $this->_tcount);
+        if ($T != $this->_tbase) {
+            $result[] = $T;
+        }
+        return $result;
+    }
+
+    /**
+     * Ccomposes a Hangul syllable
+     * (see http://www.unicode.org/unicode/reports/tr15/#Hangul
+     * @param    array    Decomposed UCS4 sequence
+     * @return   array    UCS4 sequence with syllables composed
+     */
+    protected function _hangul_compose($input)
+    {
+        $inp_len = count($input);
+        if (!$inp_len) {
+            return array();
+        }
+        $result = array();
+        $last = (int) $input[0];
+        $result[] = $last; // copy first char from input to output
+
+        for ($i = 1; $i < $inp_len; ++$i) {
+            $char = (int) $input[$i];
+            $sindex = $last - $this->_sbase;
+            $lindex = $last - $this->_lbase;
+            $vindex = $char - $this->_vbase;
+            $tindex = $char - $this->_tbase;
+            // Find out, whether two current characters are LV and T
+            if (0 <= $sindex && $sindex < $this->_scount && ($sindex % $this->_tcount == 0) && 0 <= $tindex && $tindex <= $this->_tcount) {
+                // create syllable of form LVT
+                $last += $tindex;
+                $result[(count($result) - 1)] = $last; // reset last
+                continue; // discard char
+            }
+            // Find out, whether two current characters form L and V
+            if (0 <= $lindex && $lindex < $this->_lcount && 0 <= $vindex && $vindex < $this->_vcount) {
+                // create syllable of form LV
+                $last = (int) $this->_sbase + ($lindex * $this->_vcount + $vindex) * $this->_tcount;
+                $result[(count($result) - 1)] = $last; // reset last
+                continue; // discard char
+            }
+            // if neither case was true, just add the character
+            $last = $char;
+            $result[] = $char;
+        }
+        return $result;
+    }
+
+    /**
+     * Returns the combining class of a certain wide char
+     * @param    integer    Wide char to check (32bit integer)
+     * @return   integer    Combining class if found, else 0
+     */
+    protected function _get_combining_class($char)
+    {
+        return isset(self::$NP['norm_combcls'][$char]) ? self::$NP['norm_combcls'][$char] : 0;
+    }
+
+    /**
+     * Applies the cannonical ordering of a decomposed UCS4 sequence
+     * @param    array      Decomposed UCS4 sequence
+     * @return   array      Ordered USC4 sequence
+     */
+    protected function _apply_cannonical_ordering($input)
+    {
+        $swap = true;
+        $size = count($input);
+        while ($swap) {
+            $swap = false;
+            $last = $this->_get_combining_class(intval($input[0]));
+            for ($i = 0; $i < $size - 1; ++$i) {
+                $next = $this->_get_combining_class(intval($input[$i + 1]));
+                if ($next != 0 && $last > $next) {
+                    // Move item leftward until it fits
+                    for ($j = $i + 1; $j > 0; --$j) {
+                        if ($this->_get_combining_class(intval($input[$j - 1])) <= $next) {
+                            break;
+                        }
+                        $t = intval($input[$j]);
+                        $input[$j] = intval($input[$j - 1]);
+                        $input[$j - 1] = $t;
+                        $swap = true;
+                    }
+                    // Reentering the loop looking at the old character again
+                    $next = $last;
+                }
+                $last = $next;
+            }
+        }
+        return $input;
+    }
+
+    /**
+     * Do composition of a sequence of starter and non-starter
+     * @param    array      UCS4 Decomposed sequence
+     * @return   array      Ordered USC4 sequence
+     */
+    protected function _combine($input)
+    {
+        $inp_len = count($input);
+        if (0 == $inp_len) {
+            return false;
+        }
+        foreach (self::$NP['replacemaps'] as $np_src => $np_target) {
+            if ($np_target[0] != $input[0]) {
+                continue;
+            }
+            if (count($np_target) != $inp_len) {
+                continue;
+            }
+            $hit = false;
+            foreach ($input as $k2 => $v2) {
+                if ($v2 == $np_target[$k2]) {
+                    $hit = true;
+                } else {
+                    $hit = false;
+                    break;
+                }
+            }
+            if ($hit) {
+                return $np_src;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * This converts an UTF-8 encoded string to its UCS-4 representation
+     * By talking about UCS-4 "strings" we mean arrays of 32bit integers representing
+     * each of the "chars". This is due to PHP not being able to handle strings with
+     * bit depth different from 8. This apllies to the reverse method _ucs4_to_utf8(), too.
+     * The following UTF-8 encodings are supported:
+     * bytes bits  representation
+     * 1        7  0xxxxxxx
+     * 2       11  110xxxxx 10xxxxxx
+     * 3       16  1110xxxx 10xxxxxx 10xxxxxx
+     * 4       21  11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+     * 5       26  111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+     * 6       31  1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+     * Each x represents a bit that can be used to store character data.
+     * The five and six byte sequences are part of Annex D of ISO/IEC 10646-1:2000
+     * @param string $input
+     * @return string
+     */
+    protected function _utf8_to_ucs4($input)
+    {
+        $output = array();
+        $out_len = 0;
+        $inp_len = self::byteLength($input);
+        $mode = 'next';
+        $test = 'none';
+        for ($k = 0; $k < $inp_len; ++$k) {
+            $v = ord($input{$k}); // Extract byte from input string
+            if ($v < 128) { // We found an ASCII char - put into stirng as is
+                $output[$out_len] = $v;
+                ++$out_len;
+                if ('add' == $mode) {
+                    $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte ' . $k);
+                    return false;
+                }
+                continue;
+            }
+            if ('next' == $mode) { // Try to find the next start byte; determine the width of the Unicode char
+                $start_byte = $v;
+                $mode = 'add';
+                $test = 'range';
+                if ($v >> 5 == 6) { // &110xxxxx 10xxxxx
+                    $next_byte = 0; // Tells, how many times subsequent bitmasks must rotate 6bits to the left
+                    $v = ($v - 192) << 6;
+                } elseif ($v >> 4 == 14) { // &1110xxxx 10xxxxxx 10xxxxxx
+                    $next_byte = 1;
+                    $v = ($v - 224) << 12;
+                } elseif ($v >> 3 == 30) { // &11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
+                    $next_byte = 2;
+                    $v = ($v - 240) << 18;
+                } elseif ($v >> 2 == 62) { // &111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+                    $next_byte = 3;
+                    $v = ($v - 248) << 24;
+                } elseif ($v >> 1 == 126) { // &1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
+                    $next_byte = 4;
+                    $v = ($v - 252) << 30;
+                } else {
+                    $this->_error('This might be UTF-8, but I don\'t understand it at byte ' . $k);
+                    return false;
+                }
+                if ('add' == $mode) {
+                    $output[$out_len] = (int) $v;
+                    ++$out_len;
+                    continue;
+                }
+            }
+            if ('add' == $mode) {
+                if (!$this->_allow_overlong && $test == 'range') {
+                    $test = 'none';
+                    if (($v < 0xA0 && $start_byte == 0xE0) || ($v < 0x90 && $start_byte == 0xF0) || ($v > 0x8F && $start_byte == 0xF4)) {
+                        $this->_error('Bogus UTF-8 character detected (out of legal range) at byte ' . $k);
+                        return false;
+                    }
+                }
+                if ($v >> 6 == 2) { // Bit mask must be 10xxxxxx
+                    $v = ($v - 128) << ($next_byte * 6);
+                    $output[($out_len - 1)] += $v;
+                    --$next_byte;
+                } else {
+                    $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte ' . $k);
+                    return false;
+                }
+                if ($next_byte < 0) {
+                    $mode = 'next';
+                }
+            }
+        } // for
+        return $output;
+    }
+
+    /**
+     * Convert UCS-4 string into UTF-8 string
+     * See _utf8_to_ucs4() for details
+     * @param string  $input
+     * @return string
+     */
+    protected function _ucs4_to_utf8($input)
+    {
+        $output = '';
+        foreach ($input as $k => $v) {
+            if ($v < 128) { // 7bit are transferred literally
+                $output .= chr($v);
+            } elseif ($v < (1 << 11)) { // 2 bytes
+                $output .= chr(192 + ($v >> 6)) . chr(128 + ($v & 63));
+            } elseif ($v < (1 << 16)) { // 3 bytes
+                $output .= chr(224 + ($v >> 12)) . chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63));
+            } elseif ($v < (1 << 21)) { // 4 bytes
+                $output .= chr(240 + ($v >> 18)) . chr(128 + (($v >> 12) & 63)) . chr(128 + (($v >> 6) & 63)) . chr(128 + ($v & 63));
+            } else {
+                $this->_error('Conversion from UCS-4 to UTF-8 failed: malformed input at byte ' . $k);
+                return false;
+            }
+        }
+        return $output;
+    }
+
+    /**
+     * Convert UCS-4 array into UCS-4 string
+     *
+     * @param array $input
+     * @return string
+     */
+    protected function _ucs4_to_ucs4_string($input)
+    {
+        $output = '';
+        // Take array values and split output to 4 bytes per value
+        // The bit mask is 255, which reads &11111111
+        foreach ($input as $v) {
+            $output .= chr(($v >> 24) & 255) . chr(($v >> 16) & 255) . chr(($v >> 8) & 255) . chr($v & 255);
+        }
+        return $output;
+    }
+
+    /**
+     * Convert UCS-4 strin into UCS-4 garray
+     *
+     * @param  string $input
+     * @return array
+     */
+    protected function _ucs4_string_to_ucs4($input)
+    {
+        $output = array();
+        $inp_len = self::byteLength($input);
+        // Input length must be dividable by 4
+        if ($inp_len % 4) {
+            $this->_error('Input UCS4 string is broken');
+            return false;
+        }
+        // Empty input - return empty output
+        if (!$inp_len) {
+            return $output;
+        }
+        for ($i = 0, $out_len = -1; $i < $inp_len; ++$i) {
+            // Increment output position every 4 input bytes
+            if (!($i % 4)) {
+                $out_len++;
+                $output[$out_len] = 0;
+            }
+            $output[$out_len] += ord($input{$i}) << (8 * (3 - ($i % 4) ) );
+        }
+        return $output;
+    }
+
+    /**
+     * Gets the length of a string in bytes even if mbstring function
+     * overloading is turned on
+     *
+     * @param string $string the string for which to get the length.
+     * @return integer the length of the string in bytes.
+     */
+    protected static function byteLength($string)
+    {
+        if (self::$_mb_string_overload) {
+            return mb_strlen($string, '8bit');
+        }
+        return strlen((binary) $string);
+    }
+
+    /**
+     * Attempts to return a concrete IDNA instance.
+     *
+     * @param array $params Set of paramaters
+     * @return idna_convert
+     * @access public
+     */
+    public function getInstance($params = array())
+    {
+        return new idna_convert($params);
+    }
+
+    /**
+     * Attempts to return a concrete IDNA instance for either php4 or php5,
+     * only creating a new instance if no IDNA instance with the same
+     * parameters currently exists.
+     *
+     * @param array $params Set of paramaters
+     *
+     * @return object idna_convert
+     * @access public
+     */
+    public function singleton($params = array())
+    {
+        static $instances = array();
+
+        $signature = serialize($params);
+        if (!isset($instances[$signature])) {
+            $instances[$signature] = idna_convert::getInstance($params);
+        }
+        return $instances[$signature];
+    }
+
+    /**
+     * Holds all relevant mapping tables
+     * See RFC3454 for details
+     *
+     * @private array
+     * @since 0.5.2
+     */
+    protected static $NP = array(
+            'map_nothing' => array(0xAD, 0x34F, 0x1806, 0x180B, 0x180C, 0x180D, 0x200B, 0x200C,
+                    0x200D, 0x2060, 0xFE00, 0xFE01, 0xFE02, 0xFE03, 0xFE04, 0xFE05, 0xFE06, 0xFE07,
+                    0xFE08, 0xFE09, 0xFE0A, 0xFE0B, 0xFE0C, 0xFE0D, 0xFE0E, 0xFE0F, 0xFEFF
+            ),
+            'general_prohibited' => array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+                    20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
+                    43, 44, 47, 59, 60, 61, 62, 63, 64, 91, 92, 93, 94, 95, 96, 123, 124, 125, 126, 127, 0x3002
+            ),
+            'prohibit' => array(0xA0, 0x340, 0x341, 0x6DD, 0x70F, 0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003,
+                    0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x200B, 0x200C, 0x200D, 0x200E, 0x200F,
+                    0x2028, 0x2029, 0x202A, 0x202B, 0x202C, 0x202D, 0x202E, 0x202F, 0x205F, 0x206A, 0x206B, 0x206C,
+                    0x206D, 0x206E, 0x206F, 0x3000, 0x33C2, 0xFEFF, 0xFFF9, 0xFFFA, 0xFFFB, 0xFFFC, 0xFFFD, 0xFFFE, 0xFFFF,
+                    0x1FFFE, 0x1FFFF, 0x2FFFE, 0x2FFFF, 0x3FFFE, 0x3FFFF, 0x4FFFE, 0x4FFFF, 0x5FFFE, 0x5FFFF, 0x6FFFE,
+                    0x6FFFF, 0x7FFFE, 0x7FFFF, 0x8FFFE, 0x8FFFF, 0x9FFFE, 0x9FFFF, 0xAFFFE, 0xAFFFF, 0xBFFFE, 0xBFFFF,
+                    0xCFFFE, 0xCFFFF, 0xDFFFE, 0xDFFFF, 0xE0001, 0xEFFFE, 0xEFFFF, 0xFFFFE, 0xFFFFF, 0x10FFFE, 0x10FFFF
+            ),
+            'prohibit_ranges' => array(array(0x80, 0x9F), array(0x2060, 0x206F), array(0x1D173, 0x1D17A),
+                    array(0xE000, 0xF8FF), array(0xF0000, 0xFFFFD), array(0x100000, 0x10FFFD),
+                    array(0xFDD0, 0xFDEF), array(0xD800, 0xDFFF), array(0x2FF0, 0x2FFB), array(0xE0020, 0xE007F)
+            ),
+            'replacemaps_2003' => array(0x41 => array(0x61), 0x42 => array(0x62), 0x43 => array(0x63),
+                    0x44 => array(0x64), 0x45 => array(0x65), 0x46 => array(0x66), 0x47 => array(0x67),
+                    0x48 => array(0x68), 0x49 => array(0x69), 0x4A => array(0x6A), 0x4B => array(0x6B),
+                    0x4C => array(0x6C), 0x4D => array(0x6D), 0x4E => array(0x6E), 0x4F => array(0x6F),
+                    0x50 => array(0x70), 0x51 => array(0x71), 0x52 => array(0x72), 0x53 => array(0x73),
+                    0x54 => array(0x74), 0x55 => array(0x75), 0x56 => array(0x76), 0x57 => array(0x77),
+                    0x58 => array(0x78), 0x59 => array(0x79), 0x5A => array(0x7A), 0xB5 => array(0x3BC),
+                    0xC0 => array(0xE0), 0xC1 => array(0xE1), 0xC2 => array(0xE2), 0xC3 => array(0xE3),
+                    0xC4 => array(0xE4), 0xC5 => array(0xE5), 0xC6 => array(0xE6), 0xC7 => array(0xE7),
+                    0xC8 => array(0xE8), 0xC9 => array(0xE9), 0xCA => array(0xEA), 0xCB => array(0xEB),
+                    0xCC => array(0xEC), 0xCD => array(0xED), 0xCE => array(0xEE), 0xCF => array(0xEF),
+                    0xD0 => array(0xF0), 0xD1 => array(0xF1), 0xD2 => array(0xF2), 0xD3 => array(0xF3),
+                    0xD4 => array(0xF4), 0xD5 => array(0xF5), 0xD6 => array(0xF6), 0xD8 => array(0xF8),
+                    0xD9 => array(0xF9), 0xDA => array(0xFA), 0xDB => array(0xFB), 0xDC => array(0xFC),
+                    0xDD => array(0xFD), 0xDE => array(0xFE), 0xDF => array(0x73, 0x73),
+                    0x100 => array(0x101), 0x102 => array(0x103), 0x104 => array(0x105),
+                    0x106 => array(0x107), 0x108 => array(0x109), 0x10A => array(0x10B),
+                    0x10C => array(0x10D), 0x10E => array(0x10F), 0x110 => array(0x111),
+                    0x112 => array(0x113), 0x114 => array(0x115), 0x116 => array(0x117),
+                    0x118 => array(0x119), 0x11A => array(0x11B), 0x11C => array(0x11D),
+                    0x11E => array(0x11F), 0x120 => array(0x121), 0x122 => array(0x123),
+                    0x124 => array(0x125), 0x126 => array(0x127), 0x128 => array(0x129),
+                    0x12A => array(0x12B), 0x12C => array(0x12D), 0x12E => array(0x12F),
+                    0x130 => array(0x69, 0x307), 0x132 => array(0x133), 0x134 => array(0x135),
+                    0x136 => array(0x137), 0x139 => array(0x13A), 0x13B => array(0x13C),
+                    0x13D => array(0x13E), 0x13F => array(0x140), 0x141 => array(0x142),
+                    0x143 => array(0x144), 0x145 => array(0x146), 0x147 => array(0x148),
+                    0x149 => array(0x2BC, 0x6E), 0x14A => array(0x14B), 0x14C => array(0x14D),
+                    0x14E => array(0x14F), 0x150 => array(0x151), 0x152 => array(0x153),
+                    0x154 => array(0x155), 0x156 => array(0x157), 0x158 => array(0x159),
+                    0x15A => array(0x15B), 0x15C => array(0x15D), 0x15E => array(0x15F),
+                    0x160 => array(0x161), 0x162 => array(0x163), 0x164 => array(0x165),
+                    0x166 => array(0x167), 0x168 => array(0x169), 0x16A => array(0x16B),
+                    0x16C => array(0x16D), 0x16E => array(0x16F), 0x170 => array(0x171),
+                    0x172 => array(0x173), 0x174 => array(0x175), 0x176 => array(0x177),
+                    0x178 => array(0xFF), 0x179 => array(0x17A), 0x17B => array(0x17C),
+                    0x17D => array(0x17E), 0x17F => array(0x73), 0x181 => array(0x253),
+                    0x182 => array(0x183), 0x184 => array(0x185), 0x186 => array(0x254),
+                    0x187 => array(0x188), 0x189 => array(0x256), 0x18A => array(0x257),
+                    0x18B => array(0x18C), 0x18E => array(0x1DD), 0x18F => array(0x259),
+                    0x190 => array(0x25B), 0x191 => array(0x192), 0x193 => array(0x260),
+                    0x194 => array(0x263), 0x196 => array(0x269), 0x197 => array(0x268),
+                    0x198 => array(0x199), 0x19C => array(0x26F), 0x19D => array(0x272),
+                    0x19F => array(0x275), 0x1A0 => array(0x1A1), 0x1A2 => array(0x1A3),
+                    0x1A4 => array(0x1A5), 0x1A6 => array(0x280), 0x1A7 => array(0x1A8),
+                    0x1A9 => array(0x283), 0x1AC => array(0x1AD), 0x1AE => array(0x288),
+                    0x1AF => array(0x1B0), 0x1B1 => array(0x28A), 0x1B2 => array(0x28B),
+                    0x1B3 => array(0x1B4), 0x1B5 => array(0x1B6), 0x1B7 => array(0x292),
+                    0x1B8 => array(0x1B9), 0x1BC => array(0x1BD), 0x1C4 => array(0x1C6),
+                    0x1C5 => array(0x1C6), 0x1C7 => array(0x1C9), 0x1C8 => array(0x1C9),
+                    0x1CA => array(0x1CC), 0x1CB => array(0x1CC), 0x1CD => array(0x1CE),
+                    0x1CF => array(0x1D0), 0x1D1 => array(0x1D2), 0x1D3 => array(0x1D4),
+                    0x1D5 => array(0x1D6), 0x1D7 => array(0x1D8), 0x1D9 => array(0x1DA),
+                    0x1DB => array(0x1DC), 0x1DE => array(0x1DF), 0x1E0 => array(0x1E1),
+                    0x1E2 => array(0x1E3), 0x1E4 => array(0x1E5), 0x1E6 => array(0x1E7),
+                    0x1E8 => array(0x1E9), 0x1EA => array(0x1EB), 0x1EC => array(0x1ED),
+                    0x1EE => array(0x1EF), 0x1F0 => array(0x6A, 0x30C), 0x1F1 => array(0x1F3),
+                    0x1F2 => array(0x1F3), 0x1F4 => array(0x1F5), 0x1F6 => array(0x195),
+                    0x1F7 => array(0x1BF), 0x1F8 => array(0x1F9), 0x1FA => array(0x1FB),
+                    0x1FC => array(0x1FD), 0x1FE => array(0x1FF), 0x200 => array(0x201),
+                    0x202 => array(0x203), 0x204 => array(0x205), 0x206 => array(0x207),
+                    0x208 => array(0x209), 0x20A => array(0x20B), 0x20C => array(0x20D),
+                    0x20E => array(0x20F), 0x210 => array(0x211), 0x212 => array(0x213),
+                    0x214 => array(0x215), 0x216 => array(0x217), 0x218 => array(0x219),
+                    0x21A => array(0x21B), 0x21C => array(0x21D), 0x21E => array(0x21F),
+                    0x220 => array(0x19E), 0x222 => array(0x223), 0x224 => array(0x225),
+                    0x226 => array(0x227), 0x228 => array(0x229), 0x22A => array(0x22B),
+                    0x22C => array(0x22D), 0x22E => array(0x22F), 0x230 => array(0x231),
+                    0x232 => array(0x233), 0x345 => array(0x3B9), 0x37A => array(0x20, 0x3B9),
+                    0x386 => array(0x3AC), 0x388 => array(0x3AD), 0x389 => array(0x3AE),
+                    0x38A => array(0x3AF), 0x38C => array(0x3CC), 0x38E => array(0x3CD),
+                    0x38F => array(0x3CE), 0x390 => array(0x3B9, 0x308, 0x301),
+                    0x391 => array(0x3B1), 0x392 => array(0x3B2), 0x393 => array(0x3B3),
+                    0x394 => array(0x3B4), 0x395 => array(0x3B5), 0x396 => array(0x3B6),
+                    0x397 => array(0x3B7), 0x398 => array(0x3B8), 0x399 => array(0x3B9),
+                    0x39A => array(0x3BA), 0x39B => array(0x3BB), 0x39C => array(0x3BC),
+                    0x39D => array(0x3BD), 0x39E => array(0x3BE), 0x39F => array(0x3BF),
+                    0x3A0 => array(0x3C0), 0x3A1 => array(0x3C1), 0x3A3 => array(0x3C3),
+                    0x3A4 => array(0x3C4), 0x3A5 => array(0x3C5), 0x3A6 => array(0x3C6),
+                    0x3A7 => array(0x3C7), 0x3A8 => array(0x3C8), 0x3A9 => array(0x3C9),
+                    0x3AA => array(0x3CA), 0x3AB => array(0x3CB), 0x3B0 => array(0x3C5, 0x308, 0x301),
+                    0x3C2 => array(0x3C3), 0x3D0 => array(0x3B2), 0x3D1 => array(0x3B8),
+                    0x3D2 => array(0x3C5), 0x3D3 => array(0x3CD), 0x3D4 => array(0x3CB),
+                    0x3D5 => array(0x3C6), 0x3D6 => array(0x3C0), 0x3D8 => array(0x3D9),
+                    0x3DA => array(0x3DB), 0x3DC => array(0x3DD), 0x3DE => array(0x3DF),
+                    0x3E0 => array(0x3E1), 0x3E2 => array(0x3E3), 0x3E4 => array(0x3E5),
+                    0x3E6 => array(0x3E7), 0x3E8 => array(0x3E9), 0x3EA => array(0x3EB),
+                    0x3EC => array(0x3ED), 0x3EE => array(0x3EF), 0x3F0 => array(0x3BA),
+                    0x3F1 => array(0x3C1), 0x3F2 => array(0x3C3), 0x3F4 => array(0x3B8),
+                    0x3F5 => array(0x3B5), 0x400 => array(0x450), 0x401 => array(0x451),
+                    0x402 => array(0x452), 0x403 => array(0x453), 0x404 => array(0x454),
+                    0x405 => array(0x455), 0x406 => array(0x456), 0x407 => array(0x457),
+                    0x408 => array(0x458), 0x409 => array(0x459), 0x40A => array(0x45A),
+                    0x40B => array(0x45B), 0x40C => array(0x45C), 0x40D => array(0x45D),
+                    0x40E => array(0x45E), 0x40F => array(0x45F), 0x410 => array(0x430),
+                    0x411 => array(0x431), 0x412 => array(0x432), 0x413 => array(0x433),
+                    0x414 => array(0x434), 0x415 => array(0x435), 0x416 => array(0x436),
+                    0x417 => array(0x437), 0x418 => array(0x438), 0x419 => array(0x439),
+                    0x41A => array(0x43A), 0x41B => array(0x43B), 0x41C => array(0x43C),
+                    0x41D => array(0x43D), 0x41E => array(0x43E), 0x41F => array(0x43F),
+                    0x420 => array(0x440), 0x421 => array(0x441), 0x422 => array(0x442),
+                    0x423 => array(0x443), 0x424 => array(0x444), 0x425 => array(0x445),
+                    0x426 => array(0x446), 0x427 => array(0x447), 0x428 => array(0x448),
+                    0x429 => array(0x449), 0x42A => array(0x44A), 0x42B => array(0x44B),
+                    0x42C => array(0x44C), 0x42D => array(0x44D), 0x42E => array(0x44E),
+                    0x42F => array(0x44F), 0x460 => array(0x461), 0x462 => array(0x463),
+                    0x464 => array(0x465), 0x466 => array(0x467), 0x468 => array(0x469),
+                    0x46A => array(0x46B), 0x46C => array(0x46D), 0x46E => array(0x46F),
+                    0x470 => array(0x471), 0x472 => array(0x473), 0x474 => array(0x475),
+                    0x476 => array(0x477), 0x478 => array(0x479), 0x47A => array(0x47B),
+                    0x47C => array(0x47D), 0x47E => array(0x47F), 0x480 => array(0x481),
+                    0x48A => array(0x48B), 0x48C => array(0x48D), 0x48E => array(0x48F),
+                    0x490 => array(0x491), 0x492 => array(0x493), 0x494 => array(0x495),
+                    0x496 => array(0x497), 0x498 => array(0x499), 0x49A => array(0x49B),
+                    0x49C => array(0x49D), 0x49E => array(0x49F), 0x4A0 => array(0x4A1),
+                    0x4A2 => array(0x4A3), 0x4A4 => array(0x4A5), 0x4A6 => array(0x4A7),
+                    0x4A8 => array(0x4A9), 0x4AA => array(0x4AB), 0x4AC => array(0x4AD),
+                    0x4AE => array(0x4AF), 0x4B0 => array(0x4B1), 0x4B2 => array(0x4B3),
+                    0x4B4 => array(0x4B5), 0x4B6 => array(0x4B7), 0x4B8 => array(0x4B9),
+                    0x4BA => array(0x4BB), 0x4BC => array(0x4BD), 0x4BE => array(0x4BF),
+                    0x4C1 => array(0x4C2), 0x4C3 => array(0x4C4), 0x4C5 => array(0x4C6),
+                    0x4C7 => array(0x4C8), 0x4C9 => array(0x4CA), 0x4CB => array(0x4CC),
+                    0x4CD => array(0x4CE), 0x4D0 => array(0x4D1), 0x4D2 => array(0x4D3),
+                    0x4D4 => array(0x4D5), 0x4D6 => array(0x4D7), 0x4D8 => array(0x4D9),
+                    0x4DA => array(0x4DB), 0x4DC => array(0x4DD), 0x4DE => array(0x4DF),
+                    0x4E0 => array(0x4E1), 0x4E2 => array(0x4E3), 0x4E4 => array(0x4E5),
+                    0x4E6 => array(0x4E7), 0x4E8 => array(0x4E9), 0x4EA => array(0x4EB),
+                    0x4EC => array(0x4ED), 0x4EE => array(0x4EF), 0x4F0 => array(0x4F1),
+                    0x4F2 => array(0x4F3), 0x4F4 => array(0x4F5), 0x4F8 => array(0x4F9),
+                    0x500 => array(0x501), 0x502 => array(0x503), 0x504 => array(0x505),
+                    0x506 => array(0x507), 0x508 => array(0x509), 0x50A => array(0x50B),
+                    0x50C => array(0x50D), 0x50E => array(0x50F), 0x531 => array(0x561),
+                    0x532 => array(0x562), 0x533 => array(0x563), 0x534 => array(0x564),
+                    0x535 => array(0x565), 0x536 => array(0x566), 0x537 => array(0x567),
+                    0x538 => array(0x568), 0x539 => array(0x569), 0x53A => array(0x56A),
+                    0x53B => array(0x56B), 0x53C => array(0x56C), 0x53D => array(0x56D),
+                    0x53E => array(0x56E), 0x53F => array(0x56F), 0x540 => array(0x570),
+                    0x541 => array(0x571), 0x542 => array(0x572), 0x543 => array(0x573),
+                    0x544 => array(0x574), 0x545 => array(0x575), 0x546 => array(0x576),
+                    0x547 => array(0x577), 0x548 => array(0x578), 0x549 => array(0x579),
+                    0x54A => array(0x57A), 0x54B => array(0x57B), 0x54C => array(0x57C),
+                    0x54D => array(0x57D), 0x54E => array(0x57E), 0x54F => array(0x57F),
+                    0x550 => array(0x580), 0x551 => array(0x581), 0x552 => array(0x582),
+                    0x553 => array(0x583), 0x554 => array(0x584), 0x555 => array(0x585),
+                    0x556 => array(0x586), 0x587 => array(0x565, 0x582), 0xE33 => array(0xE4D, 0xE32),
+                    0x1E00 => array(0x1E01), 0x1E02 => array(0x1E03), 0x1E04 => array(0x1E05),
+                    0x1E06 => array(0x1E07), 0x1E08 => array(0x1E09), 0x1E0A => array(0x1E0B),
+                    0x1E0C => array(0x1E0D), 0x1E0E => array(0x1E0F), 0x1E10 => array(0x1E11),
+                    0x1E12 => array(0x1E13), 0x1E14 => array(0x1E15), 0x1E16 => array(0x1E17),
+                    0x1E18 => array(0x1E19), 0x1E1A => array(0x1E1B), 0x1E1C => array(0x1E1D),
+                    0x1E1E => array(0x1E1F), 0x1E20 => array(0x1E21), 0x1E22 => array(0x1E23),
+                    0x1E24 => array(0x1E25), 0x1E26 => array(0x1E27), 0x1E28 => array(0x1E29),
+                    0x1E2A => array(0x1E2B), 0x1E2C => array(0x1E2D), 0x1E2E => array(0x1E2F),
+                    0x1E30 => array(0x1E31), 0x1E32 => array(0x1E33), 0x1E34 => array(0x1E35),
+                    0x1E36 => array(0x1E37), 0x1E38 => array(0x1E39), 0x1E3A => array(0x1E3B),
+                    0x1E3C => array(0x1E3D), 0x1E3E => array(0x1E3F), 0x1E40 => array(0x1E41),
+                    0x1E42 => array(0x1E43), 0x1E44 => array(0x1E45), 0x1E46 => array(0x1E47),
+                    0x1E48 => array(0x1E49), 0x1E4A => array(0x1E4B), 0x1E4C => array(0x1E4D),
+                    0x1E4E => array(0x1E4F), 0x1E50 => array(0x1E51), 0x1E52 => array(0x1E53),
+                    0x1E54 => array(0x1E55), 0x1E56 => array(0x1E57), 0x1E58 => array(0x1E59),
+                    0x1E5A => array(0x1E5B), 0x1E5C => array(0x1E5D), 0x1E5E => array(0x1E5F),
+                    0x1E60 => array(0x1E61), 0x1E62 => array(0x1E63), 0x1E64 => array(0x1E65),
+                    0x1E66 => array(0x1E67), 0x1E68 => array(0x1E69), 0x1E6A => array(0x1E6B),
+                    0x1E6C => array(0x1E6D), 0x1E6E => array(0x1E6F), 0x1E70 => array(0x1E71),
+                    0x1E72 => array(0x1E73), 0x1E74 => array(0x1E75), 0x1E76 => array(0x1E77),
+                    0x1E78 => array(0x1E79), 0x1E7A => array(0x1E7B), 0x1E7C => array(0x1E7D),
+                    0x1E7E => array(0x1E7F), 0x1E80 => array(0x1E81), 0x1E82 => array(0x1E83),
+                    0x1E84 => array(0x1E85), 0x1E86 => array(0x1E87), 0x1E88 => array(0x1E89),
+                    0x1E8A => array(0x1E8B), 0x1E8C => array(0x1E8D), 0x1E8E => array(0x1E8F),
+                    0x1E90 => array(0x1E91), 0x1E92 => array(0x1E93), 0x1E94 => array(0x1E95),
+                    0x1E96 => array(0x68, 0x331), 0x1E97 => array(0x74, 0x308), 0x1E98 => array(0x77, 0x30A),
+                    0x1E99 => array(0x79, 0x30A), 0x1E9A => array(0x61, 0x2BE), 0x1E9B => array(0x1E61),
+                    0x1EA0 => array(0x1EA1), 0x1EA2 => array(0x1EA3), 0x1EA4 => array(0x1EA5),
+                    0x1EA6 => array(0x1EA7), 0x1EA8 => array(0x1EA9), 0x1EAA => array(0x1EAB),
+                    0x1EAC => array(0x1EAD), 0x1EAE => array(0x1EAF), 0x1EB0 => array(0x1EB1),
+                    0x1EB2 => array(0x1EB3), 0x1EB4 => array(0x1EB5), 0x1EB6 => array(0x1EB7),
+                    0x1EB8 => array(0x1EB9), 0x1EBA => array(0x1EBB), 0x1EBC => array(0x1EBD),
+                    0x1EBE => array(0x1EBF), 0x1EC0 => array(0x1EC1), 0x1EC2 => array(0x1EC3),
+                    0x1EC4 => array(0x1EC5), 0x1EC6 => array(0x1EC7), 0x1EC8 => array(0x1EC9),
+                    0x1ECA => array(0x1ECB), 0x1ECC => array(0x1ECD), 0x1ECE => array(0x1ECF),
+                    0x1ED0 => array(0x1ED1), 0x1ED2 => array(0x1ED3), 0x1ED4 => array(0x1ED5),
+                    0x1ED6 => array(0x1ED7), 0x1ED8 => array(0x1ED9), 0x1EDA => array(0x1EDB),
+                    0x1EDC => array(0x1EDD), 0x1EDE => array(0x1EDF), 0x1EE0 => array(0x1EE1),
+                    0x1EE2 => array(0x1EE3), 0x1EE4 => array(0x1EE5), 0x1EE6 => array(0x1EE7),
+                    0x1EE8 => array(0x1EE9), 0x1EEA => array(0x1EEB), 0x1EEC => array(0x1EED),
+                    0x1EEE => array(0x1EEF), 0x1EF0 => array(0x1EF1), 0x1EF2 => array(0x1EF3),
+                    0x1EF4 => array(0x1EF5), 0x1EF6 => array(0x1EF7), 0x1EF8 => array(0x1EF9),
+                    0x1F08 => array(0x1F00), 0x1F09 => array(0x1F01), 0x1F0A => array(0x1F02),
+                    0x1F0B => array(0x1F03), 0x1F0C => array(0x1F04), 0x1F0D => array(0x1F05),
+                    0x1F0E => array(0x1F06), 0x1F0F => array(0x1F07), 0x1F18 => array(0x1F10),
+                    0x1F19 => array(0x1F11), 0x1F1A => array(0x1F12), 0x1F1B => array(0x1F13),
+                    0x1F1C => array(0x1F14), 0x1F1D => array(0x1F15), 0x1F28 => array(0x1F20),
+                    0x1F29 => array(0x1F21), 0x1F2A => array(0x1F22), 0x1F2B => array(0x1F23),
+                    0x1F2C => array(0x1F24), 0x1F2D => array(0x1F25), 0x1F2E => array(0x1F26),
+                    0x1F2F => array(0x1F27), 0x1F38 => array(0x1F30), 0x1F39 => array(0x1F31),
+                    0x1F3A => array(0x1F32), 0x1F3B => array(0x1F33), 0x1F3C => array(0x1F34),
+                    0x1F3D => array(0x1F35), 0x1F3E => array(0x1F36), 0x1F3F => array(0x1F37),
+                    0x1F48 => array(0x1F40), 0x1F49 => array(0x1F41), 0x1F4A => array(0x1F42),
+                    0x1F4B => array(0x1F43), 0x1F4C => array(0x1F44), 0x1F4D => array(0x1F45),
+                    0x1F50 => array(0x3C5, 0x313), 0x1F52 => array(0x3C5, 0x313, 0x300),
+                    0x1F54 => array(0x3C5, 0x313, 0x301), 0x1F56 => array(0x3C5, 0x313, 0x342),
+                    0x1F59 => array(0x1F51), 0x1F5B => array(0x1F53), 0x1F5D => array(0x1F55),
+                    0x1F5F => array(0x1F57), 0x1F68 => array(0x1F60), 0x1F69 => array(0x1F61),
+                    0x1F6A => array(0x1F62), 0x1F6B => array(0x1F63), 0x1F6C => array(0x1F64),
+                    0x1F6D => array(0x1F65), 0x1F6E => array(0x1F66), 0x1F6F => array(0x1F67),
+                    0x1F80 => array(0x1F00, 0x3B9), 0x1F81 => array(0x1F01, 0x3B9),
+                    0x1F82 => array(0x1F02, 0x3B9), 0x1F83 => array(0x1F03, 0x3B9),
+                    0x1F84 => array(0x1F04, 0x3B9), 0x1F85 => array(0x1F05, 0x3B9),
+                    0x1F86 => array(0x1F06, 0x3B9), 0x1F87 => array(0x1F07, 0x3B9),
+                    0x1F88 => array(0x1F00, 0x3B9), 0x1F89 => array(0x1F01, 0x3B9),
+                    0x1F8A => array(0x1F02, 0x3B9), 0x1F8B => array(0x1F03, 0x3B9),
+                    0x1F8C => array(0x1F04, 0x3B9), 0x1F8D => array(0x1F05, 0x3B9),
+                    0x1F8E => array(0x1F06, 0x3B9), 0x1F8F => array(0x1F07, 0x3B9),
+                    0x1F90 => array(0x1F20, 0x3B9), 0x1F91 => array(0x1F21, 0x3B9),
+                    0x1F92 => array(0x1F22, 0x3B9), 0x1F93 => array(0x1F23, 0x3B9),
+                    0x1F94 => array(0x1F24, 0x3B9), 0x1F95 => array(0x1F25, 0x3B9),
+                    0x1F96 => array(0x1F26, 0x3B9), 0x1F97 => array(0x1F27, 0x3B9),
+                    0x1F98 => array(0x1F20, 0x3B9), 0x1F99 => array(0x1F21, 0x3B9),
+                    0x1F9A => array(0x1F22, 0x3B9), 0x1F9B => array(0x1F23, 0x3B9),
+                    0x1F9C => array(0x1F24, 0x3B9), 0x1F9D => array(0x1F25, 0x3B9),
+                    0x1F9E => array(0x1F26, 0x3B9), 0x1F9F => array(0x1F27, 0x3B9),
+                    0x1FA0 => array(0x1F60, 0x3B9), 0x1FA1 => array(0x1F61, 0x3B9),
+                    0x1FA2 => array(0x1F62, 0x3B9), 0x1FA3 => array(0x1F63, 0x3B9),
+                    0x1FA4 => array(0x1F64, 0x3B9), 0x1FA5 => array(0x1F65, 0x3B9),
+                    0x1FA6 => array(0x1F66, 0x3B9), 0x1FA7 => array(0x1F67, 0x3B9),
+                    0x1FA8 => array(0x1F60, 0x3B9), 0x1FA9 => array(0x1F61, 0x3B9),
+                    0x1FAA => array(0x1F62, 0x3B9), 0x1FAB => array(0x1F63, 0x3B9),
+                    0x1FAC => array(0x1F64, 0x3B9), 0x1FAD => array(0x1F65, 0x3B9),
+                    0x1FAE => array(0x1F66, 0x3B9), 0x1FAF => array(0x1F67, 0x3B9),
+                    0x1FB2 => array(0x1F70, 0x3B9), 0x1FB3 => array(0x3B1, 0x3B9),
+                    0x1FB4 => array(0x3AC, 0x3B9), 0x1FB6 => array(0x3B1, 0x342),
+                    0x1FB7 => array(0x3B1, 0x342, 0x3B9), 0x1FB8 => array(0x1FB0),
+                    0x1FB9 => array(0x1FB1), 0x1FBA => array(0x1F70), 0x1FBB => array(0x1F71),
+                    0x1FBC => array(0x3B1, 0x3B9), 0x1FBE => array(0x3B9),
+                    0x1FC2 => array(0x1F74, 0x3B9), 0x1FC3 => array(0x3B7, 0x3B9),
+                    0x1FC4 => array(0x3AE, 0x3B9), 0x1FC6 => array(0x3B7, 0x342),
+                    0x1FC7 => array(0x3B7, 0x342, 0x3B9), 0x1FC8 => array(0x1F72),
+                    0x1FC9 => array(0x1F73), 0x1FCA => array(0x1F74), 0x1FCB => array(0x1F75),
+                    0x1FCC => array(0x3B7, 0x3B9), 0x1FD2 => array(0x3B9, 0x308, 0x300),
+                    0x1FD3 => array(0x3B9, 0x308, 0x301), 0x1FD6 => array(0x3B9, 0x342),
+                    0x1FD7 => array(0x3B9, 0x308, 0x342), 0x1FD8 => array(0x1FD0),
+                    0x1FD9 => array(0x1FD1), 0x1FDA => array(0x1F76),
+                    0x1FDB => array(0x1F77), 0x1FE2 => array(0x3C5, 0x308, 0x300),
+                    0x1FE3 => array(0x3C5, 0x308, 0x301), 0x1FE4 => array(0x3C1, 0x313),
+                    0x1FE6 => array(0x3C5, 0x342), 0x1FE7 => array(0x3C5, 0x308, 0x342),
+                    0x1FE8 => array(0x1FE0), 0x1FE9 => array(0x1FE1),
+                    0x1FEA => array(0x1F7A), 0x1FEB => array(0x1F7B),
+                    0x1FEC => array(0x1FE5), 0x1FF2 => array(0x1F7C, 0x3B9),
+                    0x1FF3 => array(0x3C9, 0x3B9), 0x1FF4 => array(0x3CE, 0x3B9),
+                    0x1FF6 => array(0x3C9, 0x342), 0x1FF7 => array(0x3C9, 0x342, 0x3B9),
+                    0x1FF8 => array(0x1F78), 0x1FF9 => array(0x1F79), 0x1FFA => array(0x1F7C),
+                    0x1FFB => array(0x1F7D), 0x1FFC => array(0x3C9, 0x3B9),
+                    0x20A8 => array(0x72, 0x73), 0x2102 => array(0x63), 0x2103 => array(0xB0, 0x63),
+                    0x2107 => array(0x25B), 0x2109 => array(0xB0, 0x66), 0x210B => array(0x68),
+                    0x210C => array(0x68), 0x210D => array(0x68), 0x2110 => array(0x69),
+                    0x2111 => array(0x69), 0x2112 => array(0x6C), 0x2115 => array(0x6E),
+                    0x2116 => array(0x6E, 0x6F), 0x2119 => array(0x70), 0x211A => array(0x71),
+                    0x211B => array(0x72), 0x211C => array(0x72), 0x211D => array(0x72),
+                    0x2120 => array(0x73, 0x6D), 0x2121 => array(0x74, 0x65, 0x6C),
+                    0x2122 => array(0x74, 0x6D), 0x2124 => array(0x7A), 0x2126 => array(0x3C9),
+                    0x2128 => array(0x7A), 0x212A => array(0x6B), 0x212B => array(0xE5),
+                    0x212C => array(0x62), 0x212D => array(0x63), 0x2130 => array(0x65),
+                    0x2131 => array(0x66), 0x2133 => array(0x6D), 0x213E => array(0x3B3),
+                    0x213F => array(0x3C0), 0x2145 => array(0x64), 0x2160 => array(0x2170),
+                    0x2161 => array(0x2171), 0x2162 => array(0x2172), 0x2163 => array(0x2173),
+                    0x2164 => array(0x2174), 0x2165 => array(0x2175), 0x2166 => array(0x2176),
+                    0x2167 => array(0x2177), 0x2168 => array(0x2178), 0x2169 => array(0x2179),
+                    0x216A => array(0x217A), 0x216B => array(0x217B), 0x216C => array(0x217C),
+                    0x216D => array(0x217D), 0x216E => array(0x217E), 0x216F => array(0x217F),
+                    0x24B6 => array(0x24D0), 0x24B7 => array(0x24D1), 0x24B8 => array(0x24D2),
+                    0x24B9 => array(0x24D3), 0x24BA => array(0x24D4), 0x24BB => array(0x24D5),
+                    0x24BC => array(0x24D6), 0x24BD => array(0x24D7), 0x24BE => array(0x24D8),
+                    0x24BF => array(0x24D9), 0x24C0 => array(0x24DA), 0x24C1 => array(0x24DB),
+                    0x24C2 => array(0x24DC), 0x24C3 => array(0x24DD), 0x24C4 => array(0x24DE),
+                    0x24C5 => array(0x24DF), 0x24C6 => array(0x24E0), 0x24C7 => array(0x24E1),
+                    0x24C8 => array(0x24E2), 0x24C9 => array(0x24E3), 0x24CA => array(0x24E4),
+                    0x24CB => array(0x24E5), 0x24CC => array(0x24E6), 0x24CD => array(0x24E7),
+                    0x24CE => array(0x24E8), 0x24CF => array(0x24E9), 0x3371 => array(0x68, 0x70, 0x61),
+                    0x3373 => array(0x61, 0x75), 0x3375 => array(0x6F, 0x76),
+                    0x3380 => array(0x70, 0x61), 0x3381 => array(0x6E, 0x61),
+                    0x3382 => array(0x3BC, 0x61), 0x3383 => array(0x6D, 0x61),
+                    0x3384 => array(0x6B, 0x61), 0x3385 => array(0x6B, 0x62),
+                    0x3386 => array(0x6D, 0x62), 0x3387 => array(0x67, 0x62),
+                    0x338A => array(0x70, 0x66), 0x338B => array(0x6E, 0x66),
+                    0x338C => array(0x3BC, 0x66), 0x3390 => array(0x68, 0x7A),
+                    0x3391 => array(0x6B, 0x68, 0x7A), 0x3392 => array(0x6D, 0x68, 0x7A),
+                    0x3393 => array(0x67, 0x68, 0x7A), 0x3394 => array(0x74, 0x68, 0x7A),
+                    0x33A9 => array(0x70, 0x61), 0x33AA => array(0x6B, 0x70, 0x61),
+                    0x33AB => array(0x6D, 0x70, 0x61), 0x33AC => array(0x67, 0x70, 0x61),
+                    0x33B4 => array(0x70, 0x76), 0x33B5 => array(0x6E, 0x76),
+                    0x33B6 => array(0x3BC, 0x76), 0x33B7 => array(0x6D, 0x76),
+                    0x33B8 => array(0x6B, 0x76), 0x33B9 => array(0x6D, 0x76),
+                    0x33BA => array(0x70, 0x77), 0x33BB => array(0x6E, 0x77),
+                    0x33BC => array(0x3BC, 0x77), 0x33BD => array(0x6D, 0x77),
+                    0x33BE => array(0x6B, 0x77), 0x33BF => array(0x6D, 0x77),
+                    0x33C0 => array(0x6B, 0x3C9), 0x33C1 => array(0x6D, 0x3C9), /*
+                    0x33C2  => array(0x61, 0x2E, 0x6D, 0x2E), */
+                    0x33C3 => array(0x62, 0x71), 0x33C6 => array(0x63, 0x2215, 0x6B, 0x67),
+                    0x33C7 => array(0x63, 0x6F, 0x2E), 0x33C8 => array(0x64, 0x62),
+                    0x33C9 => array(0x67, 0x79), 0x33CB => array(0x68, 0x70),
+                    0x33CD => array(0x6B, 0x6B), 0x33CE => array(0x6B, 0x6D),
+                    0x33D7 => array(0x70, 0x68), 0x33D9 => array(0x70, 0x70, 0x6D),
+                    0x33DA => array(0x70, 0x72), 0x33DC => array(0x73, 0x76),
+                    0x33DD => array(0x77, 0x62), 0xFB00 => array(0x66, 0x66),
+                    0xFB01 => array(0x66, 0x69), 0xFB02 => array(0x66, 0x6C),
+                    0xFB03 => array(0x66, 0x66, 0x69), 0xFB04 => array(0x66, 0x66, 0x6C),
+                    0xFB05 => array(0x73, 0x74), 0xFB06 => array(0x73, 0x74),
+                    0xFB13 => array(0x574, 0x576), 0xFB14 => array(0x574, 0x565),
+                    0xFB15 => array(0x574, 0x56B), 0xFB16 => array(0x57E, 0x576),
+                    0xFB17 => array(0x574, 0x56D), 0xFF21 => array(0xFF41),
+                    0xFF22 => array(0xFF42), 0xFF23 => array(0xFF43), 0xFF24 => array(0xFF44),
+                    0xFF25 => array(0xFF45), 0xFF26 => array(0xFF46), 0xFF27 => array(0xFF47),
+                    0xFF28 => array(0xFF48), 0xFF29 => array(0xFF49), 0xFF2A => array(0xFF4A),
+                    0xFF2B => array(0xFF4B), 0xFF2C => array(0xFF4C), 0xFF2D => array(0xFF4D),
+                    0xFF2E => array(0xFF4E), 0xFF2F => array(0xFF4F), 0xFF30 => array(0xFF50),
+                    0xFF31 => array(0xFF51), 0xFF32 => array(0xFF52), 0xFF33 => array(0xFF53),
+                    0xFF34 => array(0xFF54), 0xFF35 => array(0xFF55), 0xFF36 => array(0xFF56),
+                    0xFF37 => array(0xFF57), 0xFF38 => array(0xFF58), 0xFF39 => array(0xFF59),
+                    0xFF3A => array(0xFF5A), 0x10400 => array(0x10428), 0x10401 => array(0x10429),
+                    0x10402 => array(0x1042A), 0x10403 => array(0x1042B), 0x10404 => array(0x1042C),
+                    0x10405 => array(0x1042D), 0x10406 => array(0x1042E), 0x10407 => array(0x1042F),
+                    0x10408 => array(0x10430), 0x10409 => array(0x10431), 0x1040A => array(0x10432),
+                    0x1040B => array(0x10433), 0x1040C => array(0x10434), 0x1040D => array(0x10435),
+                    0x1040E => array(0x10436), 0x1040F => array(0x10437), 0x10410 => array(0x10438),
+                    0x10411 => array(0x10439), 0x10412 => array(0x1043A), 0x10413 => array(0x1043B),
+                    0x10414 => array(0x1043C), 0x10415 => array(0x1043D), 0x10416 => array(0x1043E),
+                    0x10417 => array(0x1043F), 0x10418 => array(0x10440), 0x10419 => array(0x10441),
+                    0x1041A => array(0x10442), 0x1041B => array(0x10443), 0x1041C => array(0x10444),
+                    0x1041D => array(0x10445), 0x1041E => array(0x10446), 0x1041F => array(0x10447),
+                    0x10420 => array(0x10448), 0x10421 => array(0x10449), 0x10422 => array(0x1044A),
+                    0x10423 => array(0x1044B), 0x10424 => array(0x1044C), 0x10425 => array(0x1044D),
+                    0x1D400 => array(0x61), 0x1D401 => array(0x62), 0x1D402 => array(0x63),
+                    0x1D403 => array(0x64), 0x1D404 => array(0x65), 0x1D405 => array(0x66),
+                    0x1D406 => array(0x67), 0x1D407 => array(0x68), 0x1D408 => array(0x69),
+                    0x1D409 => array(0x6A), 0x1D40A => array(0x6B), 0x1D40B => array(0x6C),
+                    0x1D40C => array(0x6D), 0x1D40D => array(0x6E), 0x1D40E => array(0x6F),
+                    0x1D40F => array(0x70), 0x1D410 => array(0x71), 0x1D411 => array(0x72),
+                    0x1D412 => array(0x73), 0x1D413 => array(0x74), 0x1D414 => array(0x75),
+                    0x1D415 => array(0x76), 0x1D416 => array(0x77), 0x1D417 => array(0x78),
+                    0x1D418 => array(0x79), 0x1D419 => array(0x7A), 0x1D434 => array(0x61),
+                    0x1D435 => array(0x62), 0x1D436 => array(0x63), 0x1D437 => array(0x64),
+                    0x1D438 => array(0x65), 0x1D439 => array(0x66), 0x1D43A => array(0x67),
+                    0x1D43B => array(0x68), 0x1D43C => array(0x69), 0x1D43D => array(0x6A),
+                    0x1D43E => array(0x6B), 0x1D43F => array(0x6C), 0x1D440 => array(0x6D),
+                    0x1D441 => array(0x6E), 0x1D442 => array(0x6F), 0x1D443 => array(0x70),
+                    0x1D444 => array(0x71), 0x1D445 => array(0x72), 0x1D446 => array(0x73),
+                    0x1D447 => array(0x74), 0x1D448 => array(0x75), 0x1D449 => array(0x76),
+                    0x1D44A => array(0x77), 0x1D44B => array(0x78), 0x1D44C => array(0x79),
+                    0x1D44D => array(0x7A), 0x1D468 => array(0x61), 0x1D469 => array(0x62),
+                    0x1D46A => array(0x63), 0x1D46B => array(0x64), 0x1D46C => array(0x65),
+                    0x1D46D => array(0x66), 0x1D46E => array(0x67), 0x1D46F => array(0x68),
+                    0x1D470 => array(0x69), 0x1D471 => array(0x6A), 0x1D472 => array(0x6B),
+                    0x1D473 => array(0x6C), 0x1D474 => array(0x6D), 0x1D475 => array(0x6E),
+                    0x1D476 => array(0x6F), 0x1D477 => array(0x70), 0x1D478 => array(0x71),
+                    0x1D479 => array(0x72), 0x1D47A => array(0x73), 0x1D47B => array(0x74),
+                    0x1D47C => array(0x75), 0x1D47D => array(0x76), 0x1D47E => array(0x77),
+                    0x1D47F => array(0x78), 0x1D480 => array(0x79), 0x1D481 => array(0x7A),
+                    0x1D49C => array(0x61), 0x1D49E => array(0x63), 0x1D49F => array(0x64),
+                    0x1D4A2 => array(0x67), 0x1D4A5 => array(0x6A), 0x1D4A6 => array(0x6B),
+                    0x1D4A9 => array(0x6E), 0x1D4AA => array(0x6F), 0x1D4AB => array(0x70),
+                    0x1D4AC => array(0x71), 0x1D4AE => array(0x73), 0x1D4AF => array(0x74),
+                    0x1D4B0 => array(0x75), 0x1D4B1 => array(0x76), 0x1D4B2 => array(0x77),
+                    0x1D4B3 => array(0x78), 0x1D4B4 => array(0x79), 0x1D4B5 => array(0x7A),
+                    0x1D4D0 => array(0x61), 0x1D4D1 => array(0x62), 0x1D4D2 => array(0x63),
+                    0x1D4D3 => array(0x64), 0x1D4D4 => array(0x65), 0x1D4D5 => array(0x66),
+                    0x1D4D6 => array(0x67), 0x1D4D7 => array(0x68), 0x1D4D8 => array(0x69),
+                    0x1D4D9 => array(0x6A), 0x1D4DA => array(0x6B), 0x1D4DB => array(0x6C),
+                    0x1D4DC => array(0x6D), 0x1D4DD => array(0x6E), 0x1D4DE => array(0x6F),
+                    0x1D4DF => array(0x70), 0x1D4E0 => array(0x71), 0x1D4E1 => array(0x72),
+                    0x1D4E2 => array(0x73), 0x1D4E3 => array(0x74), 0x1D4E4 => array(0x75),
+                    0x1D4E5 => array(0x76), 0x1D4E6 => array(0x77), 0x1D4E7 => array(0x78),
+                    0x1D4E8 => array(0x79), 0x1D4E9 => array(0x7A), 0x1D504 => array(0x61),
+                    0x1D505 => array(0x62), 0x1D507 => array(0x64), 0x1D508 => array(0x65),
+                    0x1D509 => array(0x66), 0x1D50A => array(0x67), 0x1D50D => array(0x6A),
+                    0x1D50E => array(0x6B), 0x1D50F => array(0x6C), 0x1D510 => array(0x6D),
+                    0x1D511 => array(0x6E), 0x1D512 => array(0x6F), 0x1D513 => array(0x70),
+                    0x1D514 => array(0x71), 0x1D516 => array(0x73), 0x1D517 => array(0x74),
+                    0x1D518 => array(0x75), 0x1D519 => array(0x76), 0x1D51A => array(0x77),
+                    0x1D51B => array(0x78), 0x1D51C => array(0x79), 0x1D538 => array(0x61),
+                    0x1D539 => array(0x62), 0x1D53B => array(0x64), 0x1D53C => array(0x65),
+                    0x1D53D => array(0x66), 0x1D53E => array(0x67), 0x1D540 => array(0x69),
+                    0x1D541 => array(0x6A), 0x1D542 => array(0x6B), 0x1D543 => array(0x6C),
+                    0x1D544 => array(0x6D), 0x1D546 => array(0x6F), 0x1D54A => array(0x73),
+                    0x1D54B => array(0x74), 0x1D54C => array(0x75), 0x1D54D => array(0x76),
+                    0x1D54E => array(0x77), 0x1D54F => array(0x78), 0x1D550 => array(0x79),
+                    0x1D56C => array(0x61), 0x1D56D => array(0x62), 0x1D56E => array(0x63),
+                    0x1D56F => array(0x64), 0x1D570 => array(0x65), 0x1D571 => array(0x66),
+                    0x1D572 => array(0x67), 0x1D573 => array(0x68), 0x1D574 => array(0x69),
+                    0x1D575 => array(0x6A), 0x1D576 => array(0x6B), 0x1D577 => array(0x6C),
+                    0x1D578 => array(0x6D), 0x1D579 => array(0x6E), 0x1D57A => array(0x6F),
+                    0x1D57B => array(0x70), 0x1D57C => array(0x71), 0x1D57D => array(0x72),
+                    0x1D57E => array(0x73), 0x1D57F => array(0x74), 0x1D580 => array(0x75),
+                    0x1D581 => array(0x76), 0x1D582 => array(0x77), 0x1D583 => array(0x78),
+                    0x1D584 => array(0x79), 0x1D585 => array(0x7A), 0x1D5A0 => array(0x61),
+                    0x1D5A1 => array(0x62), 0x1D5A2 => array(0x63), 0x1D5A3 => array(0x64),
+                    0x1D5A4 => array(0x65), 0x1D5A5 => array(0x66), 0x1D5A6 => array(0x67),
+                    0x1D5A7 => array(0x68), 0x1D5A8 => array(0x69), 0x1D5A9 => array(0x6A),
+                    0x1D5AA => array(0x6B), 0x1D5AB => array(0x6C), 0x1D5AC => array(0x6D),
+                    0x1D5AD => array(0x6E), 0x1D5AE => array(0x6F), 0x1D5AF => array(0x70),
+                    0x1D5B0 => array(0x71), 0x1D5B1 => array(0x72), 0x1D5B2 => array(0x73),
+                    0x1D5B3 => array(0x74), 0x1D5B4 => array(0x75), 0x1D5B5 => array(0x76),
+                    0x1D5B6 => array(0x77), 0x1D5B7 => array(0x78), 0x1D5B8 => array(0x79),
+                    0x1D5B9 => array(0x7A), 0x1D5D4 => array(0x61), 0x1D5D5 => array(0x62),
+                    0x1D5D6 => array(0x63), 0x1D5D7 => array(0x64), 0x1D5D8 => array(0x65),
+                    0x1D5D9 => array(0x66), 0x1D5DA => array(0x67), 0x1D5DB => array(0x68),
+                    0x1D5DC => array(0x69), 0x1D5DD => array(0x6A), 0x1D5DE => array(0x6B),
+                    0x1D5DF => array(0x6C), 0x1D5E0 => array(0x6D), 0x1D5E1 => array(0x6E),
+                    0x1D5E2 => array(0x6F), 0x1D5E3 => array(0x70), 0x1D5E4 => array(0x71),
+                    0x1D5E5 => array(0x72), 0x1D5E6 => array(0x73), 0x1D5E7 => array(0x74),
+                    0x1D5E8 => array(0x75), 0x1D5E9 => array(0x76), 0x1D5EA => array(0x77),
+                    0x1D5EB => array(0x78), 0x1D5EC => array(0x79), 0x1D5ED => array(0x7A),
+                    0x1D608 => array(0x61), 0x1D609 => array(0x62), 0x1D60A => array(0x63),
+                    0x1D60B => array(0x64), 0x1D60C => array(0x65), 0x1D60D => array(0x66),
+                    0x1D60E => array(0x67), 0x1D60F => array(0x68), 0x1D610 => array(0x69),
+                    0x1D611 => array(0x6A), 0x1D612 => array(0x6B), 0x1D613 => array(0x6C),
+                    0x1D614 => array(0x6D), 0x1D615 => array(0x6E), 0x1D616 => array(0x6F),
+                    0x1D617 => array(0x70), 0x1D618 => array(0x71), 0x1D619 => array(0x72),
+                    0x1D61A => array(0x73), 0x1D61B => array(0x74), 0x1D61C => array(0x75),
+                    0x1D61D => array(0x76), 0x1D61E => array(0x77), 0x1D61F => array(0x78),
+                    0x1D620 => array(0x79), 0x1D621 => array(0x7A), 0x1D63C => array(0x61),
+                    0x1D63D => array(0x62), 0x1D63E => array(0x63), 0x1D63F => array(0x64),
+                    0x1D640 => array(0x65), 0x1D641 => array(0x66), 0x1D642 => array(0x67),
+                    0x1D643 => array(0x68), 0x1D644 => array(0x69), 0x1D645 => array(0x6A),
+                    0x1D646 => array(0x6B), 0x1D647 => array(0x6C), 0x1D648 => array(0x6D),
+                    0x1D649 => array(0x6E), 0x1D64A => array(0x6F), 0x1D64B => array(0x70),
+                    0x1D64C => array(0x71), 0x1D64D => array(0x72), 0x1D64E => array(0x73),
+                    0x1D64F => array(0x74), 0x1D650 => array(0x75), 0x1D651 => array(0x76),
+                    0x1D652 => array(0x77), 0x1D653 => array(0x78), 0x1D654 => array(0x79),
+                    0x1D655 => array(0x7A), 0x1D670 => array(0x61), 0x1D671 => array(0x62),
+                    0x1D672 => array(0x63), 0x1D673 => array(0x64), 0x1D674 => array(0x65),
+                    0x1D675 => array(0x66), 0x1D676 => array(0x67), 0x1D677 => array(0x68),
+                    0x1D678 => array(0x69), 0x1D679 => array(0x6A), 0x1D67A => array(0x6B),
+                    0x1D67B => array(0x6C), 0x1D67C => array(0x6D), 0x1D67D => array(0x6E),
+                    0x1D67E => array(0x6F), 0x1D67F => array(0x70), 0x1D680 => array(0x71),
+                    0x1D681 => array(0x72), 0x1D682 => array(0x73), 0x1D683 => array(0x74),
+                    0x1D684 => array(0x75), 0x1D685 => array(0x76), 0x1D686 => array(0x77),
+                    0x1D687 => array(0x78), 0x1D688 => array(0x79), 0x1D689 => array(0x7A),
+                    0x1D6A8 => array(0x3B1), 0x1D6A9 => array(0x3B2), 0x1D6AA => array(0x3B3),
+                    0x1D6AB => array(0x3B4), 0x1D6AC => array(0x3B5), 0x1D6AD => array(0x3B6),
+                    0x1D6AE => array(0x3B7), 0x1D6AF => array(0x3B8), 0x1D6B0 => array(0x3B9),
+                    0x1D6B1 => array(0x3BA), 0x1D6B2 => array(0x3BB), 0x1D6B3 => array(0x3BC),
+                    0x1D6B4 => array(0x3BD), 0x1D6B5 => array(0x3BE), 0x1D6B6 => array(0x3BF),
+                    0x1D6B7 => array(0x3C0), 0x1D6B8 => array(0x3C1), 0x1D6B9 => array(0x3B8),
+                    0x1D6BA => array(0x3C3), 0x1D6BB => array(0x3C4), 0x1D6BC => array(0x3C5),
+                    0x1D6BD => array(0x3C6), 0x1D6BE => array(0x3C7), 0x1D6BF => array(0x3C8),
+                    0x1D6C0 => array(0x3C9), 0x1D6D3 => array(0x3C3), 0x1D6E2 => array(0x3B1),
+                    0x1D6E3 => array(0x3B2), 0x1D6E4 => array(0x3B3), 0x1D6E5 => array(0x3B4),
+                    0x1D6E6 => array(0x3B5), 0x1D6E7 => array(0x3B6), 0x1D6E8 => array(0x3B7),
+                    0x1D6E9 => array(0x3B8), 0x1D6EA => array(0x3B9), 0x1D6EB => array(0x3BA),
+                    0x1D6EC => array(0x3BB), 0x1D6ED => array(0x3BC), 0x1D6EE => array(0x3BD),
+                    0x1D6EF => array(0x3BE), 0x1D6F0 => array(0x3BF), 0x1D6F1 => array(0x3C0),
+                    0x1D6F2 => array(0x3C1), 0x1D6F3 => array(0x3B8), 0x1D6F4 => array(0x3C3),
+                    0x1D6F5 => array(0x3C4), 0x1D6F6 => array(0x3C5), 0x1D6F7 => array(0x3C6),
+                    0x1D6F8 => array(0x3C7), 0x1D6F9 => array(0x3C8), 0x1D6FA => array(0x3C9),
+                    0x1D70D => array(0x3C3), 0x1D71C => array(0x3B1), 0x1D71D => array(0x3B2),
+                    0x1D71E => array(0x3B3), 0x1D71F => array(0x3B4), 0x1D720 => array(0x3B5),
+                    0x1D721 => array(0x3B6), 0x1D722 => array(0x3B7), 0x1D723 => array(0x3B8),
+                    0x1D724 => array(0x3B9), 0x1D725 => array(0x3BA), 0x1D726 => array(0x3BB),
+                    0x1D727 => array(0x3BC), 0x1D728 => array(0x3BD), 0x1D729 => array(0x3BE),
+                    0x1D72A => array(0x3BF), 0x1D72B => array(0x3C0), 0x1D72C => array(0x3C1),
+                    0x1D72D => array(0x3B8), 0x1D72E => array(0x3C3), 0x1D72F => array(0x3C4),
+                    0x1D730 => array(0x3C5), 0x1D731 => array(0x3C6), 0x1D732 => array(0x3C7),
+                    0x1D733 => array(0x3C8), 0x1D734 => array(0x3C9), 0x1D747 => array(0x3C3),
+                    0x1D756 => array(0x3B1), 0x1D757 => array(0x3B2), 0x1D758 => array(0x3B3),
+                    0x1D759 => array(0x3B4), 0x1D75A => array(0x3B5), 0x1D75B => array(0x3B6),
+                    0x1D75C => array(0x3B7), 0x1D75D => array(0x3B8), 0x1D75E => array(0x3B9),
+                    0x1D75F => array(0x3BA), 0x1D760 => array(0x3BB), 0x1D761 => array(0x3BC),
+                    0x1D762 => array(0x3BD), 0x1D763 => array(0x3BE), 0x1D764 => array(0x3BF),
+                    0x1D765 => array(0x3C0), 0x1D766 => array(0x3C1), 0x1D767 => array(0x3B8),
+                    0x1D768 => array(0x3C3), 0x1D769 => array(0x3C4), 0x1D76A => array(0x3C5),
+                    0x1D76B => array(0x3C6), 0x1D76C => array(0x3C7), 0x1D76D => array(0x3C8),
+                    0x1D76E => array(0x3C9), 0x1D781 => array(0x3C3), 0x1D790 => array(0x3B1),
+                    0x1D791 => array(0x3B2), 0x1D792 => array(0x3B3), 0x1D793 => array(0x3B4),
+                    0x1D794 => array(0x3B5), 0x1D795 => array(0x3B6), 0x1D796 => array(0x3B7),
+                    0x1D797 => array(0x3B8), 0x1D798 => array(0x3B9), 0x1D799 => array(0x3BA),
+                    0x1D79A => array(0x3BB), 0x1D79B => array(0x3BC), 0x1D79C => array(0x3BD),
+                    0x1D79D => array(0x3BE), 0x1D79E => array(0x3BF), 0x1D79F => array(0x3C0),
+                    0x1D7A0 => array(0x3C1), 0x1D7A1 => array(0x3B8), 0x1D7A2 => array(0x3C3),
+                    0x1D7A3 => array(0x3C4), 0x1D7A4 => array(0x3C5), 0x1D7A5 => array(0x3C6),
+                    0x1D7A6 => array(0x3C7), 0x1D7A7 => array(0x3C8), 0x1D7A8 => array(0x3C9),
+                    0x1D7BB => array(0x3C3), 0x3F9 => array(0x3C3), 0x1D2C => array(0x61),
+                    0x1D2D => array(0xE6), 0x1D2E => array(0x62), 0x1D30 => array(0x64),
+                    0x1D31 => array(0x65), 0x1D32 => array(0x1DD), 0x1D33 => array(0x67),
+                    0x1D34 => array(0x68), 0x1D35 => array(0x69), 0x1D36 => array(0x6A),
+                    0x1D37 => array(0x6B), 0x1D38 => array(0x6C), 0x1D39 => array(0x6D),
+                    0x1D3A => array(0x6E), 0x1D3C => array(0x6F), 0x1D3D => array(0x223),
+                    0x1D3E => array(0x70), 0x1D3F => array(0x72), 0x1D40 => array(0x74),
+                    0x1D41 => array(0x75), 0x1D42 => array(0x77), 0x213B => array(0x66, 0x61, 0x78),
+                    0x3250 => array(0x70, 0x74, 0x65), 0x32CC => array(0x68, 0x67),
+                    0x32CE => array(0x65, 0x76), 0x32CF => array(0x6C, 0x74, 0x64),
+                    0x337A => array(0x69, 0x75), 0x33DE => array(0x76, 0x2215, 0x6D),
+                    0x33DF => array(0x61, 0x2215, 0x6D)
+            ),
+            'replacemaps' => array(0x41 => array(0x61), 0x42 => array(0x62), 0x43 => array(0x63),
+                    0x44 => array(0x64), 0x45 => array(0x65), 0x46 => array(0x66),
+                    0x47 => array(0x67), 0x48 => array(0x68), 0x49 => array(0x69),
+                    0x4A => array(0x6A), 0x4B => array(0x6B), 0x4C => array(0x6C),
+                    0x4D => array(0x6D), 0x4E => array(0x6E), 0x4F => array(0x6F),
+                    0x50 => array(0x70), 0x51 => array(0x71), 0x52 => array(0x72),
+                    0x53 => array(0x73), 0x54 => array(0x74), 0x55 => array(0x75),
+                    0x56 => array(0x76), 0x57 => array(0x77), 0x58 => array(0x78),
+                    0x59 => array(0x79), 0x5A => array(0x7A), 0xAA => array(0x61),
+                    0xB2 => array(0x32), 0xB3 => array(0x33), 0xB5 => array(0x3BC),
+                    0xB9 => array(0x31), 0xBA => array(0x6F), 0xBC => array(0x31, 0x2044, 0x34),
+                    0xBD => array(0x31, 0x2044, 0x32), 0xBE => array(0x33, 0x2044, 0x34), 0xC0 => array(0xE0),
+                    0xC1 => array(0xE1), 0xC2 => array(0xE2), 0xC3 => array(0xE3),
+                    0xC4 => array(0xE4), 0xC5 => array(0xE5), 0xC6 => array(0xE6),
+                    0xC7 => array(0xE7), 0xC8 => array(0xE8), 0xC9 => array(0xE9),
+                    0xCA => array(0xEA), 0xCB => array(0xEB), 0xCC => array(0xEC),
+                    0xCD => array(0xED), 0xCE => array(0xEE), 0xCF => array(0xEF),
+                    0xD0 => array(0xF0), 0xD1 => array(0xF1), 0xD2 => array(0xF2),
+                    0xD3 => array(0xF3), 0xD4 => array(0xF4), 0xD5 => array(0xF5),
+                    0xD6 => array(0xF6), 0xD8 => array(0xF8), 0xD9 => array(0xF9),
+                    0xDA => array(0xFA), 0xDB => array(0xFB), 0xDC => array(0xFC),
+                    0xDD => array(0xFD), 0xDE => array(0xFE), 0x100 => array(0x101),
+                    0x102 => array(0x103), 0x104 => array(0x105), 0x106 => array(0x107),
+                    0x108 => array(0x109), 0x10A => array(0x10B), 0x10C => array(0x10D),
+                    0x10E => array(0x10F), 0x110 => array(0x111), 0x112 => array(0x113),
+                    0x114 => array(0x115), 0x116 => array(0x117), 0x118 => array(0x119),
+                    0x11A => array(0x11B), 0x11C => array(0x11D), 0x11E => array(0x11F),
+                    0x120 => array(0x121), 0x122 => array(0x123), 0x124 => array(0x125),
+                    0x126 => array(0x127), 0x128 => array(0x129), 0x12A => array(0x12B),
+                    0x12C => array(0x12D), 0x12E => array(0x12F), 0x130 => array(0x69, 0x307),
+                    0x132 => array(0x69, 0x6A), 0x133 => array(0x69, 0x6A), 0x134 => array(0x135),
+                    0x136 => array(0x137), 0x139 => array(0x13A), 0x13B => array(0x13C),
+                    0x13D => array(0x13E), 0x13F => array(0x6C, 0xB7), 0x140 => array(0x6C, 0xB7),
+                    0x141 => array(0x142), 0x143 => array(0x144), 0x145 => array(0x146),
+                    0x147 => array(0x148), 0x149 => array(0x2BC, 0x6E), 0x14A => array(0x14B),
+                    0x14C => array(0x14D), 0x14E => array(0x14F), 0x150 => array(0x151),
+                    0x152 => array(0x153), 0x154 => array(0x155), 0x156 => array(0x157),
+                    0x158 => array(0x159), 0x15A => array(0x15B), 0x15C => array(0x15D),
+                    0x15E => array(0x15F), 0x160 => array(0x161), 0x162 => array(0x163),
+                    0x164 => array(0x165), 0x166 => array(0x167), 0x168 => array(0x169),
+                    0x16A => array(0x16B), 0x16C => array(0x16D), 0x16E => array(0x16F),
+                    0x170 => array(0x171), 0x172 => array(0x173), 0x174 => array(0x175),
+                    0x176 => array(0x177), 0x178 => array(0xFF), 0x179 => array(0x17A),
+                    0x17B => array(0x17C), 0x17D => array(0x17E), 0x17F => array(0x73),
+                    0x181 => array(0x253), 0x182 => array(0x183), 0x184 => array(0x185),
+                    0x186 => array(0x254), 0x187 => array(0x188), 0x189 => array(0x256),
+                    0x18A => array(0x257), 0x18B => array(0x18C), 0x18E => array(0x1DD),
+                    0x18F => array(0x259), 0x190 => array(0x25B), 0x191 => array(0x192),
+                    0x193 => array(0x260), 0x194 => array(0x263), 0x196 => array(0x269),
+                    0x197 => array(0x268), 0x198 => array(0x199), 0x19C => array(0x26F),
+                    0x19D => array(0x272), 0x19F => array(0x275), 0x1A0 => array(0x1A1),
+                    0x1A2 => array(0x1A3), 0x1A4 => array(0x1A5), 0x1A6 => array(0x280),
+                    0x1A7 => array(0x1A8), 0x1A9 => array(0x283), 0x1AC => array(0x1AD),
+                    0x1AE => array(0x288), 0x1AF => array(0x1B0), 0x1B1 => array(0x28A),
+                    0x1B2 => array(0x28B), 0x1B3 => array(0x1B4), 0x1B5 => array(0x1B6),
+                    0x1B7 => array(0x292), 0x1B8 => array(0x1B9), 0x1BC => array(0x1BD),
+                    0x1C4 => array(0x64, 0x17E), 0x1C5 => array(0x64, 0x17E), 0x1C6 => array(0x64, 0x17E),
+                    0x1C7 => array(0x6C, 0x6A), 0x1C8 => array(0x6C, 0x6A), 0x1C9 => array(0x6C, 0x6A),
+                    0x1CA => array(0x6E, 0x6A), 0x1CB => array(0x6E, 0x6A), 0x1CC => array(0x6E, 0x6A),
+                    0x1CD => array(0x1CE), 0x1CF => array(0x1D0), 0x1D1 => array(0x1D2),
+                    0x1D3 => array(0x1D4), 0x1D5 => array(0x1D6), 0x1D7 => array(0x1D8),
+                    0x1D9 => array(0x1DA), 0x1DB => array(0x1DC), 0x1DE => array(0x1DF),
+                    0x1E0 => array(0x1E1), 0x1E2 => array(0x1E3), 0x1E4 => array(0x1E5),
+                    0x1E6 => array(0x1E7), 0x1E8 => array(0x1E9), 0x1EA => array(0x1EB),
+                    0x1EC => array(0x1ED), 0x1EE => array(0x1EF), 0x1F1 => array(0x64, 0x7A),
+                    0x1F2 => array(0x64, 0x7A), 0x1F3 => array(0x64, 0x7A), 0x1F4 => array(0x1F5),
+                    0x1F6 => array(0x195), 0x1F7 => array(0x1BF), 0x1F8 => array(0x1F9),
+                    0x1FA => array(0x1FB), 0x1FC => array(0x1FD), 0x1FE => array(0x1FF),
+                    0x200 => array(0x201), 0x202 => array(0x203), 0x204 => array(0x205),
+                    0x206 => array(0x207), 0x208 => array(0x209), 0x20A => array(0x20B),
+                    0x20C => array(0x20D), 0x20E => array(0x20F), 0x210 => array(0x211),
+                    0x212 => array(0x213), 0x214 => array(0x215), 0x216 => array(0x217),
+                    0x218 => array(0x219), 0x21A => array(0x21B), 0x21C => array(0x21D),
+                    0x21E => array(0x21F), 0x220 => array(0x19E), 0x222 => array(0x223),
+                    0x224 => array(0x225), 0x226 => array(0x227), 0x228 => array(0x229),
+                    0x22A => array(0x22B), 0x22C => array(0x22D), 0x22E => array(0x22F),
+                    0x230 => array(0x231), 0x232 => array(0x233), 0x23A => array(0x2C65),
+                    0x23B => array(0x23C), 0x23D => array(0x19A), 0x23E => array(0x2C66),
+                    0x241 => array(0x242), 0x243 => array(0x180), 0x244 => array(0x289),
+                    0x245 => array(0x28C), 0x246 => array(0x247), 0x248 => array(0x249),
+                    0x24A => array(0x24B), 0x24C => array(0x24D), 0x24E => array(0x24F),
+                    0x2B0 => array(0x68), 0x2B1 => array(0x266), 0x2B2 => array(0x6A),
+                    0x2B3 => array(0x72), 0x2B4 => array(0x279), 0x2B5 => array(0x27B),
+                    0x2B6 => array(0x281), 0x2B7 => array(0x77), 0x2B8 => array(0x79),
+                    0x2E0 => array(0x263), 0x2E1 => array(0x6C), 0x2E2 => array(0x73),
+                    0x2E3 => array(0x78), 0x2E4 => array(0x295), 0x340 => array(0x300),
+                    0x341 => array(0x301), 0x343 => array(0x313), 0x344 => array(0x308, 0x301),
+                    0x345 => array(0x3B9), 0x370 => array(0x371), 0x372 => array(0x373),
+                    0x374 => array(0x2B9), 0x376 => array(0x377), 0x37F => array(0x3F3),
+                    0x386 => array(0x3AC), 0x387 => array(0xB7), 0x388 => array(0x3AD),
+                    0x389 => array(0x3AE), 0x38A => array(0x3AF), 0x38C => array(0x3CC),
+                    0x38E => array(0x3CD), 0x38F => array(0x3CE), 0x391 => array(0x3B1),
+                    0x392 => array(0x3B2), 0x393 => array(0x3B3), 0x394 => array(0x3B4),
+                    0x395 => array(0x3B5), 0x396 => array(0x3B6), 0x397 => array(0x3B7),
+                    0x398 => array(0x3B8), 0x399 => array(0x3B9), 0x39A => array(0x3BA),
+                    0x39B => array(0x3BB), 0x39C => array(0x3BC), 0x39D => array(0x3BD),
+                    0x39E => array(0x3BE), 0x39F => array(0x3BF), 0x3A0 => array(0x3C0),
+                    0x3A1 => array(0x3C1), 0x3A3 => array(0x3C3), 0x3A4 => array(0x3C4),
+                    0x3A5 => array(0x3C5), 0x3A6 => array(0x3C6), 0x3A7 => array(0x3C7),
+                    0x3A8 => array(0x3C8), 0x3A9 => array(0x3C9), 0x3AA => array(0x3CA),
+                    0x3AB => array(0x3CB), 0x3CF => array(0x3D7), 0x3D0 => array(0x3B2),
+                    0x3D1 => array(0x3B8), 0x3D2 => array(0x3C5), 0x3D3 => array(0x3CD),
+                    0x3D4 => array(0x3CB), 0x3D5 => array(0x3C6), 0x3D6 => array(0x3C0),
+                    0x3D8 => array(0x3D9), 0x3DA => array(0x3DB), 0x3DC => array(0x3DD),
+                    0x3DE => array(0x3DF), 0x3E0 => array(0x3E1), 0x3E2 => array(0x3E3),
+                    0x3E4 => array(0x3E5), 0x3E6 => array(0x3E7), 0x3E8 => array(0x3E9),
+                    0x3EA => array(0x3EB), 0x3EC => array(0x3ED), 0x3EE => array(0x3EF),
+                    0x3F0 => array(0x3BA), 0x3F1 => array(0x3C1), 0x3F2 => array(0x3C3),
+                    0x3F4 => array(0x3B8), 0x3F5 => array(0x3B5), 0x3F7 => array(0x3F8),
+                    0x3F9 => array(0x3C3), 0x3FA => array(0x3FB), 0x3FD => array(0x37B),
+                    0x3FE => array(0x37C), 0x3FF => array(0x37D), 0x400 => array(0x450),
+                    0x401 => array(0x451), 0x402 => array(0x452), 0x403 => array(0x453),
+                    0x404 => array(0x454), 0x405 => array(0x455), 0x406 => array(0x456),
+                    0x407 => array(0x457), 0x408 => array(0x458), 0x409 => array(0x459),
+                    0x40A => array(0x45A), 0x40B => array(0x45B), 0x40C => array(0x45C),
+                    0x40D => array(0x45D), 0x40E => array(0x45E), 0x40F => array(0x45F),
+                    0x410 => array(0x430), 0x411 => array(0x431), 0x412 => array(0x432),
+                    0x413 => array(0x433), 0x414 => array(0x434), 0x415 => array(0x435),
+                    0x416 => array(0x436), 0x417 => array(0x437), 0x418 => array(0x438),
+                    0x419 => array(0x439), 0x41A => array(0x43A), 0x41B => array(0x43B),
+                    0x41C => array(0x43C), 0x41D => array(0x43D), 0x41E => array(0x43E),
+                    0x41F => array(0x43F), 0x420 => array(0x440), 0x421 => array(0x441),
+                    0x422 => array(0x442), 0x423 => array(0x443), 0x424 => array(0x444),
+                    0x425 => array(0x445), 0x426 => array(0x446), 0x427 => array(0x447),
+                    0x428 => array(0x448), 0x429 => array(0x449), 0x42A => array(0x44A),
+                    0x42B => array(0x44B), 0x42C => array(0x44C), 0x42D => array(0x44D),
+                    0x42E => array(0x44E), 0x42F => array(0x44F), 0x460 => array(0x461),
+                    0x462 => array(0x463), 0x464 => array(0x465), 0x466 => array(0x467),
+                    0x468 => array(0x469), 0x46A => array(0x46B), 0x46C => array(0x46D),
+                    0x46E => array(0x46F), 0x470 => array(0x471), 0x472 => array(0x473),
+                    0x474 => array(0x475), 0x476 => array(0x477), 0x478 => array(0x479),
+                    0x47A => array(0x47B), 0x47C => array(0x47D), 0x47E => array(0x47F),
+                    0x480 => array(0x481), 0x48A => array(0x48B), 0x48C => array(0x48D),
+                    0x48E => array(0x48F), 0x490 => array(0x491), 0x492 => array(0x493),
+                    0x494 => array(0x495), 0x496 => array(0x497), 0x498 => array(0x499),
+                    0x49A => array(0x49B), 0x49C => array(0x49D), 0x49E => array(0x49F),
+                    0x4A0 => array(0x4A1), 0x4A2 => array(0x4A3), 0x4A4 => array(0x4A5),
+                    0x4A6 => array(0x4A7), 0x4A8 => array(0x4A9), 0x4AA => array(0x4AB),
+                    0x4AC => array(0x4AD), 0x4AE => array(0x4AF), 0x4B0 => array(0x4B1),
+                    0x4B2 => array(0x4B3), 0x4B4 => array(0x4B5), 0x4B6 => array(0x4B7),
+                    0x4B8 => array(0x4B9), 0x4BA => array(0x4BB), 0x4BC => array(0x4BD),
+                    0x4BE => array(0x4BF), 0x4C1 => array(0x4C2), 0x4C3 => array(0x4C4),
+                    0x4C5 => array(0x4C6), 0x4C7 => array(0x4C8), 0x4C9 => array(0x4CA),
+                    0x4CB => array(0x4CC), 0x4CD => array(0x4CE), 0x4D0 => array(0x4D1),
+                    0x4D2 => array(0x4D3), 0x4D4 => array(0x4D5), 0x4D6 => array(0x4D7),
+                    0x4D8 => array(0x4D9), 0x4DA => array(0x4DB), 0x4DC => array(0x4DD),
+                    0x4DE => array(0x4DF), 0x4E0 => array(0x4E1), 0x4E2 => array(0x4E3),
+                    0x4E4 => array(0x4E5), 0x4E6 => array(0x4E7), 0x4E8 => array(0x4E9),
+                    0x4EA => array(0x4EB), 0x4EC => array(0x4ED), 0x4EE => array(0x4EF),
+                    0x4F0 => array(0x4F1), 0x4F2 => array(0x4F3), 0x4F4 => array(0x4F5),
+                    0x4F6 => array(0x4F7), 0x4F8 => array(0x4F9), 0x4FA => array(0x4FB),
+                    0x4FC => array(0x4FD), 0x4FE => array(0x4FF), 0x500 => array(0x501),
+                    0x502 => array(0x503), 0x504 => array(0x505), 0x506 => array(0x507),
+                    0x508 => array(0x509), 0x50A => array(0x50B), 0x50C => array(0x50D),
+                    0x50E => array(0x50F), 0x510 => array(0x511), 0x512 => array(0x513),
+                    0x514 => array(0x515), 0x516 => array(0x517), 0x518 => array(0x519),
+                    0x51A => array(0x51B), 0x51C => array(0x51D), 0x51E => array(0x51F),
+                    0x520 => array(0x521), 0x522 => array(0x523), 0x524 => array(0x525),
+                    0x526 => array(0x527), 0x528 => array(0x529), 0x52A => array(0x52B),
+                    0x52C => array(0x52D), 0x52E => array(0x52F), 0x531 => array(0x561),
+                    0x532 => array(0x562), 0x533 => array(0x563), 0x534 => array(0x564),
+                    0x535 => array(0x565), 0x536 => array(0x566), 0x537 => array(0x567),
+                    0x538 => array(0x568), 0x539 => array(0x569), 0x53A => array(0x56A),
+                    0x53B => array(0x56B), 0x53C => array(0x56C), 0x53D => array(0x56D),
+                    0x53E => array(0x56E), 0x53F => array(0x56F), 0x540 => array(0x570),
+                    0x541 => array(0x571), 0x542 => array(0x572), 0x543 => array(0x573),
+                    0x544 => array(0x574), 0x545 => array(0x575), 0x546 => array(0x576),
+                    0x547 => array(0x577), 0x548 => array(0x578), 0x549 => array(0x579),
+                    0x54A => array(0x57A), 0x54B => array(0x57B), 0x54C => array(0x57C),
+                    0x54D => array(0x57D), 0x54E => array(0x57E), 0x54F => array(0x57F),
+                    0x550 => array(0x580), 0x551 => array(0x581), 0x552 => array(0x582),
+                    0x553 => array(0x583), 0x554 => array(0x584), 0x555 => array(0x585),
+                    0x556 => array(0x586), 0x587 => array(0x565, 0x582), 0x675 => array(0x627, 0x674),
+                    0x676 => array(0x648, 0x674), 0x677 => array(0x6C7, 0x674), 0x678 => array(0x64A, 0x674),
+                    0x958 => array(0x915, 0x93C), 0x959 => array(0x916, 0x93C), 0x95A => array(0x917, 0x93C),
+                    0x95B => array(0x91C, 0x93C), 0x95C => array(0x921, 0x93C), 0x95D => array(0x922, 0x93C),
+                    0x95E => array(0x92B, 0x93C), 0x95F => array(0x92F, 0x93C), 0x9DC => array(0x9A1, 0x9BC),
+                    0x9DD => array(0x9A2, 0x9BC), 0x9DF => array(0x9AF, 0x9BC), 0xA33 => array(0xA32, 0xA3C),
+                    0xA36 => array(0xA38, 0xA3C), 0xA59 => array(0xA16, 0xA3C), 0xA5A => array(0xA17, 0xA3C),
+                    0xA5B => array(0xA1C, 0xA3C), 0xA5E => array(0xA2B, 0xA3C), 0xB5C => array(0xB21, 0xB3C),
+                    0xB5D => array(0xB22, 0xB3C), 0xE33 => array(0xE4D, 0xE32), 0xEB3 => array(0xECD, 0xEB2),
+                    0xEDC => array(0xEAB, 0xE99), 0xEDD => array(0xEAB, 0xEA1), 0xF0C => array(0xF0B),
+                    0xF43 => array(0xF42, 0xFB7), 0xF4D => array(0xF4C, 0xFB7), 0xF52 => array(0xF51, 0xFB7),
+                    0xF57 => array(0xF56, 0xFB7), 0xF5C => array(0xF5B, 0xFB7), 0xF69 => array(0xF40, 0xFB5),
+                    0xF73 => array(0xF71, 0xF72), 0xF75 => array(0xF71, 0xF74), 0xF76 => array(0xFB2, 0xF80),
+                    0xF77 => array(0xFB2, 0xF71, 0xF80), 0xF78 => array(0xFB3, 0xF80), 0xF79 => array(0xFB3, 0xF71, 0xF80),
+                    0xF81 => array(0xF71, 0xF80), 0xF93 => array(0xF92, 0xFB7), 0xF9D => array(0xF9C, 0xFB7),
+                    0xFA2 => array(0xFA1, 0xFB7), 0xFA7 => array(0xFA6, 0xFB7), 0xFAC => array(0xFAB, 0xFB7),
+                    0xFB9 => array(0xF90, 0xFB5), 0x10C7 => array(0x2D27), 0x10CD => array(0x2D2D),
+                    0x10FC => array(0x10DC), 0x1D2C => array(0x61), 0x1D2D => array(0xE6),
+                    0x1D2E => array(0x62), 0x1D30 => array(0x64), 0x1D31 => array(0x65),
+                    0x1D32 => array(0x1DD), 0x1D33 => array(0x67), 0x1D34 => array(0x68),
+                    0x1D35 => array(0x69), 0x1D36 => array(0x6A), 0x1D37 => array(0x6B),
+                    0x1D38 => array(0x6C), 0x1D39 => array(0x6D), 0x1D3A => array(0x6E),
+                    0x1D3C => array(0x6F), 0x1D3D => array(0x223), 0x1D3E => array(0x70),
+                    0x1D3F => array(0x72), 0x1D40 => array(0x74), 0x1D41 => array(0x75),
+                    0x1D42 => array(0x77), 0x1D43 => array(0x61), 0x1D44 => array(0x250),
+                    0x1D45 => array(0x251), 0x1D46 => array(0x1D02), 0x1D47 => array(0x62),
+                    0x1D48 => array(0x64), 0x1D49 => array(0x65), 0x1D4A => array(0x259),
+                    0x1D4B => array(0x25B), 0x1D4C => array(0x25C), 0x1D4D => array(0x67),
+                    0x1D4F => array(0x6B), 0x1D50 => array(0x6D), 0x1D51 => array(0x14B),
+                    0x1D52 => array(0x6F), 0x1D53 => array(0x254), 0x1D54 => array(0x1D16),
+                    0x1D55 => array(0x1D17), 0x1D56 => array(0x70), 0x1D57 => array(0x74),
+                    0x1D58 => array(0x75), 0x1D59 => array(0x1D1D), 0x1D5A => array(0x26F),
+                    0x1D5B => array(0x76), 0x1D5C => array(0x1D25), 0x1D5D => array(0x3B2),
+                    0x1D5E => array(0x3B3), 0x1D5F => array(0x3B4), 0x1D60 => array(0x3C6),
+                    0x1D61 => array(0x3C7), 0x1D62 => array(0x69), 0x1D63 => array(0x72),
+                    0x1D64 => array(0x75), 0x1D65 => array(0x76), 0x1D66 => array(0x3B2),
+                    0x1D67 => array(0x3B3), 0x1D68 => array(0x3C1), 0x1D69 => array(0x3C6),
+                    0x1D6A => array(0x3C7), 0x1D78 => array(0x43D), 0x1D9B => array(0x252),
+                    0x1D9C => array(0x63), 0x1D9D => array(0x255), 0x1D9E => array(0xF0),
+                    0x1D9F => array(0x25C), 0x1DA0 => array(0x66), 0x1DA1 => array(0x25F),
+                    0x1DA2 => array(0x261), 0x1DA3 => array(0x265), 0x1DA4 => array(0x268),
+                    0x1DA5 => array(0x269), 0x1DA6 => array(0x26A), 0x1DA7 => array(0x1D7B),
+                    0x1DA8 => array(0x29D), 0x1DA9 => array(0x26D), 0x1DAA => array(0x1D85),
+                    0x1DAB => array(0x29F), 0x1DAC => array(0x271), 0x1DAD => array(0x270),
+                    0x1DAE => array(0x272), 0x1DAF => array(0x273), 0x1DB0 => array(0x274),
+                    0x1DB1 => array(0x275), 0x1DB2 => array(0x278), 0x1DB3 => array(0x282),
+                    0x1DB4 => array(0x283), 0x1DB5 => array(0x1AB), 0x1DB6 => array(0x289),
+                    0x1DB7 => array(0x28A), 0x1DB8 => array(0x1D1C), 0x1DB9 => array(0x28B),
+                    0x1DBA => array(0x28C), 0x1DBB => array(0x7A), 0x1DBC => array(0x290),
+                    0x1DBD => array(0x291), 0x1DBE => array(0x292), 0x1DBF => array(0x3B8),
+                    0x1E00 => array(0x1E01), 0x1E02 => array(0x1E03), 0x1E04 => array(0x1E05),
+                    0x1E06 => array(0x1E07), 0x1E08 => array(0x1E09), 0x1E0A => array(0x1E0B),
+                    0x1E0C => array(0x1E0D), 0x1E0E => array(0x1E0F), 0x1E10 => array(0x1E11),
+                    0x1E12 => array(0x1E13), 0x1E14 => array(0x1E15), 0x1E16 => array(0x1E17),
+                    0x1E18 => array(0x1E19), 0x1E1A => array(0x1E1B), 0x1E1C => array(0x1E1D),
+                    0x1E1E => array(0x1E1F), 0x1E20 => array(0x1E21), 0x1E22 => array(0x1E23),
+                    0x1E24 => array(0x1E25), 0x1E26 => array(0x1E27), 0x1E28 => array(0x1E29),
+                    0x1E2A => array(0x1E2B), 0x1E2C => array(0x1E2D), 0x1E2E => array(0x1E2F),
+                    0x1E30 => array(0x1E31), 0x1E32 => array(0x1E33), 0x1E34 => array(0x1E35),
+                    0x1E36 => array(0x1E37), 0x1E38 => array(0x1E39), 0x1E3A => array(0x1E3B),
+                    0x1E3C => array(0x1E3D), 0x1E3E => array(0x1E3F), 0x1E40 => array(0x1E41),
+                    0x1E42 => array(0x1E43), 0x1E44 => array(0x1E45), 0x1E46 => array(0x1E47),
+                    0x1E48 => array(0x1E49), 0x1E4A => array(0x1E4B), 0x1E4C => array(0x1E4D),
+                    0x1E4E => array(0x1E4F), 0x1E50 => array(0x1E51), 0x1E52 => array(0x1E53),
+                    0x1E54 => array(0x1E55), 0x1E56 => array(0x1E57), 0x1E58 => array(0x1E59),
+                    0x1E5A => array(0x1E5B), 0x1E5C => array(0x1E5D), 0x1E5E => array(0x1E5F),
+                    0x1E60 => array(0x1E61), 0x1E62 => array(0x1E63), 0x1E64 => array(0x1E65),
+                    0x1E66 => array(0x1E67), 0x1E68 => array(0x1E69), 0x1E6A => array(0x1E6B),
+                    0x1E6C => array(0x1E6D), 0x1E6E => array(0x1E6F), 0x1E70 => array(0x1E71),
+                    0x1E72 => array(0x1E73), 0x1E74 => array(0x1E75), 0x1E76 => array(0x1E77),
+                    0x1E78 => array(0x1E79), 0x1E7A => array(0x1E7B), 0x1E7C => array(0x1E7D),
+                    0x1E7E => array(0x1E7F), 0x1E80 => array(0x1E81), 0x1E82 => array(0x1E83),
+                    0x1E84 => array(0x1E85), 0x1E86 => array(0x1E87), 0x1E88 => array(0x1E89),
+                    0x1E8A => array(0x1E8B), 0x1E8C => array(0x1E8D), 0x1E8E => array(0x1E8F),
+                    0x1E90 => array(0x1E91), 0x1E92 => array(0x1E93), 0x1E94 => array(0x1E95),
+                    0x1E9A => array(0x61, 0x2BE), 0x1E9B => array(0x1E61), 0x1E9E => array(0x73, 0x73),
+                    0x1EA0 => array(0x1EA1), 0x1EA2 => array(0x1EA3), 0x1EA4 => array(0x1EA5),
+                    0x1EA6 => array(0x1EA7), 0x1EA8 => array(0x1EA9), 0x1EAA => array(0x1EAB),
+                    0x1EAC => array(0x1EAD), 0x1EAE => array(0x1EAF), 0x1EB0 => array(0x1EB1),
+                    0x1EB2 => array(0x1EB3), 0x1EB4 => array(0x1EB5), 0x1EB6 => array(0x1EB7),
+                    0x1EB8 => array(0x1EB9), 0x1EBA => array(0x1EBB), 0x1EBC => array(0x1EBD),
+                    0x1EBE => array(0x1EBF), 0x1EC0 => array(0x1EC1), 0x1EC2 => array(0x1EC3),
+                    0x1EC4 => array(0x1EC5), 0x1EC6 => array(0x1EC7), 0x1EC8 => array(0x1EC9),
+                    0x1ECA => array(0x1ECB), 0x1ECC => array(0x1ECD), 0x1ECE => array(0x1ECF),
+                    0x1ED0 => array(0x1ED1), 0x1ED2 => array(0x1ED3), 0x1ED4 => array(0x1ED5),
+                    0x1ED6 => array(0x1ED7), 0x1ED8 => array(0x1ED9), 0x1EDA => array(0x1EDB),
+                    0x1EDC => array(0x1EDD), 0x1EDE => array(0x1EDF), 0x1EE0 => array(0x1EE1),
+                    0x1EE2 => array(0x1EE3), 0x1EE4 => array(0x1EE5), 0x1EE6 => array(0x1EE7),
+                    0x1EE8 => array(0x1EE9), 0x1EEA => array(0x1EEB), 0x1EEC => array(0x1EED),
+                    0x1EEE => array(0x1EEF), 0x1EF0 => array(0x1EF1), 0x1EF2 => array(0x1EF3),
+                    0x1EF4 => array(0x1EF5), 0x1EF6 => array(0x1EF7), 0x1EF8 => array(0x1EF9),
+                    0x1EFA => array(0x1EFB), 0x1EFC => array(0x1EFD), 0x1EFE => array(0x1EFF),
+                    0x1F08 => array(0x1F00), 0x1F09 => array(0x1F01), 0x1F0A => array(0x1F02),
+                    0x1F0B => array(0x1F03), 0x1F0C => array(0x1F04), 0x1F0D => array(0x1F05),
+                    0x1F0E => array(0x1F06), 0x1F0F => array(0x1F07), 0x1F18 => array(0x1F10),
+                    0x1F19 => array(0x1F11), 0x1F1A => array(0x1F12), 0x1F1B => array(0x1F13),
+                    0x1F1C => array(0x1F14), 0x1F1D => array(0x1F15), 0x1F28 => array(0x1F20),
+                    0x1F29 => array(0x1F21), 0x1F2A => array(0x1F22), 0x1F2B => array(0x1F23),
+                    0x1F2C => array(0x1F24), 0x1F2D => array(0x1F25), 0x1F2E => array(0x1F26),
+                    0x1F2F => array(0x1F27), 0x1F38 => array(0x1F30), 0x1F39 => array(0x1F31),
+                    0x1F3A => array(0x1F32), 0x1F3B => array(0x1F33), 0x1F3C => array(0x1F34),
+                    0x1F3D => array(0x1F35), 0x1F3E => array(0x1F36), 0x1F3F => array(0x1F37),
+                    0x1F48 => array(0x1F40), 0x1F49 => array(0x1F41), 0x1F4A => array(0x1F42),
+                    0x1F4B => array(0x1F43), 0x1F4C => array(0x1F44), 0x1F4D => array(0x1F45),
+                    0x1F59 => array(0x1F51), 0x1F5B => array(0x1F53), 0x1F5D => array(0x1F55),
+                    0x1F5F => array(0x1F57), 0x1F68 => array(0x1F60), 0x1F69 => array(0x1F61),
+                    0x1F6A => array(0x1F62), 0x1F6B => array(0x1F63), 0x1F6C => array(0x1F64),
+                    0x1F6D => array(0x1F65), 0x1F6E => array(0x1F66), 0x1F6F => array(0x1F67),
+                    0x1F71 => array(0x3AC), 0x1F73 => array(0x3AD), 0x1F75 => array(0x3AE),
+                    0x1F77 => array(0x3AF), 0x1F79 => array(0x3CC), 0x1F7B => array(0x3CD),
+                    0x1F7D => array(0x3CE), 0x1F80 => array(0x1F00, 0x3B9), 0x1F81 => array(0x1F01, 0x3B9),
+                    0x1F82 => array(0x1F02, 0x3B9), 0x1F83 => array(0x1F03, 0x3B9), 0x1F84 => array(0x1F04, 0x3B9),
+                    0x1F85 => array(0x1F05, 0x3B9), 0x1F86 => array(0x1F06, 0x3B9), 0x1F87 => array(0x1F07, 0x3B9),
+                    0x1F88 => array(0x1F00, 0x3B9), 0x1F89 => array(0x1F01, 0x3B9), 0x1F8A => array(0x1F02, 0x3B9),
+                    0x1F8B => array(0x1F03, 0x3B9), 0x1F8C => array(0x1F04, 0x3B9), 0x1F8D => array(0x1F05, 0x3B9),
+                    0x1F8E => array(0x1F06, 0x3B9), 0x1F8F => array(0x1F07, 0x3B9), 0x1F90 => array(0x1F20, 0x3B9),
+                    0x1F91 => array(0x1F21, 0x3B9), 0x1F92 => array(0x1F22, 0x3B9), 0x1F93 => array(0x1F23, 0x3B9),
+                    0x1F94 => array(0x1F24, 0x3B9), 0x1F95 => array(0x1F25, 0x3B9), 0x1F96 => array(0x1F26, 0x3B9),
+                    0x1F97 => array(0x1F27, 0x3B9), 0x1F98 => array(0x1F20, 0x3B9), 0x1F99 => array(0x1F21, 0x3B9),
+                    0x1F9A => array(0x1F22, 0x3B9), 0x1F9B => array(0x1F23, 0x3B9), 0x1F9C => array(0x1F24, 0x3B9),
+                    0x1F9D => array(0x1F25, 0x3B9), 0x1F9E => array(0x1F26, 0x3B9), 0x1F9F => array(0x1F27, 0x3B9),
+                    0x1FA0 => array(0x1F60, 0x3B9), 0x1FA1 => array(0x1F61, 0x3B9), 0x1FA2 => array(0x1F62, 0x3B9),
+                    0x1FA3 => array(0x1F63, 0x3B9), 0x1FA4 => array(0x1F64, 0x3B9), 0x1FA5 => array(0x1F65, 0x3B9),
+                    0x1FA6 => array(0x1F66, 0x3B9), 0x1FA7 => array(0x1F67, 0x3B9), 0x1FA8 => array(0x1F60, 0x3B9),
+                    0x1FA9 => array(0x1F61, 0x3B9), 0x1FAA => array(0x1F62, 0x3B9), 0x1FAB => array(0x1F63, 0x3B9),
+                    0x1FAC => array(0x1F64, 0x3B9), 0x1FAD => array(0x1F65, 0x3B9), 0x1FAE => array(0x1F66, 0x3B9),
+                    0x1FAF => array(0x1F67, 0x3B9), 0x1FB2 => array(0x1F70, 0x3B9), 0x1FB3 => array(0x3B1, 0x3B9),
+                    0x1FB4 => array(0x3AC, 0x3B9), 0x1FB7 => array(0x1FB6, 0x3B9), 0x1FB8 => array(0x1FB0),
+                    0x1FB9 => array(0x1FB1), 0x1FBA => array(0x1F70), 0x1FBB => array(0x3AC),
+                    0x1FBC => array(0x3B1, 0x3B9), 0x1FBE => array(0x3B9), 0x1FC2 => array(0x1F74, 0x3B9),
+                    0x1FC3 => array(0x3B7, 0x3B9), 0x1FC4 => array(0x3AE, 0x3B9), 0x1FC7 => array(0x1FC6, 0x3B9),
+                    0x1FC8 => array(0x1F72), 0x1FC9 => array(0x3AD), 0x1FCA => array(0x1F74),
+                    0x1FCB => array(0x3AE), 0x1FCC => array(0x3B7, 0x3B9), 0x1FD3 => array(0x390),
+                    0x1FD8 => array(0x1FD0), 0x1FD9 => array(0x1FD1), 0x1FDA => array(0x1F76),
+                    0x1FDB => array(0x3AF), 0x1FE3 => array(0x3B0), 0x1FE8 => array(0x1FE0),
+                    0x1FE9 => array(0x1FE1), 0x1FEA => array(0x1F7A), 0x1FEB => array(0x3CD),
+                    0x1FEC => array(0x1FE5), 0x1FF2 => array(0x1F7C, 0x3B9), 0x1FF3 => array(0x3C9, 0x3B9),
+                    0x1FF4 => array(0x3CE, 0x3B9), 0x1FF7 => array(0x1FF6, 0x3B9), 0x1FF8 => array(0x1F78),
+                    0x1FF9 => array(0x3CC), 0x1FFA => array(0x1F7C), 0x1FFB => array(0x3CE),
+                    0x1FFC => array(0x3C9, 0x3B9), 0x2011 => array(0x2010), 0x2033 => array(0x2032, 0x2032),
+                    0x2034 => array(0x2032, 0x2032, 0x2032), 0x2036 => array(0x2035, 0x2035), 0x2037 => array(0x2035, 0x2035, 0x2035),
+                    0x2057 => array(0x2032, 0x2032, 0x2032, 0x2032), 0x2070 => array(0x30), 0x2071 => array(0x69),
+                    0x2074 => array(0x34), 0x2075 => array(0x35), 0x2076 => array(0x36),
+                    0x2077 => array(0x37), 0x2078 => array(0x38), 0x2079 => array(0x39),
+                    0x207B => array(0x2212), 0x207F => array(0x6E), 0x2080 => array(0x30),
+                    0x2081 => array(0x31), 0x2082 => array(0x32), 0x2083 => array(0x33),
+                    0x2084 => array(0x34), 0x2085 => array(0x35), 0x2086 => array(0x36),
+                    0x2087 => array(0x37), 0x2088 => array(0x38), 0x2089 => array(0x39),
+                    0x208B => array(0x2212), 0x2090 => array(0x61), 0x2091 => array(0x65),
+                    0x2092 => array(0x6F), 0x2093 => array(0x78), 0x2094 => array(0x259),
+                    0x2095 => array(0x68), 0x2096 => array(0x6B), 0x2097 => array(0x6C),
+                    0x2098 => array(0x6D), 0x2099 => array(0x6E), 0x209A => array(0x70),
+                    0x209B => array(0x73), 0x209C => array(0x74), 0x20A8 => array(0x72, 0x73),
+                    0x2102 => array(0x63), 0x2103 => array(0xB0, 0x63), 0x2107 => array(0x25B),
+                    0x2109 => array(0xB0, 0x66), 0x210A => array(0x67), 0x210B => array(0x68),
+                    0x210C => array(0x68), 0x210D => array(0x68), 0x210E => array(0x68),
+                    0x210F => array(0x127), 0x2110 => array(0x69), 0x2111 => array(0x69),
+                    0x2112 => array(0x6C), 0x2113 => array(0x6C), 0x2115 => array(0x6E),
+                    0x2116 => array(0x6E, 0x6F), 0x2119 => array(0x70), 0x211A => array(0x71),
+                    0x211B => array(0x72), 0x211C => array(0x72), 0x211D => array(0x72),
+                    0x2120 => array(0x73, 0x6D), 0x2121 => array(0x74, 0x65, 0x6C), 0x2122 => array(0x74, 0x6D),
+                    0x2124 => array(0x7A), 0x2126 => array(0x3C9), 0x2128 => array(0x7A),
+                    0x212A => array(0x6B), 0x212B => array(0xE5), 0x212C => array(0x62),
+                    0x212D => array(0x63), 0x212F => array(0x65), 0x2130 => array(0x65),
+                    0x2131 => array(0x66), 0x2133 => array(0x6D), 0x2134 => array(0x6F),
+                    0x2135 => array(0x5D0), 0x2136 => array(0x5D1), 0x2137 => array(0x5D2),
+                    0x2138 => array(0x5D3), 0x2139 => array(0x69), 0x213B => array(0x66, 0x61, 0x78),
+                    0x213C => array(0x3C0), 0x213D => array(0x3B3), 0x213E => array(0x3B3),
+                    0x213F => array(0x3C0), 0x2140 => array(0x2211), 0x2145 => array(0x64),
+                    0x2146 => array(0x64), 0x2147 => array(0x65), 0x2148 => array(0x69),
+                    0x2149 => array(0x6A), 0x2150 => array(0x31, 0x2044, 0x37), 0x2151 => array(0x31, 0x2044, 0x39),
+                    0x2152 => array(0x31, 0x2044, 0x31, 0x30), 0x2153 => array(0x31, 0x2044, 0x33), 0x2154 => array(0x32, 0x2044, 0x33),
+                    0x2155 => array(0x31, 0x2044, 0x35), 0x2156 => array(0x32, 0x2044, 0x35), 0x2157 => array(0x33, 0x2044, 0x35),
+                    0x2158 => array(0x34, 0x2044, 0x35), 0x2159 => array(0x31, 0x2044, 0x36), 0x215A => array(0x35, 0x2044, 0x36),
+                    0x215B => array(0x31, 0x2044, 0x38), 0x215C => array(0x33, 0x2044, 0x38), 0x215D => array(0x35, 0x2044, 0x38),
+                    0x215E => array(0x37, 0x2044, 0x38), 0x215F => array(0x31, 0x2044), 0x2160 => array(0x69),
+                    0x2161 => array(0x69, 0x69), 0x2162 => array(0x69, 0x69, 0x69), 0x2163 => array(0x69, 0x76),
+                    0x2164 => array(0x76), 0x2165 => array(0x76, 0x69), 0x2166 => array(0x76, 0x69, 0x69),
+                    0x2167 => array(0x76, 0x69, 0x69, 0x69), 0x2168 => array(0x69, 0x78), 0x2169 => array(0x78),
+                    0x216A => array(0x78, 0x69), 0x216B => array(0x78, 0x69, 0x69), 0x216C => array(0x6C),
+                    0x216D => array(0x63), 0x216E => array(0x64), 0x216F => array(0x6D),
+                    0x2170 => array(0x69), 0x2171 => array(0x69, 0x69), 0x2172 => array(0x69, 0x69, 0x69),
+                    0x2173 => array(0x69, 0x76), 0x2174 => array(0x76), 0x2175 => array(0x76, 0x69),
+                    0x2176 => array(0x76, 0x69, 0x69), 0x2177 => array(0x76, 0x69, 0x69, 0x69), 0x2178 => array(0x69, 0x78),
+                    0x2179 => array(0x78), 0x217A => array(0x78, 0x69), 0x217B => array(0x78, 0x69, 0x69),
+                    0x217C => array(0x6C), 0x217D => array(0x63), 0x217E => array(0x64),
+                    0x217F => array(0x6D), 0x2189 => array(0x30, 0x2044, 0x33), 0x222C => array(0x222B, 0x222B),
+                    0x222D => array(0x222B, 0x222B, 0x222B), 0x222F => array(0x222E, 0x222E), 0x2230 => array(0x222E, 0x222E, 0x222E),
+                    0x2329 => array(0x3008), 0x232A => array(0x3009), 0x2460 => array(0x31),
+                    0x2461 => array(0x32), 0x2462 => array(0x33), 0x2463 => array(0x34),
+                    0x2464 => array(0x35), 0x2465 => array(0x36), 0x2466 => array(0x37),
+                    0x2467 => array(0x38), 0x2468 => array(0x39), 0x2469 => array(0x31, 0x30),
+                    0x246A => array(0x31, 0x31), 0x246B => array(0x31, 0x32), 0x246C => array(0x31, 0x33),
+                    0x246D => array(0x31, 0x34), 0x246E => array(0x31, 0x35), 0x246F => array(0x31, 0x36),
+                    0x2470 => array(0x31, 0x37), 0x2471 => array(0x31, 0x38), 0x2472 => array(0x31, 0x39),
+                    0x2473 => array(0x32, 0x30), 0x24B6 => array(0x61), 0x24B7 => array(0x62),
+                    0x24B8 => array(0x63), 0x24B9 => array(0x64), 0x24BA => array(0x65),
+                    0x24BB => array(0x66), 0x24BC => array(0x67), 0x24BD => array(0x68),
+                    0x24BE => array(0x69), 0x24BF => array(0x6A), 0x24C0 => array(0x6B),
+                    0x24C1 => array(0x6C), 0x24C2 => array(0x6D), 0x24C3 => array(0x6E),
+                    0x24C4 => array(0x6F), 0x24C5 => array(0x70), 0x24C6 => array(0x71),
+                    0x24C7 => array(0x72), 0x24C8 => array(0x73), 0x24C9 => array(0x74),
+                    0x24CA => array(0x75), 0x24CB => array(0x76), 0x24CC => array(0x77),
+                    0x24CD => array(0x78), 0x24CE => array(0x79), 0x24CF => array(0x7A),
+                    0x24D0 => array(0x61), 0x24D1 => array(0x62), 0x24D2 => array(0x63),
+                    0x24D3 => array(0x64), 0x24D4 => array(0x65), 0x24D5 => array(0x66),
+                    0x24D6 => array(0x67), 0x24D7 => array(0x68), 0x24D8 => array(0x69),
+                    0x24D9 => array(0x6A), 0x24DA => array(0x6B), 0x24DB => array(0x6C),
+                    0x24DC => array(0x6D), 0x24DD => array(0x6E), 0x24DE => array(0x6F),
+                    0x24DF => array(0x70), 0x24E0 => array(0x71), 0x24E1 => array(0x72),
+                    0x24E2 => array(0x73), 0x24E3 => array(0x74), 0x24E4 => array(0x75),
+                    0x24E5 => array(0x76), 0x24E6 => array(0x77), 0x24E7 => array(0x78),
+                    0x24E8 => array(0x79), 0x24E9 => array(0x7A), 0x24EA => array(0x30),
+                    0x2A0C => array(0x222B, 0x222B, 0x222B, 0x222B), 0x2ADC => array(0x2ADD, 0x338), 0x2C00 => array(0x2C30),
+                    0x2C01 => array(0x2C31), 0x2C02 => array(0x2C32), 0x2C03 => array(0x2C33),
+                    0x2C04 => array(0x2C34), 0x2C05 => array(0x2C35), 0x2C06 => array(0x2C36),
+                    0x2C07 => array(0x2C37), 0x2C08 => array(0x2C38), 0x2C09 => array(0x2C39),
+                    0x2C0A => array(0x2C3A), 0x2C0B => array(0x2C3B), 0x2C0C => array(0x2C3C),
+                    0x2C0D => array(0x2C3D), 0x2C0E => array(0x2C3E), 0x2C0F => array(0x2C3F),
+                    0x2C10 => array(0x2C40), 0x2C11 => array(0x2C41), 0x2C12 => array(0x2C42),
+                    0x2C13 => array(0x2C43), 0x2C14 => array(0x2C44), 0x2C15 => array(0x2C45),
+                    0x2C16 => array(0x2C46), 0x2C17 => array(0x2C47), 0x2C18 => array(0x2C48),
+                    0x2C19 => array(0x2C49), 0x2C1A => array(0x2C4A), 0x2C1B => array(0x2C4B),
+                    0x2C1C => array(0x2C4C), 0x2C1D => array(0x2C4D), 0x2C1E => array(0x2C4E),
+                    0x2C1F => array(0x2C4F), 0x2C20 => array(0x2C50), 0x2C21 => array(0x2C51),
+                    0x2C22 => array(0x2C52), 0x2C23 => array(0x2C53), 0x2C24 => array(0x2C54),
+                    0x2C25 => array(0x2C55), 0x2C26 => array(0x2C56), 0x2C27 => array(0x2C57),
+                    0x2C28 => array(0x2C58), 0x2C29 => array(0x2C59), 0x2C2A => array(0x2C5A),
+                    0x2C2B => array(0x2C5B), 0x2C2C => array(0x2C5C), 0x2C2D => array(0x2C5D),
+                    0x2C2E => array(0x2C5E), 0x2C60 => array(0x2C61), 0x2C62 => array(0x26B),
+                    0x2C63 => array(0x1D7D), 0x2C64 => array(0x27D), 0x2C67 => array(0x2C68),
+                    0x2C69 => array(0x2C6A), 0x2C6B => array(0x2C6C), 0x2C6D => array(0x251),
+                    0x2C6E => array(0x271), 0x2C6F => array(0x250), 0x2C70 => array(0x252),
+                    0x2C72 => array(0x2C73), 0x2C75 => array(0x2C76), 0x2C7C => array(0x6A),
+                    0x2C7D => array(0x76), 0x2C7E => array(0x23F), 0x2C7F => array(0x240),
+                    0x2C80 => array(0x2C81), 0x2C82 => array(0x2C83), 0x2C84 => array(0x2C85),
+                    0x2C86 => array(0x2C87), 0x2C88 => array(0x2C89), 0x2C8A => array(0x2C8B),
+                    0x2C8C => array(0x2C8D), 0x2C8E => array(0x2C8F), 0x2C90 => array(0x2C91),
+                    0x2C92 => array(0x2C93), 0x2C94 => array(0x2C95), 0x2C96 => array(0x2C97),
+                    0x2C98 => array(0x2C99), 0x2C9A => array(0x2C9B), 0x2C9C => array(0x2C9D),
+                    0x2C9E => array(0x2C9F), 0x2CA0 => array(0x2CA1), 0x2CA2 => array(0x2CA3),
+                    0x2CA4 => array(0x2CA5), 0x2CA6 => array(0x2CA7), 0x2CA8 => array(0x2CA9),
+                    0x2CAA => array(0x2CAB), 0x2CAC => array(0x2CAD), 0x2CAE => array(0x2CAF),
+                    0x2CB0 => array(0x2CB1), 0x2CB2 => array(0x2CB3), 0x2CB4 => array(0x2CB5),
+                    0x2CB6 => array(0x2CB7), 0x2CB8 => array(0x2CB9), 0x2CBA => array(0x2CBB),
+                    0x2CBC => array(0x2CBD), 0x2CBE => array(0x2CBF), 0x2CC0 => array(0x2CC1),
+                    0x2CC2 => array(0x2CC3), 0x2CC4 => array(0x2CC5), 0x2CC6 => array(0x2CC7),
+                    0x2CC8 => array(0x2CC9), 0x2CCA => array(0x2CCB), 0x2CCC => array(0x2CCD),
+                    0x2CCE => array(0x2CCF), 0x2CD0 => array(0x2CD1), 0x2CD2 => array(0x2CD3),
+                    0x2CD4 => array(0x2CD5), 0x2CD6 => array(0x2CD7), 0x2CD8 => array(0x2CD9),
+                    0x2CDA => array(0x2CDB), 0x2CDC => array(0x2CDD), 0x2CDE => array(0x2CDF),
+                    0x2CE0 => array(0x2CE1), 0x2CE2 => array(0x2CE3), 0x2CEB => array(0x2CEC),
+                    0x2CED => array(0x2CEE), 0x2CF2 => array(0x2CF3), 0x2D6F => array(0x2D61),
+                    0x2E9F => array(0x6BCD), 0x2EF3 => array(0x9F9F), 0x2F00 => array(0x4E00),
+                    0x2F01 => array(0x4E28), 0x2F02 => array(0x4E36), 0x2F03 => array(0x4E3F),
+                    0x2F04 => array(0x4E59), 0x2F05 => array(0x4E85), 0x2F06 => array(0x4E8C),
+                    0x2F07 => array(0x4EA0), 0x2F08 => array(0x4EBA), 0x2F09 => array(0x513F),
+                    0x2F0A => array(0x5165), 0x2F0B => array(0x516B), 0x2F0C => array(0x5182),
+                    0x2F0D => array(0x5196), 0x2F0E => array(0x51AB), 0x2F0F => array(0x51E0),
+                    0x2F10 => array(0x51F5), 0x2F11 => array(0x5200), 0x2F12 => array(0x529B),
+                    0x2F13 => array(0x52F9), 0x2F14 => array(0x5315), 0x2F15 => array(0x531A),
+                    0x2F16 => array(0x5338), 0x2F17 => array(0x5341), 0x2F18 => array(0x535C),
+                    0x2F19 => array(0x5369), 0x2F1A => array(0x5382), 0x2F1B => array(0x53B6),
+                    0x2F1C => array(0x53C8), 0x2F1D => array(0x53E3), 0x2F1E => array(0x56D7),
+                    0x2F1F => array(0x571F), 0x2F20 => array(0x58EB), 0x2F21 => array(0x5902),
+                    0x2F22 => array(0x590A), 0x2F23 => array(0x5915), 0x2F24 => array(0x5927),
+                    0x2F25 => array(0x5973), 0x2F26 => array(0x5B50), 0x2F27 => array(0x5B80),
+                    0x2F28 => array(0x5BF8), 0x2F29 => array(0x5C0F), 0x2F2A => array(0x5C22),
+                    0x2F2B => array(0x5C38), 0x2F2C => array(0x5C6E), 0x2F2D => array(0x5C71),
+                    0x2F2E => array(0x5DDB), 0x2F2F => array(0x5DE5), 0x2F30 => array(0x5DF1),
+                    0x2F31 => array(0x5DFE), 0x2F32 => array(0x5E72), 0x2F33 => array(0x5E7A),
+                    0x2F34 => array(0x5E7F), 0x2F35 => array(0x5EF4), 0x2F36 => array(0x5EFE),
+                    0x2F37 => array(0x5F0B), 0x2F38 => array(0x5F13), 0x2F39 => array(0x5F50),
+                    0x2F3A => array(0x5F61), 0x2F3B => array(0x5F73), 0x2F3C => array(0x5FC3),
+                    0x2F3D => array(0x6208), 0x2F3E => array(0x6236), 0x2F3F => array(0x624B),
+                    0x2F40 => array(0x652F), 0x2F41 => array(0x6534), 0x2F42 => array(0x6587),
+                    0x2F43 => array(0x6597), 0x2F44 => array(0x65A4), 0x2F45 => array(0x65B9),
+                    0x2F46 => array(0x65E0), 0x2F47 => array(0x65E5), 0x2F48 => array(0x66F0),
+                    0x2F49 => array(0x6708), 0x2F4A => array(0x6728), 0x2F4B => array(0x6B20),
+                    0x2F4C => array(0x6B62), 0x2F4D => array(0x6B79), 0x2F4E => array(0x6BB3),
+                    0x2F4F => array(0x6BCB), 0x2F50 => array(0x6BD4), 0x2F51 => array(0x6BDB),
+                    0x2F52 => array(0x6C0F), 0x2F53 => array(0x6C14), 0x2F54 => array(0x6C34),
+                    0x2F55 => array(0x706B), 0x2F56 => array(0x722A), 0x2F57 => array(0x7236),
+                    0x2F58 => array(0x723B), 0x2F59 => array(0x723F), 0x2F5A => array(0x7247),
+                    0x2F5B => array(0x7259), 0x2F5C => array(0x725B), 0x2F5D => array(0x72AC),
+                    0x2F5E => array(0x7384), 0x2F5F => array(0x7389), 0x2F60 => array(0x74DC),
+                    0x2F61 => array(0x74E6), 0x2F62 => array(0x7518), 0x2F63 => array(0x751F),
+                    0x2F64 => array(0x7528), 0x2F65 => array(0x7530), 0x2F66 => array(0x758B),
+                    0x2F67 => array(0x7592), 0x2F68 => array(0x7676), 0x2F69 => array(0x767D),
+                    0x2F6A => array(0x76AE), 0x2F6B => array(0x76BF), 0x2F6C => array(0x76EE),
+                    0x2F6D => array(0x77DB), 0x2F6E => array(0x77E2), 0x2F6F => array(0x77F3),
+                    0x2F70 => array(0x793A), 0x2F71 => array(0x79B8), 0x2F72 => array(0x79BE),
+                    0x2F73 => array(0x7A74), 0x2F74 => array(0x7ACB), 0x2F75 => array(0x7AF9),
+                    0x2F76 => array(0x7C73), 0x2F77 => array(0x7CF8), 0x2F78 => array(0x7F36),
+                    0x2F79 => array(0x7F51), 0x2F7A => array(0x7F8A), 0x2F7B => array(0x7FBD),
+                    0x2F7C => array(0x8001), 0x2F7D => array(0x800C), 0x2F7E => array(0x8012),
+                    0x2F7F => array(0x8033), 0x2F80 => array(0x807F), 0x2F81 => array(0x8089),
+                    0x2F82 => array(0x81E3), 0x2F83 => array(0x81EA), 0x2F84 => array(0x81F3),
+                    0x2F85 => array(0x81FC), 0x2F86 => array(0x820C), 0x2F87 => array(0x821B),
+                    0x2F88 => array(0x821F), 0x2F89 => array(0x826E), 0x2F8A => array(0x8272),
+                    0x2F8B => array(0x8278), 0x2F8C => array(0x864D), 0x2F8D => array(0x866B),
+                    0x2F8E => array(0x8840), 0x2F8F => array(0x884C), 0x2F90 => array(0x8863),
+                    0x2F91 => array(0x897E), 0x2F92 => array(0x898B), 0x2F93 => array(0x89D2),
+                    0x2F94 => array(0x8A00), 0x2F95 => array(0x8C37), 0x2F96 => array(0x8C46),
+                    0x2F97 => array(0x8C55), 0x2F98 => array(0x8C78), 0x2F99 => array(0x8C9D),
+                    0x2F9A => array(0x8D64), 0x2F9B => array(0x8D70), 0x2F9C => array(0x8DB3),
+                    0x2F9D => array(0x8EAB), 0x2F9E => array(0x8ECA), 0x2F9F => array(0x8F9B),
+                    0x2FA0 => array(0x8FB0), 0x2FA1 => array(0x8FB5), 0x2FA2 => array(0x9091),
+                    0x2FA3 => array(0x9149), 0x2FA4 => array(0x91C6), 0x2FA5 => array(0x91CC),
+                    0x2FA6 => array(0x91D1), 0x2FA7 => array(0x9577), 0x2FA8 => array(0x9580),
+                    0x2FA9 => array(0x961C), 0x2FAA => array(0x96B6), 0x2FAB => array(0x96B9),
+                    0x2FAC => array(0x96E8), 0x2FAD => array(0x9751), 0x2FAE => array(0x975E),
+                    0x2FAF => array(0x9762), 0x2FB0 => array(0x9769), 0x2FB1 => array(0x97CB),
+                    0x2FB2 => array(0x97ED), 0x2FB3 => array(0x97F3), 0x2FB4 => array(0x9801),
+                    0x2FB5 => array(0x98A8), 0x2FB6 => array(0x98DB), 0x2FB7 => array(0x98DF),
+                    0x2FB8 => array(0x9996), 0x2FB9 => array(0x9999), 0x2FBA => array(0x99AC),
+                    0x2FBB => array(0x9AA8), 0x2FBC => array(0x9AD8), 0x2FBD => array(0x9ADF),
+                    0x2FBE => array(0x9B25), 0x2FBF => array(0x9B2F), 0x2FC0 => array(0x9B32),
+                    0x2FC1 => array(0x9B3C), 0x2FC2 => array(0x9B5A), 0x2FC3 => array(0x9CE5),
+                    0x2FC4 => array(0x9E75), 0x2FC5 => array(0x9E7F), 0x2FC6 => array(0x9EA5),
+                    0x2FC7 => array(0x9EBB), 0x2FC8 => array(0x9EC3), 0x2FC9 => array(0x9ECD),
+                    0x2FCA => array(0x9ED1), 0x2FCB => array(0x9EF9), 0x2FCC => array(0x9EFD),
+                    0x2FCD => array(0x9F0E), 0x2FCE => array(0x9F13), 0x2FCF => array(0x9F20),
+                    0x2FD0 => array(0x9F3B), 0x2FD1 => array(0x9F4A), 0x2FD2 => array(0x9F52),
+                    0x2FD3 => array(0x9F8D), 0x2FD4 => array(0x9F9C), 0x2FD5 => array(0x9FA0),
+                    0x3002 => array(0x2E), 0x3036 => array(0x3012), 0x3038 => array(0x5341),
+                    0x3039 => array(0x5344), 0x303A => array(0x5345), 0x309F => array(0x3088, 0x308A),
+                    0x30FF => array(0x30B3, 0x30C8), 0x3131 => array(0x1100), 0x3132 => array(0x1101),
+                    0x3133 => array(0x11AA), 0x3134 => array(0x1102), 0x3135 => array(0x11AC),
+                    0x3136 => array(0x11AD), 0x3137 => array(0x1103), 0x3138 => array(0x1104),
+                    0x3139 => array(0x1105), 0x313A => array(0x11B0), 0x313B => array(0x11B1),
+                    0x313C => array(0x11B2), 0x313D => array(0x11B3), 0x313E => array(0x11B4),
+                    0x313F => array(0x11B5), 0x3140 => array(0x111A), 0x3141 => array(0x1106),
+                    0x3142 => array(0x1107), 0x3143 => array(0x1108), 0x3144 => array(0x1121),
+                    0x3145 => array(0x1109), 0x3146 => array(0x110A), 0x3147 => array(0x110B),
+                    0x3148 => array(0x110C), 0x3149 => array(0x110D), 0x314A => array(0x110E),
+                    0x314B => array(0x110F), 0x314C => array(0x1110), 0x314D => array(0x1111),
+                    0x314E => array(0x1112), 0x314F => array(0x1161), 0x3150 => array(0x1162),
+                    0x3151 => array(0x1163), 0x3152 => array(0x1164), 0x3153 => array(0x1165),
+                    0x3154 => array(0x1166), 0x3155 => array(0x1167), 0x3156 => array(0x1168),
+                    0x3157 => array(0x1169), 0x3158 => array(0x116A), 0x3159 => array(0x116B),
+                    0x315A => array(0x116C), 0x315B => array(0x116D), 0x315C => array(0x116E),
+                    0x315D => array(0x116F), 0x315E => array(0x1170), 0x315F => array(0x1171),
+                    0x3160 => array(0x1172), 0x3161 => array(0x1173), 0x3162 => array(0x1174),
+                    0x3163 => array(0x1175), 0x3165 => array(0x1114), 0x3166 => array(0x1115),
+                    0x3167 => array(0x11C7), 0x3168 => array(0x11C8), 0x3169 => array(0x11CC),
+                    0x316A => array(0x11CE), 0x316B => array(0x11D3), 0x316C => array(0x11D7),
+                    0x316D => array(0x11D9), 0x316E => array(0x111C), 0x316F => array(0x11DD),
+                    0x3170 => array(0x11DF), 0x3171 => array(0x111D), 0x3172 => array(0x111E),
+                    0x3173 => array(0x1120), 0x3174 => array(0x1122), 0x3175 => array(0x1123),
+                    0x3176 => array(0x1127), 0x3177 => array(0x1129), 0x3178 => array(0x112B),
+                    0x3179 => array(0x112C), 0x317A => array(0x112D), 0x317B => array(0x112E),
+                    0x317C => array(0x112F), 0x317D => array(0x1132), 0x317E => array(0x1136),
+                    0x317F => array(0x1140), 0x3180 => array(0x1147), 0x3181 => array(0x114C),
+                    0x3182 => array(0x11F1), 0x3183 => array(0x11F2), 0x3184 => array(0x1157),
+                    0x3185 => array(0x1158), 0x3186 => array(0x1159), 0x3187 => array(0x1184),
+                    0x3188 => array(0x1185), 0x3189 => array(0x1188), 0x318A => array(0x1191),
+                    0x318B => array(0x1192), 0x318C => array(0x1194), 0x318D => array(0x119E),
+                    0x318E => array(0x11A1), 0x3192 => array(0x4E00), 0x3193 => array(0x4E8C),
+                    0x3194 => array(0x4E09), 0x3195 => array(0x56DB), 0x3196 => array(0x4E0A),
+                    0x3197 => array(0x4E2D), 0x3198 => array(0x4E0B), 0x3199 => array(0x7532),
+                    0x319A => array(0x4E59), 0x319B => array(0x4E19), 0x319C => array(0x4E01),
+                    0x319D => array(0x5929), 0x319E => array(0x5730), 0x319F => array(0x4EBA),
+                    0x3244 => array(0x554F), 0x3245 => array(0x5E7C), 0x3246 => array(0x6587),
+                    0x3247 => array(0x7B8F), 0x3250 => array(0x70, 0x74, 0x65), 0x3251 => array(0x32, 0x31),
+                    0x3252 => array(0x32, 0x32), 0x3253 => array(0x32, 0x33), 0x3254 => array(0x32, 0x34),
+                    0x3255 => array(0x32, 0x35), 0x3256 => array(0x32, 0x36), 0x3257 => array(0x32, 0x37),
+                    0x3258 => array(0x32, 0x38), 0x3259 => array(0x32, 0x39), 0x325A => array(0x33, 0x30),
+                    0x325B => array(0x33, 0x31), 0x325C => array(0x33, 0x32), 0x325D => array(0x33, 0x33),
+                    0x325E => array(0x33, 0x34), 0x325F => array(0x33, 0x35), 0x3260 => array(0x1100),
+                    0x3261 => array(0x1102), 0x3262 => array(0x1103), 0x3263 => array(0x1105),
+                    0x3264 => array(0x1106), 0x3265 => array(0x1107), 0x3266 => array(0x1109),
+                    0x3267 => array(0x110B), 0x3268 => array(0x110C), 0x3269 => array(0x110E),
+                    0x326A => array(0x110F), 0x326B => array(0x1110), 0x326C => array(0x1111),
+                    0x326D => array(0x1112), 0x326E => array(0xAC00), 0x326F => array(0xB098),
+                    0x3270 => array(0xB2E4), 0x3271 => array(0xB77C), 0x3272 => array(0xB9C8),
+                    0x3273 => array(0xBC14), 0x3274 => array(0xC0AC), 0x3275 => array(0xC544),
+                    0x3276 => array(0xC790), 0x3277 => array(0xCC28), 0x3278 => array(0xCE74),
+                    0x3279 => array(0xD0C0), 0x327A => array(0xD30C), 0x327B => array(0xD558),
+                    0x327C => array(0xCC38, 0xACE0), 0x327D => array(0xC8FC, 0xC758), 0x327E => array(0xC6B0),
+                    0x3280 => array(0x4E00), 0x3281 => array(0x4E8C), 0x3282 => array(0x4E09),
+                    0x3283 => array(0x56DB), 0x3284 => array(0x4E94), 0x3285 => array(0x516D),
+                    0x3286 => array(0x4E03), 0x3287 => array(0x516B), 0x3288 => array(0x4E5D),
+                    0x3289 => array(0x5341), 0x328A => array(0x6708), 0x328B => array(0x706B),
+                    0x328C => array(0x6C34), 0x328D => array(0x6728), 0x328E => array(0x91D1),
+                    0x328F => array(0x571F), 0x3290 => array(0x65E5), 0x3291 => array(0x682A),
+                    0x3292 => array(0x6709), 0x3293 => array(0x793E), 0x3294 => array(0x540D),
+                    0x3295 => array(0x7279), 0x3296 => array(0x8CA1), 0x3297 => array(0x795D),
+                    0x3298 => array(0x52B4), 0x3299 => array(0x79D8), 0x329A => array(0x7537),
+                    0x329B => array(0x5973), 0x329C => array(0x9069), 0x329D => array(0x512A),
+                    0x329E => array(0x5370), 0x329F => array(0x6CE8), 0x32A0 => array(0x9805),
+                    0x32A1 => array(0x4F11), 0x32A2 => array(0x5199), 0x32A3 => array(0x6B63),
+                    0x32A4 => array(0x4E0A), 0x32A5 => array(0x4E2D), 0x32A6 => array(0x4E0B),
+                    0x32A7 => array(0x5DE6), 0x32A8 => array(0x53F3), 0x32A9 => array(0x533B),
+                    0x32AA => array(0x5B97), 0x32AB => array(0x5B66), 0x32AC => array(0x76E3),
+                    0x32AD => array(0x4F01), 0x32AE => array(0x8CC7), 0x32AF => array(0x5354),
+                    0x32B0 => array(0x591C), 0x32B1 => array(0x33, 0x36), 0x32B2 => array(0x33, 0x37),
+                    0x32B3 => array(0x33, 0x38), 0x32B4 => array(0x33, 0x39), 0x32B5 => array(0x34, 0x30),
+                    0x32B6 => array(0x34, 0x31), 0x32B7 => array(0x34, 0x32), 0x32B8 => array(0x34, 0x33),
+                    0x32B9 => array(0x34, 0x34), 0x32BA => array(0x34, 0x35), 0x32BB => array(0x34, 0x36),
+                    0x32BC => array(0x34, 0x37), 0x32BD => array(0x34, 0x38), 0x32BE => array(0x34, 0x39),
+                    0x32BF => array(0x35, 0x30), 0x32C0 => array(0x31, 0x6708), 0x32C1 => array(0x32, 0x6708),
+                    0x32C2 => array(0x33, 0x6708), 0x32C3 => array(0x34, 0x6708), 0x32C4 => array(0x35, 0x6708),
+                    0x32C5 => array(0x36, 0x6708), 0x32C6 => array(0x37, 0x6708), 0x32C7 => array(0x38, 0x6708),
+                    0x32C8 => array(0x39, 0x6708), 0x32C9 => array(0x31, 0x30, 0x6708), 0x32CA => array(0x31, 0x31, 0x6708),
+                    0x32CB => array(0x31, 0x32, 0x6708), 0x32CC => array(0x68, 0x67), 0x32CD => array(0x65, 0x72, 0x67),
+                    0x32CE => array(0x65, 0x76), 0x32CF => array(0x6C, 0x74, 0x64), 0x32D0 => array(0x30A2),
+                    0x32D1 => array(0x30A4), 0x32D2 => array(0x30A6), 0x32D3 => array(0x30A8),
+                    0x32D4 => array(0x30AA), 0x32D5 => array(0x30AB), 0x32D6 => array(0x30AD),
+                    0x32D7 => array(0x30AF), 0x32D8 => array(0x30B1), 0x32D9 => array(0x30B3),
+                    0x32DA => array(0x30B5), 0x32DB => array(0x30B7), 0x32DC => array(0x30B9),
+                    0x32DD => array(0x30BB), 0x32DE => array(0x30BD), 0x32DF => array(0x30BF),
+                    0x32E0 => array(0x30C1), 0x32E1 => array(0x30C4), 0x32E2 => array(0x30C6),
+                    0x32E3 => array(0x30C8), 0x32E4 => array(0x30CA), 0x32E5 => array(0x30CB),
+                    0x32E6 => array(0x30CC), 0x32E7 => array(0x30CD), 0x32E8 => array(0x30CE),
+                    0x32E9 => array(0x30CF), 0x32EA => array(0x30D2), 0x32EB => array(0x30D5),
+                    0x32EC => array(0x30D8), 0x32ED => array(0x30DB), 0x32EE => array(0x30DE),
+                    0x32EF => array(0x30DF), 0x32F0 => array(0x30E0), 0x32F1 => array(0x30E1),
+                    0x32F2 => array(0x30E2), 0x32F3 => array(0x30E4), 0x32F4 => array(0x30E6),
+                    0x32F5 => array(0x30E8), 0x32F6 => array(0x30E9), 0x32F7 => array(0x30EA),
+                    0x32F8 => array(0x30EB), 0x32F9 => array(0x30EC), 0x32FA => array(0x30ED),
+                    0x32FB => array(0x30EF), 0x32FC => array(0x30F0), 0x32FD => array(0x30F1),
+                    0x32FE => array(0x30F2), 0x3300 => array(0x30A2, 0x30D1, 0x30FC, 0x30C8), 0x3301 => array(0x30A2, 0x30EB, 0x30D5, 0x30A1),
+                    0x3302 => array(0x30A2, 0x30F3, 0x30DA, 0x30A2), 0x3303 => array(0x30A2, 0x30FC, 0x30EB), 0x3304 => array(0x30A4, 0x30CB, 0x30F3, 0x30B0),
+                    0x3305 => array(0x30A4, 0x30F3, 0x30C1), 0x3306 => array(0x30A6, 0x30A9, 0x30F3), 0x3307 => array(0x30A8, 0x30B9, 0x30AF, 0x30FC, 0x30C9),
+                    0x3308 => array(0x30A8, 0x30FC, 0x30AB, 0x30FC), 0x3309 => array(0x30AA, 0x30F3, 0x30B9), 0x330A => array(0x30AA, 0x30FC, 0x30E0),
+                    0x330B => array(0x30AB, 0x30A4, 0x30EA), 0x330C => array(0x30AB, 0x30E9, 0x30C3, 0x30C8), 0x330D => array(0x30AB, 0x30ED, 0x30EA, 0x30FC),
+                    0x330E => array(0x30AC, 0x30ED, 0x30F3), 0x330F => array(0x30AC, 0x30F3, 0x30DE), 0x3310 => array(0x30AE, 0x30AC),
+                    0x3311 => array(0x30AE, 0x30CB, 0x30FC), 0x3312 => array(0x30AD, 0x30E5, 0x30EA, 0x30FC), 0x3313 => array(0x30AE, 0x30EB, 0x30C0, 0x30FC),
+                    0x3314 => array(0x30AD, 0x30ED), 0x3315 => array(0x30AD, 0x30ED, 0x30B0, 0x30E9, 0x30E0), 0x3316 => array(0x30AD, 0x30ED, 0x30E1, 0x30FC, 0x30C8, 0x30EB),
+                    0x3317 => array(0x30AD, 0x30ED, 0x30EF, 0x30C3, 0x30C8), 0x3318 => array(0x30B0, 0x30E9, 0x30E0), 0x3319 => array(0x30B0, 0x30E9, 0x30E0, 0x30C8, 0x30F3),
+                    0x331A => array(0x30AF, 0x30EB, 0x30BC, 0x30A4, 0x30ED), 0x331B => array(0x30AF, 0x30ED, 0x30FC, 0x30CD), 0x331C => array(0x30B1, 0x30FC, 0x30B9),
+                    0x331D => array(0x30B3, 0x30EB, 0x30CA), 0x331E => array(0x30B3, 0x30FC, 0x30DD), 0x331F => array(0x30B5, 0x30A4, 0x30AF, 0x30EB),
+                    0x3320 => array(0x30B5, 0x30F3, 0x30C1, 0x30FC, 0x30E0), 0x3321 => array(0x30B7, 0x30EA, 0x30F3, 0x30B0), 0x3322 => array(0x30BB, 0x30F3, 0x30C1),
+                    0x3323 => array(0x30BB, 0x30F3, 0x30C8), 0x3324 => array(0x30C0, 0x30FC, 0x30B9), 0x3325 => array(0x30C7, 0x30B7),
+                    0x3326 => array(0x30C9, 0x30EB), 0x3327 => array(0x30C8, 0x30F3), 0x3328 => array(0x30CA, 0x30CE),
+                    0x3329 => array(0x30CE, 0x30C3, 0x30C8), 0x332A => array(0x30CF, 0x30A4, 0x30C4), 0x332B => array(0x30D1, 0x30FC, 0x30BB, 0x30F3, 0x30C8),
+                    0x332C => array(0x30D1, 0x30FC, 0x30C4), 0x332D => array(0x30D0, 0x30FC, 0x30EC, 0x30EB), 0x332E => array(0x30D4, 0x30A2, 0x30B9, 0x30C8, 0x30EB),
+                    0x332F => array(0x30D4, 0x30AF, 0x30EB), 0x3330 => array(0x30D4, 0x30B3), 0x3331 => array(0x30D3, 0x30EB),
+                    0x3332 => array(0x30D5, 0x30A1, 0x30E9, 0x30C3, 0x30C9), 0x3333 => array(0x30D5, 0x30A3, 0x30FC, 0x30C8), 0x3334 => array(0x30D6, 0x30C3, 0x30B7, 0x30A7, 0x30EB),
+                    0x3335 => array(0x30D5, 0x30E9, 0x30F3), 0x3336 => array(0x30D8, 0x30AF, 0x30BF, 0x30FC, 0x30EB), 0x3337 => array(0x30DA, 0x30BD),
+                    0x3338 => array(0x30DA, 0x30CB, 0x30D2), 0x3339 => array(0x30D8, 0x30EB, 0x30C4), 0x333A => array(0x30DA, 0x30F3, 0x30B9),
+                    0x333B => array(0x30DA, 0x30FC, 0x30B8), 0x333C => array(0x30D9, 0x30FC, 0x30BF), 0x333D => array(0x30DD, 0x30A4, 0x30F3, 0x30C8),
+                    0x333E => array(0x30DC, 0x30EB, 0x30C8), 0x333F => array(0x30DB, 0x30F3), 0x3340 => array(0x30DD, 0x30F3, 0x30C9),
+                    0x3341 => array(0x30DB, 0x30FC, 0x30EB), 0x3342 => array(0x30DB, 0x30FC, 0x30F3), 0x3343 => array(0x30DE, 0x30A4, 0x30AF, 0x30ED),
+                    0x3344 => array(0x30DE, 0x30A4, 0x30EB), 0x3345 => array(0x30DE, 0x30C3, 0x30CF), 0x3346 => array(0x30DE, 0x30EB, 0x30AF),
+                    0x3347 => array(0x30DE, 0x30F3, 0x30B7, 0x30E7, 0x30F3), 0x3348 => array(0x30DF, 0x30AF, 0x30ED, 0x30F3), 0x3349 => array(0x30DF, 0x30EA),
+                    0x334A => array(0x30DF, 0x30EA, 0x30D0, 0x30FC, 0x30EB), 0x334B => array(0x30E1, 0x30AC), 0x334C => array(0x30E1, 0x30AC, 0x30C8, 0x30F3),
+                    0x334D => array(0x30E1, 0x30FC, 0x30C8, 0x30EB), 0x334E => array(0x30E4, 0x30FC, 0x30C9), 0x334F => array(0x30E4, 0x30FC, 0x30EB),
+                    0x3350 => array(0x30E6, 0x30A2, 0x30F3), 0x3351 => array(0x30EA, 0x30C3, 0x30C8, 0x30EB), 0x3352 => array(0x30EA, 0x30E9),
+                    0x3353 => array(0x30EB, 0x30D4, 0x30FC), 0x3354 => array(0x30EB, 0x30FC, 0x30D6, 0x30EB), 0x3355 => array(0x30EC, 0x30E0),
+                    0x3356 => array(0x30EC, 0x30F3, 0x30C8, 0x30B2, 0x30F3), 0x3357 => array(0x30EF, 0x30C3, 0x30C8), 0x3358 => array(0x30, 0x70B9),
+                    0x3359 => array(0x31, 0x70B9), 0x335A => array(0x32, 0x70B9), 0x335B => array(0x33, 0x70B9),
+                    0x335C => array(0x34, 0x70B9), 0x335D => array(0x35, 0x70B9), 0x335E => array(0x36, 0x70B9),
+                    0x335F => array(0x37, 0x70B9), 0x3360 => array(0x38, 0x70B9), 0x3361 => array(0x39, 0x70B9),
+                    0x3362 => array(0x31, 0x30, 0x70B9), 0x3363 => array(0x31, 0x31, 0x70B9), 0x3364 => array(0x31, 0x32, 0x70B9),
+                    0x3365 => array(0x31, 0x33, 0x70B9), 0x3366 => array(0x31, 0x34, 0x70B9), 0x3367 => array(0x31, 0x35, 0x70B9),
+                    0x3368 => array(0x31, 0x36, 0x70B9), 0x3369 => array(0x31, 0x37, 0x70B9), 0x336A => array(0x31, 0x38, 0x70B9),
+                    0x336B => array(0x31, 0x39, 0x70B9), 0x336C => array(0x32, 0x30, 0x70B9), 0x336D => array(0x32, 0x31, 0x70B9),
+                    0x336E => array(0x32, 0x32, 0x70B9), 0x336F => array(0x32, 0x33, 0x70B9), 0x3370 => array(0x32, 0x34, 0x70B9),
+                    0x3371 => array(0x68, 0x70, 0x61), 0x3372 => array(0x64, 0x61), 0x3373 => array(0x61, 0x75),
+                    0x3374 => array(0x62, 0x61, 0x72), 0x3375 => array(0x6F, 0x76), 0x3376 => array(0x70, 0x63),
+                    0x3377 => array(0x64, 0x6D), 0x3378 => array(0x64, 0x6D, 0x32), 0x3379 => array(0x64, 0x6D, 0x33),
+                    0x337A => array(0x69, 0x75), 0x337B => array(0x5E73, 0x6210), 0x337C => array(0x662D, 0x548C),
+                    0x337D => array(0x5927, 0x6B63), 0x337E => array(0x660E, 0x6CBB), 0x337F => array(0x682A, 0x5F0F, 0x4F1A, 0x793E),
+                    0x3380 => array(0x70, 0x61), 0x3381 => array(0x6E, 0x61), 0x3382 => array(0x3BC, 0x61),
+                    0x3383 => array(0x6D, 0x61), 0x3384 => array(0x6B, 0x61), 0x3385 => array(0x6B, 0x62),
+                    0x3386 => array(0x6D, 0x62), 0x3387 => array(0x67, 0x62), 0x3388 => array(0x63, 0x61, 0x6C),
+                    0x3389 => array(0x6B, 0x63, 0x61, 0x6C), 0x338A => array(0x70, 0x66), 0x338B => array(0x6E, 0x66),
+                    0x338C => array(0x3BC, 0x66), 0x338D => array(0x3BC, 0x67), 0x338E => array(0x6D, 0x67),
+                    0x338F => array(0x6B, 0x67), 0x3390 => array(0x68, 0x7A), 0x3391 => array(0x6B, 0x68, 0x7A),
+                    0x3392 => array(0x6D, 0x68, 0x7A), 0x3393 => array(0x67, 0x68, 0x7A), 0x3394 => array(0x74, 0x68, 0x7A),
+                    0x3395 => array(0x3BC, 0x6C), 0x3396 => array(0x6D, 0x6C), 0x3397 => array(0x64, 0x6C),
+                    0x3398 => array(0x6B, 0x6C), 0x3399 => array(0x66, 0x6D), 0x339A => array(0x6E, 0x6D),
+                    0x339B => array(0x3BC, 0x6D), 0x339C => array(0x6D, 0x6D), 0x339D => array(0x63, 0x6D),
+                    0x339E => array(0x6B, 0x6D), 0x339F => array(0x6D, 0x6D, 0x32), 0x33A0 => array(0x63, 0x6D, 0x32),
+                    0x33A1 => array(0x6D, 0x32), 0x33A2 => array(0x6B, 0x6D, 0x32), 0x33A3 => array(0x6D, 0x6D, 0x33),
+                    0x33A4 => array(0x63, 0x6D, 0x33), 0x33A5 => array(0x6D, 0x33), 0x33A6 => array(0x6B, 0x6D, 0x33),
+                    0x33A7 => array(0x6D, 0x2215, 0x73), 0x33A8 => array(0x6D, 0x2215, 0x73, 0x32), 0x33A9 => array(0x70, 0x61),
+                    0x33AA => array(0x6B, 0x70, 0x61), 0x33AB => array(0x6D, 0x70, 0x61), 0x33AC => array(0x67, 0x70, 0x61),
+                    0x33AD => array(0x72, 0x61, 0x64), 0x33AE => array(0x72, 0x61, 0x64, 0x2215, 0x73), 0x33AF => array(0x72, 0x61, 0x64, 0x2215, 0x73, 0x32),
+                    0x33B0 => array(0x70, 0x73), 0x33B1 => array(0x6E, 0x73), 0x33B2 => array(0x3BC, 0x73),
+                    0x33B3 => array(0x6D, 0x73), 0x33B4 => array(0x70, 0x76), 0x33B5 => array(0x6E, 0x76),
+                    0x33B6 => array(0x3BC, 0x76), 0x33B7 => array(0x6D, 0x76), 0x33B8 => array(0x6B, 0x76),
+                    0x33B9 => array(0x6D, 0x76), 0x33BA => array(0x70, 0x77), 0x33BB => array(0x6E, 0x77),
+                    0x33BC => array(0x3BC, 0x77), 0x33BD => array(0x6D, 0x77), 0x33BE => array(0x6B, 0x77),
+                    0x33BF => array(0x6D, 0x77), 0x33C0 => array(0x6B, 0x3C9), 0x33C1 => array(0x6D, 0x3C9),
+                    0x33C3 => array(0x62, 0x71), 0x33C4 => array(0x63, 0x63), 0x33C5 => array(0x63, 0x64),
+                    0x33C6 => array(0x63, 0x2215, 0x6B, 0x67), 0x33C8 => array(0x64, 0x62), 0x33C9 => array(0x67, 0x79),
+                    0x33CA => array(0x68, 0x61), 0x33CB => array(0x68, 0x70), 0x33CC => array(0x69, 0x6E),
+                    0x33CD => array(0x6B, 0x6B), 0x33CE => array(0x6B, 0x6D), 0x33CF => array(0x6B, 0x74),
+                    0x33D0 => array(0x6C, 0x6D), 0x33D1 => array(0x6C, 0x6E), 0x33D2 => array(0x6C, 0x6F, 0x67),
+                    0x33D3 => array(0x6C, 0x78), 0x33D4 => array(0x6D, 0x62), 0x33D5 => array(0x6D, 0x69, 0x6C),
+                    0x33D6 => array(0x6D, 0x6F, 0x6C), 0x33D7 => array(0x70, 0x68), 0x33D9 => array(0x70, 0x70, 0x6D),
+                    0x33DA => array(0x70, 0x72), 0x33DB => array(0x73, 0x72), 0x33DC => array(0x73, 0x76),
+                    0x33DD => array(0x77, 0x62), 0x33DE => array(0x76, 0x2215, 0x6D), 0x33DF => array(0x61, 0x2215, 0x6D),
+                    0x33E0 => array(0x31, 0x65E5), 0x33E1 => array(0x32, 0x65E5), 0x33E2 => array(0x33, 0x65E5),
+                    0x33E3 => array(0x34, 0x65E5), 0x33E4 => array(0x35, 0x65E5), 0x33E5 => array(0x36, 0x65E5),
+                    0x33E6 => array(0x37, 0x65E5), 0x33E7 => array(0x38, 0x65E5), 0x33E8 => array(0x39, 0x65E5),
+                    0x33E9 => array(0x31, 0x30, 0x65E5), 0x33EA => array(0x31, 0x31, 0x65E5), 0x33EB => array(0x31, 0x32, 0x65E5),
+                    0x33EC => array(0x31, 0x33, 0x65E5), 0x33ED => array(0x31, 0x34, 0x65E5), 0x33EE => array(0x31, 0x35, 0x65E5),
+                    0x33EF => array(0x31, 0x36, 0x65E5), 0x33F0 => array(0x31, 0x37, 0x65E5), 0x33F1 => array(0x31, 0x38, 0x65E5),
+                    0x33F2 => array(0x31, 0x39, 0x65E5), 0x33F3 => array(0x32, 0x30, 0x65E5), 0x33F4 => array(0x32, 0x31, 0x65E5),
+                    0x33F5 => array(0x32, 0x32, 0x65E5), 0x33F6 => array(0x32, 0x33, 0x65E5), 0x33F7 => array(0x32, 0x34, 0x65E5),
+                    0x33F8 => array(0x32, 0x35, 0x65E5), 0x33F9 => array(0x32, 0x36, 0x65E5), 0x33FA => array(0x32, 0x37, 0x65E5),
+                    0x33FB => array(0x32, 0x38, 0x65E5), 0x33FC => array(0x32, 0x39, 0x65E5), 0x33FD => array(0x33, 0x30, 0x65E5),
+                    0x33FE => array(0x33, 0x31, 0x65E5), 0x33FF => array(0x67, 0x61, 0x6C), 0xA640 => array(0xA641),
+                    0xA642 => array(0xA643), 0xA644 => array(0xA645), 0xA646 => array(0xA647),
+                    0xA648 => array(0xA649), 0xA64A => array(0xA64B), 0xA64C => array(0xA64D),
+                    0xA64E => array(0xA64F), 0xA650 => array(0xA651), 0xA652 => array(0xA653),
+                    0xA654 => array(0xA655), 0xA656 => array(0xA657), 0xA658 => array(0xA659),
+                    0xA65A => array(0xA65B), 0xA65C => array(0xA65D), 0xA65E => array(0xA65F),
+                    0xA660 => array(0xA661), 0xA662 => array(0xA663), 0xA664 => array(0xA665),
+                    0xA666 => array(0xA667), 0xA668 => array(0xA669), 0xA66A => array(0xA66B),
+                    0xA66C => array(0xA66D), 0xA680 => array(0xA681), 0xA682 => array(0xA683),
+                    0xA684 => array(0xA685), 0xA686 => array(0xA687), 0xA688 => array(0xA689),
+                    0xA68A => array(0xA68B), 0xA68C => array(0xA68D), 0xA68E => array(0xA68F),
+                    0xA690 => array(0xA691), 0xA692 => array(0xA693), 0xA694 => array(0xA695),
+                    0xA696 => array(0xA697), 0xA698 => array(0xA699), 0xA69A => array(0xA69B),
+                    0xA69C => array(0x44A), 0xA69D => array(0x44C), 0xA722 => array(0xA723),
+                    0xA724 => array(0xA725), 0xA726 => array(0xA727), 0xA728 => array(0xA729),
+                    0xA72A => array(0xA72B), 0xA72C => array(0xA72D), 0xA72E => array(0xA72F),
+                    0xA732 => array(0xA733), 0xA734 => array(0xA735), 0xA736 => array(0xA737),
+                    0xA738 => array(0xA739), 0xA73A => array(0xA73B), 0xA73C => array(0xA73D),
+                    0xA73E => array(0xA73F), 0xA740 => array(0xA741), 0xA742 => array(0xA743),
+                    0xA744 => array(0xA745), 0xA746 => array(0xA747), 0xA748 => array(0xA749),
+                    0xA74A => array(0xA74B), 0xA74C => array(0xA74D), 0xA74E => array(0xA74F),
+                    0xA750 => array(0xA751), 0xA752 => array(0xA753), 0xA754 => array(0xA755),
+                    0xA756 => array(0xA757), 0xA758 => array(0xA759), 0xA75A => array(0xA75B),
+                    0xA75C => array(0xA75D), 0xA75E => array(0xA75F), 0xA760 => array(0xA761),
+                    0xA762 => array(0xA763), 0xA764 => array(0xA765), 0xA766 => array(0xA767),
+                    0xA768 => array(0xA769), 0xA76A => array(0xA76B), 0xA76C => array(0xA76D),
+                    0xA76E => array(0xA76F), 0xA770 => array(0xA76F), 0xA779 => array(0xA77A),
+                    0xA77B => array(0xA77C), 0xA77D => array(0x1D79), 0xA77E => array(0xA77F),
+                    0xA780 => array(0xA781), 0xA782 => array(0xA783), 0xA784 => array(0xA785),
+                    0xA786 => array(0xA787), 0xA78B => array(0xA78C), 0xA78D => array(0x265),
+                    0xA790 => array(0xA791), 0xA792 => array(0xA793), 0xA796 => array(0xA797),
+                    0xA798 => array(0xA799), 0xA79A => array(0xA79B), 0xA79C => array(0xA79D),
+                    0xA79E => array(0xA79F), 0xA7A0 => array(0xA7A1), 0xA7A2 => array(0xA7A3),
+                    0xA7A4 => array(0xA7A5), 0xA7A6 => array(0xA7A7), 0xA7A8 => array(0xA7A9),
+                    0xA7AA => array(0x266), 0xA7AB => array(0x25C), 0xA7AC => array(0x261),
+                    0xA7AD => array(0x26C), 0xA7B0 => array(0x29E), 0xA7B1 => array(0x287),
+                    0xA7F8 => array(0x127), 0xA7F9 => array(0x153), 0xAB5C => array(0xA727),
+                    0xAB5D => array(0xAB37), 0xAB5E => array(0x26B), 0xAB5F => array(0xAB52),
+                    0xF900 => array(0x8C48), 0xF901 => array(0x66F4), 0xF902 => array(0x8ECA),
+                    0xF903 => array(0x8CC8), 0xF904 => array(0x6ED1), 0xF905 => array(0x4E32),
+                    0xF906 => array(0x53E5), 0xF907 => array(0x9F9C), 0xF908 => array(0x9F9C),
+                    0xF909 => array(0x5951), 0xF90A => array(0x91D1), 0xF90B => array(0x5587),
+                    0xF90C => array(0x5948), 0xF90D => array(0x61F6), 0xF90E => array(0x7669),
+                    0xF90F => array(0x7F85), 0xF910 => array(0x863F), 0xF911 => array(0x87BA),
+                    0xF912 => array(0x88F8), 0xF913 => array(0x908F), 0xF914 => array(0x6A02),
+                    0xF915 => array(0x6D1B), 0xF916 => array(0x70D9), 0xF917 => array(0x73DE),
+                    0xF918 => array(0x843D), 0xF919 => array(0x916A), 0xF91A => array(0x99F1),
+                    0xF91B => array(0x4E82), 0xF91C => array(0x5375), 0xF91D => array(0x6B04),
+                    0xF91E => array(0x721B), 0xF91F => array(0x862D), 0xF920 => array(0x9E1E),
+                    0xF921 => array(0x5D50), 0xF922 => array(0x6FEB), 0xF923 => array(0x85CD),
+                    0xF924 => array(0x8964), 0xF925 => array(0x62C9), 0xF926 => array(0x81D8),
+                    0xF927 => array(0x881F), 0xF928 => array(0x5ECA), 0xF929 => array(0x6717),
+                    0xF92A => array(0x6D6A), 0xF92B => array(0x72FC), 0xF92C => array(0x90CE),
+                    0xF92D => array(0x4F86), 0xF92E => array(0x51B7), 0xF92F => array(0x52DE),
+                    0xF930 => array(0x64C4), 0xF931 => array(0x6AD3), 0xF932 => array(0x7210),
+                    0xF933 => array(0x76E7), 0xF934 => array(0x8001), 0xF935 => array(0x8606),
+                    0xF936 => array(0x865C), 0xF937 => array(0x8DEF), 0xF938 => array(0x9732),
+                    0xF939 => array(0x9B6F), 0xF93A => array(0x9DFA), 0xF93B => array(0x788C),
+                    0xF93C => array(0x797F), 0xF93D => array(0x7DA0), 0xF93E => array(0x83C9),
+                    0xF93F => array(0x9304), 0xF940 => array(0x9E7F), 0xF941 => array(0x8AD6),
+                    0xF942 => array(0x58DF), 0xF943 => array(0x5F04), 0xF944 => array(0x7C60),
+                    0xF945 => array(0x807E), 0xF946 => array(0x7262), 0xF947 => array(0x78CA),
+                    0xF948 => array(0x8CC2), 0xF949 => array(0x96F7), 0xF94A => array(0x58D8),
+                    0xF94B => array(0x5C62), 0xF94C => array(0x6A13), 0xF94D => array(0x6DDA),
+                    0xF94E => array(0x6F0F), 0xF94F => array(0x7D2F), 0xF950 => array(0x7E37),
+                    0xF951 => array(0x964B), 0xF952 => array(0x52D2), 0xF953 => array(0x808B),
+                    0xF954 => array(0x51DC), 0xF955 => array(0x51CC), 0xF956 => array(0x7A1C),
+                    0xF957 => array(0x7DBE), 0xF958 => array(0x83F1), 0xF959 => array(0x9675),
+                    0xF95A => array(0x8B80), 0xF95B => array(0x62CF), 0xF95C => array(0x6A02),
+                    0xF95D => array(0x8AFE), 0xF95E => array(0x4E39), 0xF95F => array(0x5BE7),
+                    0xF960 => array(0x6012), 0xF961 => array(0x7387), 0xF962 => array(0x7570),
+                    0xF963 => array(0x5317), 0xF964 => array(0x78FB), 0xF965 => array(0x4FBF),
+                    0xF966 => array(0x5FA9), 0xF967 => array(0x4E0D), 0xF968 => array(0x6CCC),
+                    0xF969 => array(0x6578), 0xF96A => array(0x7D22), 0xF96B => array(0x53C3),
+                    0xF96C => array(0x585E), 0xF96D => array(0x7701), 0xF96E => array(0x8449),
+                    0xF96F => array(0x8AAA), 0xF970 => array(0x6BBA), 0xF971 => array(0x8FB0),
+                    0xF972 => array(0x6C88), 0xF973 => array(0x62FE), 0xF974 => array(0x82E5),
+                    0xF975 => array(0x63A0), 0xF976 => array(0x7565), 0xF977 => array(0x4EAE),
+                    0xF978 => array(0x5169), 0xF979 => array(0x51C9), 0xF97A => array(0x6881),
+                    0xF97B => array(0x7CE7), 0xF97C => array(0x826F), 0xF97D => array(0x8AD2),
+                    0xF97E => array(0x91CF), 0xF97F => array(0x52F5), 0xF980 => array(0x5442),
+                    0xF981 => array(0x5973), 0xF982 => array(0x5EEC), 0xF983 => array(0x65C5),
+                    0xF984 => array(0x6FFE), 0xF985 => array(0x792A), 0xF986 => array(0x95AD),
+                    0xF987 => array(0x9A6A), 0xF988 => array(0x9E97), 0xF989 => array(0x9ECE),
+                    0xF98A => array(0x529B), 0xF98B => array(0x66C6), 0xF98C => array(0x6B77),
+                    0xF98D => array(0x8F62), 0xF98E => array(0x5E74), 0xF98F => array(0x6190),
+                    0xF990 => array(0x6200), 0xF991 => array(0x649A), 0xF992 => array(0x6F23),
+                    0xF993 => array(0x7149), 0xF994 => array(0x7489), 0xF995 => array(0x79CA),
+                    0xF996 => array(0x7DF4), 0xF997 => array(0x806F), 0xF998 => array(0x8F26),
+                    0xF999 => array(0x84EE), 0xF99A => array(0x9023), 0xF99B => array(0x934A),
+                    0xF99C => array(0x5217), 0xF99D => array(0x52A3), 0xF99E => array(0x54BD),
+                    0xF99F => array(0x70C8), 0xF9A0 => array(0x88C2), 0xF9A1 => array(0x8AAA),
+                    0xF9A2 => array(0x5EC9), 0xF9A3 => array(0x5FF5), 0xF9A4 => array(0x637B),
+                    0xF9A5 => array(0x6BAE), 0xF9A6 => array(0x7C3E), 0xF9A7 => array(0x7375),
+                    0xF9A8 => array(0x4EE4), 0xF9A9 => array(0x56F9), 0xF9AA => array(0x5BE7),
+                    0xF9AB => array(0x5DBA), 0xF9AC => array(0x601C), 0xF9AD => array(0x73B2),
+                    0xF9AE => array(0x7469), 0xF9AF => array(0x7F9A), 0xF9B0 => array(0x8046),
+                    0xF9B1 => array(0x9234), 0xF9B2 => array(0x96F6), 0xF9B3 => array(0x9748),
+                    0xF9B4 => array(0x9818), 0xF9B5 => array(0x4F8B), 0xF9B6 => array(0x79AE),
+                    0xF9B7 => array(0x91B4), 0xF9B8 => array(0x96B8), 0xF9B9 => array(0x60E1),
+                    0xF9BA => array(0x4E86), 0xF9BB => array(0x50DA), 0xF9BC => array(0x5BEE),
+                    0xF9BD => array(0x5C3F), 0xF9BE => array(0x6599), 0xF9BF => array(0x6A02),
+                    0xF9C0 => array(0x71CE), 0xF9C1 => array(0x7642), 0xF9C2 => array(0x84FC),
+                    0xF9C3 => array(0x907C), 0xF9C4 => array(0x9F8D), 0xF9C5 => array(0x6688),
+                    0xF9C6 => array(0x962E), 0xF9C7 => array(0x5289), 0xF9C8 => array(0x677B),
+                    0xF9C9 => array(0x67F3), 0xF9CA => array(0x6D41), 0xF9CB => array(0x6E9C),
+                    0xF9CC => array(0x7409), 0xF9CD => array(0x7559), 0xF9CE => array(0x786B),
+                    0xF9CF => array(0x7D10), 0xF9D0 => array(0x985E), 0xF9D1 => array(0x516D),
+                    0xF9D2 => array(0x622E), 0xF9D3 => array(0x9678), 0xF9D4 => array(0x502B),
+                    0xF9D5 => array(0x5D19), 0xF9D6 => array(0x6DEA), 0xF9D7 => array(0x8F2A),
+                    0xF9D8 => array(0x5F8B), 0xF9D9 => array(0x6144), 0xF9DA => array(0x6817),
+                    0xF9DB => array(0x7387), 0xF9DC => array(0x9686), 0xF9DD => array(0x5229),
+                    0xF9DE => array(0x540F), 0xF9DF => array(0x5C65), 0xF9E0 => array(0x6613),
+                    0xF9E1 => array(0x674E), 0xF9E2 => array(0x68A8), 0xF9E3 => array(0x6CE5),
+                    0xF9E4 => array(0x7406), 0xF9E5 => array(0x75E2), 0xF9E6 => array(0x7F79),
+                    0xF9E7 => array(0x88CF), 0xF9E8 => array(0x88E1), 0xF9E9 => array(0x91CC),
+                    0xF9EA => array(0x96E2), 0xF9EB => array(0x533F), 0xF9EC => array(0x6EBA),
+                    0xF9ED => array(0x541D), 0xF9EE => array(0x71D0), 0xF9EF => array(0x7498),
+                    0xF9F0 => array(0x85FA), 0xF9F1 => array(0x96A3), 0xF9F2 => array(0x9C57),
+                    0xF9F3 => array(0x9E9F), 0xF9F4 => array(0x6797), 0xF9F5 => array(0x6DCB),
+                    0xF9F6 => array(0x81E8), 0xF9F7 => array(0x7ACB), 0xF9F8 => array(0x7B20),
+                    0xF9F9 => array(0x7C92), 0xF9FA => array(0x72C0), 0xF9FB => array(0x7099),
+                    0xF9FC => array(0x8B58), 0xF9FD => array(0x4EC0), 0xF9FE => array(0x8336),
+                    0xF9FF => array(0x523A), 0xFA00 => array(0x5207), 0xFA01 => array(0x5EA6),
+                    0xFA02 => array(0x62D3), 0xFA03 => array(0x7CD6), 0xFA04 => array(0x5B85),
+                    0xFA05 => array(0x6D1E), 0xFA06 => array(0x66B4), 0xFA07 => array(0x8F3B),
+                    0xFA08 => array(0x884C), 0xFA09 => array(0x964D), 0xFA0A => array(0x898B),
+                    0xFA0B => array(0x5ED3), 0xFA0C => array(0x5140), 0xFA0D => array(0x55C0),
+                    0xFA10 => array(0x585A), 0xFA12 => array(0x6674), 0xFA15 => array(0x51DE),
+                    0xFA16 => array(0x732A), 0xFA17 => array(0x76CA), 0xFA18 => array(0x793C),
+                    0xFA19 => array(0x795E), 0xFA1A => array(0x7965), 0xFA1B => array(0x798F),
+                    0xFA1C => array(0x9756), 0xFA1D => array(0x7CBE), 0xFA1E => array(0x7FBD),
+                    0xFA20 => array(0x8612), 0xFA22 => array(0x8AF8), 0xFA25 => array(0x9038),
+                    0xFA26 => array(0x90FD), 0xFA2A => array(0x98EF), 0xFA2B => array(0x98FC),
+                    0xFA2C => array(0x9928), 0xFA2D => array(0x9DB4), 0xFA2E => array(0x90DE),
+                    0xFA2F => array(0x96B7), 0xFA30 => array(0x4FAE), 0xFA31 => array(0x50E7),
+                    0xFA32 => array(0x514D), 0xFA33 => array(0x52C9), 0xFA34 => array(0x52E4),
+                    0xFA35 => array(0x5351), 0xFA36 => array(0x559D), 0xFA37 => array(0x5606),
+                    0xFA38 => array(0x5668), 0xFA39 => array(0x5840), 0xFA3A => array(0x58A8),
+                    0xFA3B => array(0x5C64), 0xFA3C => array(0x5C6E), 0xFA3D => array(0x6094),
+                    0xFA3E => array(0x6168), 0xFA3F => array(0x618E), 0xFA40 => array(0x61F2),
+                    0xFA41 => array(0x654F), 0xFA42 => array(0x65E2), 0xFA43 => array(0x6691),
+                    0xFA44 => array(0x6885), 0xFA45 => array(0x6D77), 0xFA46 => array(0x6E1A),
+                    0xFA47 => array(0x6F22), 0xFA48 => array(0x716E), 0xFA49 => array(0x722B),
+                    0xFA4A => array(0x7422), 0xFA4B => array(0x7891), 0xFA4C => array(0x793E),
+                    0xFA4D => array(0x7949), 0xFA4E => array(0x7948), 0xFA4F => array(0x7950),
+                    0xFA50 => array(0x7956), 0xFA51 => array(0x795D), 0xFA52 => array(0x798D),
+                    0xFA53 => array(0x798E), 0xFA54 => array(0x7A40), 0xFA55 => array(0x7A81),
+                    0xFA56 => array(0x7BC0), 0xFA57 => array(0x7DF4), 0xFA58 => array(0x7E09),
+                    0xFA59 => array(0x7E41), 0xFA5A => array(0x7F72), 0xFA5B => array(0x8005),
+                    0xFA5C => array(0x81ED), 0xFA5D => array(0x8279), 0xFA5E => array(0x8279),
+                    0xFA5F => array(0x8457), 0xFA60 => array(0x8910), 0xFA61 => array(0x8996),
+                    0xFA62 => array(0x8B01), 0xFA63 => array(0x8B39), 0xFA64 => array(0x8CD3),
+                    0xFA65 => array(0x8D08), 0xFA66 => array(0x8FB6), 0xFA67 => array(0x9038),
+                    0xFA68 => array(0x96E3), 0xFA69 => array(0x97FF), 0xFA6A => array(0x983B),
+                    0xFA6B => array(0x6075), 0xFA6C => array(0x242EE), 0xFA6D => array(0x8218),
+                    0xFA70 => array(0x4E26), 0xFA71 => array(0x51B5), 0xFA72 => array(0x5168),
+                    0xFA73 => array(0x4F80), 0xFA74 => array(0x5145), 0xFA75 => array(0x5180),
+                    0xFA76 => array(0x52C7), 0xFA77 => array(0x52FA), 0xFA78 => array(0x559D),
+                    0xFA79 => array(0x5555), 0xFA7A => array(0x5599), 0xFA7B => array(0x55E2),
+                    0xFA7C => array(0x585A), 0xFA7D => array(0x58B3), 0xFA7E => array(0x5944),
+                    0xFA7F => array(0x5954), 0xFA80 => array(0x5A62), 0xFA81 => array(0x5B28),
+                    0xFA82 => array(0x5ED2), 0xFA83 => array(0x5ED9), 0xFA84 => array(0x5F69),
+                    0xFA85 => array(0x5FAD), 0xFA86 => array(0x60D8), 0xFA87 => array(0x614E),
+                    0xFA88 => array(0x6108), 0xFA89 => array(0x618E), 0xFA8A => array(0x6160),
+                    0xFA8B => array(0x61F2), 0xFA8C => array(0x6234), 0xFA8D => array(0x63C4),
+                    0xFA8E => array(0x641C), 0xFA8F => array(0x6452), 0xFA90 => array(0x6556),
+                    0xFA91 => array(0x6674), 0xFA92 => array(0x6717), 0xFA93 => array(0x671B),
+                    0xFA94 => array(0x6756), 0xFA95 => array(0x6B79), 0xFA96 => array(0x6BBA),
+                    0xFA97 => array(0x6D41), 0xFA98 => array(0x6EDB), 0xFA99 => array(0x6ECB),
+                    0xFA9A => array(0x6F22), 0xFA9B => array(0x701E), 0xFA9C => array(0x716E),
+                    0xFA9D => array(0x77A7), 0xFA9E => array(0x7235), 0xFA9F => array(0x72AF),
+                    0xFAA0 => array(0x732A), 0xFAA1 => array(0x7471), 0xFAA2 => array(0x7506),
+                    0xFAA3 => array(0x753B), 0xFAA4 => array(0x761D), 0xFAA5 => array(0x761F),
+                    0xFAA6 => array(0x76CA), 0xFAA7 => array(0x76DB), 0xFAA8 => array(0x76F4),
+                    0xFAA9 => array(0x774A), 0xFAAA => array(0x7740), 0xFAAB => array(0x78CC),
+                    0xFAAC => array(0x7AB1), 0xFAAD => array(0x7BC0), 0xFAAE => array(0x7C7B),
+                    0xFAAF => array(0x7D5B), 0xFAB0 => array(0x7DF4), 0xFAB1 => array(0x7F3E),
+                    0xFAB2 => array(0x8005), 0xFAB3 => array(0x8352), 0xFAB4 => array(0x83EF),
+                    0xFAB5 => array(0x8779), 0xFAB6 => array(0x8941), 0xFAB7 => array(0x8986),
+                    0xFAB8 => array(0x8996), 0xFAB9 => array(0x8ABF), 0xFABA => array(0x8AF8),
+                    0xFABB => array(0x8ACB), 0xFABC => array(0x8B01), 0xFABD => array(0x8AFE),
+                    0xFABE => array(0x8AED), 0xFABF => array(0x8B39), 0xFAC0 => array(0x8B8A),
+                    0xFAC1 => array(0x8D08), 0xFAC2 => array(0x8F38), 0xFAC3 => array(0x9072),
+                    0xFAC4 => array(0x9199), 0xFAC5 => array(0x9276), 0xFAC6 => array(0x967C),
+                    0xFAC7 => array(0x96E3), 0xFAC8 => array(0x9756), 0xFAC9 => array(0x97DB),
+                    0xFACA => array(0x97FF), 0xFACB => array(0x980B), 0xFACC => array(0x983B),
+                    0xFACD => array(0x9B12), 0xFACE => array(0x9F9C), 0xFACF => array(0x2284A),
+                    0xFAD0 => array(0x22844), 0xFAD1 => array(0x233D5), 0xFAD2 => array(0x3B9D),
+                    0xFAD3 => array(0x4018), 0xFAD4 => array(0x4039), 0xFAD5 => array(0x25249),
+                    0xFAD6 => array(0x25CD0), 0xFAD7 => array(0x27ED3), 0xFAD8 => array(0x9F43),
+                    0xFAD9 => array(0x9F8E), 0xFB00 => array(0x66, 0x66), 0xFB01 => array(0x66, 0x69),
+                    0xFB02 => array(0x66, 0x6C), 0xFB03 => array(0x66, 0x66, 0x69), 0xFB04 => array(0x66, 0x66, 0x6C),
+                    0xFB05 => array(0x73, 0x74), 0xFB06 => array(0x73, 0x74), 0xFB13 => array(0x574, 0x576),
+                    0xFB14 => array(0x574, 0x565), 0xFB15 => array(0x574, 0x56B), 0xFB16 => array(0x57E, 0x576),
+                    0xFB17 => array(0x574, 0x56D), 0xFB1D => array(0x5D9, 0x5B4), 0xFB1F => array(0x5F2, 0x5B7),
+                    0xFB20 => array(0x5E2), 0xFB21 => array(0x5D0), 0xFB22 => array(0x5D3),
+                    0xFB23 => array(0x5D4), 0xFB24 => array(0x5DB), 0xFB25 => array(0x5DC),
+                    0xFB26 => array(0x5DD), 0xFB27 => array(0x5E8), 0xFB28 => array(0x5EA),
+                    0xFB2A => array(0x5E9, 0x5C1), 0xFB2B => array(0x5E9, 0x5C2), 0xFB2C => array(0x5E9, 0x5BC, 0x5C1),
+                    0xFB2D => array(0x5E9, 0x5BC, 0x5C2), 0xFB2E => array(0x5D0, 0x5B7), 0xFB2F => array(0x5D0, 0x5B8),
+                    0xFB30 => array(0x5D0, 0x5BC), 0xFB31 => array(0x5D1, 0x5BC), 0xFB32 => array(0x5D2, 0x5BC),
+                    0xFB33 => array(0x5D3, 0x5BC), 0xFB34 => array(0x5D4, 0x5BC), 0xFB35 => array(0x5D5, 0x5BC),
+                    0xFB36 => array(0x5D6, 0x5BC), 0xFB38 => array(0x5D8, 0x5BC), 0xFB39 => array(0x5D9, 0x5BC),
+                    0xFB3A => array(0x5DA, 0x5BC), 0xFB3B => array(0x5DB, 0x5BC), 0xFB3C => array(0x5DC, 0x5BC),
+                    0xFB3E => array(0x5DE, 0x5BC), 0xFB40 => array(0x5E0, 0x5BC), 0xFB41 => array(0x5E1, 0x5BC),
+                    0xFB43 => array(0x5E3, 0x5BC), 0xFB44 => array(0x5E4, 0x5BC), 0xFB46 => array(0x5E6, 0x5BC),
+                    0xFB47 => array(0x5E7, 0x5BC), 0xFB48 => array(0x5E8, 0x5BC), 0xFB49 => array(0x5E9, 0x5BC),
+                    0xFB4A => array(0x5EA, 0x5BC), 0xFB4B => array(0x5D5, 0x5B9), 0xFB4C => array(0x5D1, 0x5BF),
+                    0xFB4D => array(0x5DB, 0x5BF), 0xFB4E => array(0x5E4, 0x5BF), 0xFB4F => array(0x5D0, 0x5DC),
+                    0xFB50 => array(0x671), 0xFB51 => array(0x671), 0xFB52 => array(0x67B),
+                    0xFB53 => array(0x67B), 0xFB54 => array(0x67B), 0xFB55 => array(0x67B),
+                    0xFB56 => array(0x67E), 0xFB57 => array(0x67E), 0xFB58 => array(0x67E),
+                    0xFB59 => array(0x67E), 0xFB5A => array(0x680), 0xFB5B => array(0x680),
+                    0xFB5C => array(0x680), 0xFB5D => array(0x680), 0xFB5E => array(0x67A),
+                    0xFB5F => array(0x67A), 0xFB60 => array(0x67A), 0xFB61 => array(0x67A),
+                    0xFB62 => array(0x67F), 0xFB63 => array(0x67F), 0xFB64 => array(0x67F),
+                    0xFB65 => array(0x67F), 0xFB66 => array(0x679), 0xFB67 => array(0x679),
+                    0xFB68 => array(0x679), 0xFB69 => array(0x679), 0xFB6A => array(0x6A4),
+                    0xFB6B => array(0x6A4), 0xFB6C => array(0x6A4), 0xFB6D => array(0x6A4),
+                    0xFB6E => array(0x6A6), 0xFB6F => array(0x6A6), 0xFB70 => array(0x6A6),
+                    0xFB71 => array(0x6A6), 0xFB72 => array(0x684), 0xFB73 => array(0x684),
+                    0xFB74 => array(0x684), 0xFB75 => array(0x684), 0xFB76 => array(0x683),
+                    0xFB77 => array(0x683), 0xFB78 => array(0x683), 0xFB79 => array(0x683),
+                    0xFB7A => array(0x686), 0xFB7B => array(0x686), 0xFB7C => array(0x686),
+                    0xFB7D => array(0x686), 0xFB7E => array(0x687), 0xFB7F => array(0x687),
+                    0xFB80 => array(0x687), 0xFB81 => array(0x687), 0xFB82 => array(0x68D),
+                    0xFB83 => array(0x68D), 0xFB84 => array(0x68C), 0xFB85 => array(0x68C),
+                    0xFB86 => array(0x68E), 0xFB87 => array(0x68E), 0xFB88 => array(0x688),
+                    0xFB89 => array(0x688), 0xFB8A => array(0x698), 0xFB8B => array(0x698),
+                    0xFB8C => array(0x691), 0xFB8D => array(0x691), 0xFB8E => array(0x6A9),
+                    0xFB8F => array(0x6A9), 0xFB90 => array(0x6A9), 0xFB91 => array(0x6A9),
+                    0xFB92 => array(0x6AF), 0xFB93 => array(0x6AF), 0xFB94 => array(0x6AF),
+                    0xFB95 => array(0x6AF), 0xFB96 => array(0x6B3), 0xFB97 => array(0x6B3),
+                    0xFB98 => array(0x6B3), 0xFB99 => array(0x6B3), 0xFB9A => array(0x6B1),
+                    0xFB9B => array(0x6B1), 0xFB9C => array(0x6B1), 0xFB9D => array(0x6B1),
+                    0xFB9E => array(0x6BA), 0xFB9F => array(0x6BA), 0xFBA0 => array(0x6BB),
+                    0xFBA1 => array(0x6BB), 0xFBA2 => array(0x6BB), 0xFBA3 => array(0x6BB),
+                    0xFBA4 => array(0x6C0), 0xFBA5 => array(0x6C0), 0xFBA6 => array(0x6C1),
+                    0xFBA7 => array(0x6C1), 0xFBA8 => array(0x6C1), 0xFBA9 => array(0x6C1),
+                    0xFBAA => array(0x6BE), 0xFBAB => array(0x6BE), 0xFBAC => array(0x6BE),
+                    0xFBAD => array(0x6BE), 0xFBAE => array(0x6D2), 0xFBAF => array(0x6D2),
+                    0xFBB0 => array(0x6D3), 0xFBB1 => array(0x6D3), 0xFBD3 => array(0x6AD),
+                    0xFBD4 => array(0x6AD), 0xFBD5 => array(0x6AD), 0xFBD6 => array(0x6AD),
+                    0xFBD7 => array(0x6C7), 0xFBD8 => array(0x6C7), 0xFBD9 => array(0x6C6),
+                    0xFBDA => array(0x6C6), 0xFBDB => array(0x6C8), 0xFBDC => array(0x6C8),
+                    0xFBDD => array(0x6C7, 0x674), 0xFBDE => array(0x6CB), 0xFBDF => array(0x6CB),
+                    0xFBE0 => array(0x6C5), 0xFBE1 => array(0x6C5), 0xFBE2 => array(0x6C9),
+                    0xFBE3 => array(0x6C9), 0xFBE4 => array(0x6D0), 0xFBE5 => array(0x6D0),
+                    0xFBE6 => array(0x6D0), 0xFBE7 => array(0x6D0), 0xFBE8 => array(0x649),
+                    0xFBE9 => array(0x649), 0xFBEA => array(0x626, 0x627), 0xFBEB => array(0x626, 0x627),
+                    0xFBEC => array(0x626, 0x6D5), 0xFBED => array(0x626, 0x6D5), 0xFBEE => array(0x626, 0x648),
+                    0xFBEF => array(0x626, 0x648), 0xFBF0 => array(0x626, 0x6C7), 0xFBF1 => array(0x626, 0x6C7),
+                    0xFBF2 => array(0x626, 0x6C6), 0xFBF3 => array(0x626, 0x6C6), 0xFBF4 => array(0x626, 0x6C8),
+                    0xFBF5 => array(0x626, 0x6C8), 0xFBF6 => array(0x626, 0x6D0), 0xFBF7 => array(0x626, 0x6D0),
+                    0xFBF8 => array(0x626, 0x6D0), 0xFBF9 => array(0x626, 0x649), 0xFBFA => array(0x626, 0x649),
+                    0xFBFB => array(0x626, 0x649), 0xFBFC => array(0x6CC), 0xFBFD => array(0x6CC),
+                    0xFBFE => array(0x6CC), 0xFBFF => array(0x6CC), 0xFC00 => array(0x626, 0x62C),
+                    0xFC01 => array(0x626, 0x62D), 0xFC02 => array(0x626, 0x645), 0xFC03 => array(0x626, 0x649),
+                    0xFC04 => array(0x626, 0x64A), 0xFC05 => array(0x628, 0x62C), 0xFC06 => array(0x628, 0x62D),
+                    0xFC07 => array(0x628, 0x62E), 0xFC08 => array(0x628, 0x645), 0xFC09 => array(0x628, 0x649),
+                    0xFC0A => array(0x628, 0x64A), 0xFC0B => array(0x62A, 0x62C), 0xFC0C => array(0x62A, 0x62D),
+                    0xFC0D => array(0x62A, 0x62E), 0xFC0E => array(0x62A, 0x645), 0xFC0F => array(0x62A, 0x649),
+                    0xFC10 => array(0x62A, 0x64A), 0xFC11 => array(0x62B, 0x62C), 0xFC12 => array(0x62B, 0x645),
+                    0xFC13 => array(0x62B, 0x649), 0xFC14 => array(0x62B, 0x64A), 0xFC15 => array(0x62C, 0x62D),
+                    0xFC16 => array(0x62C, 0x645), 0xFC17 => array(0x62D, 0x62C), 0xFC18 => array(0x62D, 0x645),
+                    0xFC19 => array(0x62E, 0x62C), 0xFC1A => array(0x62E, 0x62D), 0xFC1B => array(0x62E, 0x645),
+                    0xFC1C => array(0x633, 0x62C), 0xFC1D => array(0x633, 0x62D), 0xFC1E => array(0x633, 0x62E),
+                    0xFC1F => array(0x633, 0x645), 0xFC20 => array(0x635, 0x62D), 0xFC21 => array(0x635, 0x645),
+                    0xFC22 => array(0x636, 0x62C), 0xFC23 => array(0x636, 0x62D), 0xFC24 => array(0x636, 0x62E),
+                    0xFC25 => array(0x636, 0x645), 0xFC26 => array(0x637, 0x62D), 0xFC27 => array(0x637, 0x645),
+                    0xFC28 => array(0x638, 0x645), 0xFC29 => array(0x639, 0x62C), 0xFC2A => array(0x639, 0x645),
+                    0xFC2B => array(0x63A, 0x62C), 0xFC2C => array(0x63A, 0x645), 0xFC2D => array(0x641, 0x62C),
+                    0xFC2E => array(0x641, 0x62D), 0xFC2F => array(0x641, 0x62E), 0xFC30 => array(0x641, 0x645),
+                    0xFC31 => array(0x641, 0x649), 0xFC32 => array(0x641, 0x64A), 0xFC33 => array(0x642, 0x62D),
+                    0xFC34 => array(0x642, 0x645), 0xFC35 => array(0x642, 0x649), 0xFC36 => array(0x642, 0x64A),
+                    0xFC37 => array(0x643, 0x627), 0xFC38 => array(0x643, 0x62C), 0xFC39 => array(0x643, 0x62D),
+                    0xFC3A => array(0x643, 0x62E), 0xFC3B => array(0x643, 0x644), 0xFC3C => array(0x643, 0x645),
+                    0xFC3D => array(0x643, 0x649), 0xFC3E => array(0x643, 0x64A), 0xFC3F => array(0x644, 0x62C),
+                    0xFC40 => array(0x644, 0x62D), 0xFC41 => array(0x644, 0x62E), 0xFC42 => array(0x644, 0x645),
+                    0xFC43 => array(0x644, 0x649), 0xFC44 => array(0x644, 0x64A), 0xFC45 => array(0x645, 0x62C),
+                    0xFC46 => array(0x645, 0x62D), 0xFC47 => array(0x645, 0x62E), 0xFC48 => array(0x645, 0x645),
+                    0xFC49 => array(0x645, 0x649), 0xFC4A => array(0x645, 0x64A), 0xFC4B => array(0x646, 0x62C),
+                    0xFC4C => array(0x646, 0x62D), 0xFC4D => array(0x646, 0x62E), 0xFC4E => array(0x646, 0x645),
+                    0xFC4F => array(0x646, 0x649), 0xFC50 => array(0x646, 0x64A), 0xFC51 => array(0x647, 0x62C),
+                    0xFC52 => array(0x647, 0x645), 0xFC53 => array(0x647, 0x649), 0xFC54 => array(0x647, 0x64A),
+                    0xFC55 => array(0x64A, 0x62C), 0xFC56 => array(0x64A, 0x62D), 0xFC57 => array(0x64A, 0x62E),
+                    0xFC58 => array(0x64A, 0x645), 0xFC59 => array(0x64A, 0x649), 0xFC5A => array(0x64A, 0x64A),
+                    0xFC5B => array(0x630, 0x670), 0xFC5C => array(0x631, 0x670), 0xFC5D => array(0x649, 0x670),
+                    0xFC64 => array(0x626, 0x631), 0xFC65 => array(0x626, 0x632), 0xFC66 => array(0x626, 0x645),
+                    0xFC67 => array(0x626, 0x646), 0xFC68 => array(0x626, 0x649), 0xFC69 => array(0x626, 0x64A),
+                    0xFC6A => array(0x628, 0x631), 0xFC6B => array(0x628, 0x632), 0xFC6C => array(0x628, 0x645),
+                    0xFC6D => array(0x628, 0x646), 0xFC6E => array(0x628, 0x649), 0xFC6F => array(0x628, 0x64A),
+                    0xFC70 => array(0x62A, 0x631), 0xFC71 => array(0x62A, 0x632), 0xFC72 => array(0x62A, 0x645),
+                    0xFC73 => array(0x62A, 0x646), 0xFC74 => array(0x62A, 0x649), 0xFC75 => array(0x62A, 0x64A),
+                    0xFC76 => array(0x62B, 0x631), 0xFC77 => array(0x62B, 0x632), 0xFC78 => array(0x62B, 0x645),
+                    0xFC79 => array(0x62B, 0x646), 0xFC7A => array(0x62B, 0x649), 0xFC7B => array(0x62B, 0x64A),
+                    0xFC7C => array(0x641, 0x649), 0xFC7D => array(0x641, 0x64A), 0xFC7E => array(0x642, 0x649),
+                    0xFC7F => array(0x642, 0x64A), 0xFC80 => array(0x643, 0x627), 0xFC81 => array(0x643, 0x644),
+                    0xFC82 => array(0x643, 0x645), 0xFC83 => array(0x643, 0x649), 0xFC84 => array(0x643, 0x64A),
+                    0xFC85 => array(0x644, 0x645), 0xFC86 => array(0x644, 0x649), 0xFC87 => array(0x644, 0x64A),
+                    0xFC88 => array(0x645, 0x627), 0xFC89 => array(0x645, 0x645), 0xFC8A => array(0x646, 0x631),
+                    0xFC8B => array(0x646, 0x632), 0xFC8C => array(0x646, 0x645), 0xFC8D => array(0x646, 0x646),
+                    0xFC8E => array(0x646, 0x649), 0xFC8F => array(0x646, 0x64A), 0xFC90 => array(0x649, 0x670),
+                    0xFC91 => array(0x64A, 0x631), 0xFC92 => array(0x64A, 0x632), 0xFC93 => array(0x64A, 0x645),
+                    0xFC94 => array(0x64A, 0x646), 0xFC95 => array(0x64A, 0x649), 0xFC96 => array(0x64A, 0x64A),
+                    0xFC97 => array(0x626, 0x62C), 0xFC98 => array(0x626, 0x62D), 0xFC99 => array(0x626, 0x62E),
+                    0xFC9A => array(0x626, 0x645), 0xFC9B => array(0x626, 0x647), 0xFC9C => array(0x628, 0x62C),
+                    0xFC9D => array(0x628, 0x62D), 0xFC9E => array(0x628, 0x62E), 0xFC9F => array(0x628, 0x645),
+                    0xFCA0 => array(0x628, 0x647), 0xFCA1 => array(0x62A, 0x62C), 0xFCA2 => array(0x62A, 0x62D),
+                    0xFCA3 => array(0x62A, 0x62E), 0xFCA4 => array(0x62A, 0x645), 0xFCA5 => array(0x62A, 0x647),
+                    0xFCA6 => array(0x62B, 0x645), 0xFCA7 => array(0x62C, 0x62D), 0xFCA8 => array(0x62C, 0x645),
+                    0xFCA9 => array(0x62D, 0x62C), 0xFCAA => array(0x62D, 0x645), 0xFCAB => array(0x62E, 0x62C),
+                    0xFCAC => array(0x62E, 0x645), 0xFCAD => array(0x633, 0x62C), 0xFCAE => array(0x633, 0x62D),
+                    0xFCAF => array(0x633, 0x62E), 0xFCB0 => array(0x633, 0x645), 0xFCB1 => array(0x635, 0x62D),
+                    0xFCB2 => array(0x635, 0x62E), 0xFCB3 => array(0x635, 0x645), 0xFCB4 => array(0x636, 0x62C),
+                    0xFCB5 => array(0x636, 0x62D), 0xFCB6 => array(0x636, 0x62E), 0xFCB7 => array(0x636, 0x645),
+                    0xFCB8 => array(0x637, 0x62D), 0xFCB9 => array(0x638, 0x645), 0xFCBA => array(0x639, 0x62C),
+                    0xFCBB => array(0x639, 0x645), 0xFCBC => array(0x63A, 0x62C), 0xFCBD => array(0x63A, 0x645),
+                    0xFCBE => array(0x641, 0x62C), 0xFCBF => array(0x641, 0x62D), 0xFCC0 => array(0x641, 0x62E),
+                    0xFCC1 => array(0x641, 0x645), 0xFCC2 => array(0x642, 0x62D), 0xFCC3 => array(0x642, 0x645),
+                    0xFCC4 => array(0x643, 0x62C), 0xFCC5 => array(0x643, 0x62D), 0xFCC6 => array(0x643, 0x62E),
+                    0xFCC7 => array(0x643, 0x644), 0xFCC8 => array(0x643, 0x645), 0xFCC9 => array(0x644, 0x62C),
+                    0xFCCA => array(0x644, 0x62D), 0xFCCB => array(0x644, 0x62E), 0xFCCC => array(0x644, 0x645),
+                    0xFCCD => array(0x644, 0x647), 0xFCCE => array(0x645, 0x62C), 0xFCCF => array(0x645, 0x62D),
+                    0xFCD0 => array(0x645, 0x62E), 0xFCD1 => array(0x645, 0x645), 0xFCD2 => array(0x646, 0x62C),
+                    0xFCD3 => array(0x646, 0x62D), 0xFCD4 => array(0x646, 0x62E), 0xFCD5 => array(0x646, 0x645),
+                    0xFCD6 => array(0x646, 0x647), 0xFCD7 => array(0x647, 0x62C), 0xFCD8 => array(0x647, 0x645),
+                    0xFCD9 => array(0x647, 0x670), 0xFCDA => array(0x64A, 0x62C), 0xFCDB => array(0x64A, 0x62D),
+                    0xFCDC => array(0x64A, 0x62E), 0xFCDD => array(0x64A, 0x645), 0xFCDE => array(0x64A, 0x647),
+                    0xFCDF => array(0x626, 0x645), 0xFCE0 => array(0x626, 0x647), 0xFCE1 => array(0x628, 0x645),
+                    0xFCE2 => array(0x628, 0x647), 0xFCE3 => array(0x62A, 0x645), 0xFCE4 => array(0x62A, 0x647),
+                    0xFCE5 => array(0x62B, 0x645), 0xFCE6 => array(0x62B, 0x647), 0xFCE7 => array(0x633, 0x645),
+                    0xFCE8 => array(0x633, 0x647), 0xFCE9 => array(0x634, 0x645), 0xFCEA => array(0x634, 0x647),
+                    0xFCEB => array(0x643, 0x644), 0xFCEC => array(0x643, 0x645), 0xFCED => array(0x644, 0x645),
+                    0xFCEE => array(0x646, 0x645), 0xFCEF => array(0x646, 0x647), 0xFCF0 => array(0x64A, 0x645),
+                    0xFCF1 => array(0x64A, 0x647), 0xFCF2 => array(0x640, 0x64E, 0x651), 0xFCF3 => array(0x640, 0x64F, 0x651),
+                    0xFCF4 => array(0x640, 0x650, 0x651), 0xFCF5 => array(0x637, 0x649), 0xFCF6 => array(0x637, 0x64A),
+                    0xFCF7 => array(0x639, 0x649), 0xFCF8 => array(0x639, 0x64A), 0xFCF9 => array(0x63A, 0x649),
+                    0xFCFA => array(0x63A, 0x64A), 0xFCFB => array(0x633, 0x649), 0xFCFC => array(0x633, 0x64A),
+                    0xFCFD => array(0x634, 0x649), 0xFCFE => array(0x634, 0x64A), 0xFCFF => array(0x62D, 0x649),
+                    0xFD00 => array(0x62D, 0x64A), 0xFD01 => array(0x62C, 0x649), 0xFD02 => array(0x62C, 0x64A),
+                    0xFD03 => array(0x62E, 0x649), 0xFD04 => array(0x62E, 0x64A), 0xFD05 => array(0x635, 0x649),
+                    0xFD06 => array(0x635, 0x64A), 0xFD07 => array(0x636, 0x649), 0xFD08 => array(0x636, 0x64A),
+                    0xFD09 => array(0x634, 0x62C), 0xFD0A => array(0x634, 0x62D), 0xFD0B => array(0x634, 0x62E),
+                    0xFD0C => array(0x634, 0x645), 0xFD0D => array(0x634, 0x631), 0xFD0E => array(0x633, 0x631),
+                    0xFD0F => array(0x635, 0x631), 0xFD10 => array(0x636, 0x631), 0xFD11 => array(0x637, 0x649),
+                    0xFD12 => array(0x637, 0x64A), 0xFD13 => array(0x639, 0x649), 0xFD14 => array(0x639, 0x64A),
+                    0xFD15 => array(0x63A, 0x649), 0xFD16 => array(0x63A, 0x64A), 0xFD17 => array(0x633, 0x649),
+                    0xFD18 => array(0x633, 0x64A), 0xFD19 => array(0x634, 0x649), 0xFD1A => array(0x634, 0x64A),
+                    0xFD1B => array(0x62D, 0x649), 0xFD1C => array(0x62D, 0x64A), 0xFD1D => array(0x62C, 0x649),
+                    0xFD1E => array(0x62C, 0x64A), 0xFD1F => array(0x62E, 0x649), 0xFD20 => array(0x62E, 0x64A),
+                    0xFD21 => array(0x635, 0x649), 0xFD22 => array(0x635, 0x64A), 0xFD23 => array(0x636, 0x649),
+                    0xFD24 => array(0x636, 0x64A), 0xFD25 => array(0x634, 0x62C), 0xFD26 => array(0x634, 0x62D),
+                    0xFD27 => array(0x634, 0x62E), 0xFD28 => array(0x634, 0x645), 0xFD29 => array(0x634, 0x631),
+                    0xFD2A => array(0x633, 0x631), 0xFD2B => array(0x635, 0x631), 0xFD2C => array(0x636, 0x631),
+                    0xFD2D => array(0x634, 0x62C), 0xFD2E => array(0x634, 0x62D), 0xFD2F => array(0x634, 0x62E),
+                    0xFD30 => array(0x634, 0x645), 0xFD31 => array(0x633, 0x647), 0xFD32 => array(0x634, 0x647),
+                    0xFD33 => array(0x637, 0x645), 0xFD34 => array(0x633, 0x62C), 0xFD35 => array(0x633, 0x62D),
+                    0xFD36 => array(0x633, 0x62E), 0xFD37 => array(0x634, 0x62C), 0xFD38 => array(0x634, 0x62D),
+                    0xFD39 => array(0x634, 0x62E), 0xFD3A => array(0x637, 0x645), 0xFD3B => array(0x638, 0x645),
+                    0xFD3C => array(0x627, 0x64B), 0xFD3D => array(0x627, 0x64B), 0xFD50 => array(0x62A, 0x62C, 0x645),
+                    0xFD51 => array(0x62A, 0x62D, 0x62C), 0xFD52 => array(0x62A, 0x62D, 0x62C), 0xFD53 => array(0x62A, 0x62D, 0x645),
+                    0xFD54 => array(0x62A, 0x62E, 0x645), 0xFD55 => array(0x62A, 0x645, 0x62C), 0xFD56 => array(0x62A, 0x645, 0x62D),
+                    0xFD57 => array(0x62A, 0x645, 0x62E), 0xFD58 => array(0x62C, 0x645, 0x62D), 0xFD59 => array(0x62C, 0x645, 0x62D),
+                    0xFD5A => array(0x62D, 0x645, 0x64A), 0xFD5B => array(0x62D, 0x645, 0x649), 0xFD5C => array(0x633, 0x62D, 0x62C),
+                    0xFD5D => array(0x633, 0x62C, 0x62D), 0xFD5E => array(0x633, 0x62C, 0x649), 0xFD5F => array(0x633, 0x645, 0x62D),
+                    0xFD60 => array(0x633, 0x645, 0x62D), 0xFD61 => array(0x633, 0x645, 0x62C), 0xFD62 => array(0x633, 0x645, 0x645),
+                    0xFD63 => array(0x633, 0x645, 0x645), 0xFD64 => array(0x635, 0x62D, 0x62D), 0xFD65 => array(0x635, 0x62D, 0x62D),
+                    0xFD66 => array(0x635, 0x645, 0x645), 0xFD67 => array(0x634, 0x62D, 0x645), 0xFD68 => array(0x634, 0x62D, 0x645),
+                    0xFD69 => array(0x634, 0x62C, 0x64A), 0xFD6A => array(0x634, 0x645, 0x62E), 0xFD6B => array(0x634, 0x645, 0x62E),
+                    0xFD6C => array(0x634, 0x645, 0x645), 0xFD6D => array(0x634, 0x645, 0x645), 0xFD6E => array(0x636, 0x62D, 0x649),
+                    0xFD6F => array(0x636, 0x62E, 0x645), 0xFD70 => array(0x636, 0x62E, 0x645), 0xFD71 => array(0x637, 0x645, 0x62D),
+                    0xFD72 => array(0x637, 0x645, 0x62D), 0xFD73 => array(0x637, 0x645, 0x645), 0xFD74 => array(0x637, 0x645, 0x64A),
+                    0xFD75 => array(0x639, 0x62C, 0x645), 0xFD76 => array(0x639, 0x645, 0x645), 0xFD77 => array(0x639, 0x645, 0x645),
+                    0xFD78 => array(0x639, 0x645, 0x649), 0xFD79 => array(0x63A, 0x645, 0x645), 0xFD7A => array(0x63A, 0x645, 0x64A),
+                    0xFD7B => array(0x63A, 0x645, 0x649), 0xFD7C => array(0x641, 0x62E, 0x645), 0xFD7D => array(0x641, 0x62E, 0x645),
+                    0xFD7E => array(0x642, 0x645, 0x62D), 0xFD7F => array(0x642, 0x645, 0x645), 0xFD80 => array(0x644, 0x62D, 0x645),
+                    0xFD81 => array(0x644, 0x62D, 0x64A), 0xFD82 => array(0x644, 0x62D, 0x649), 0xFD83 => array(0x644, 0x62C, 0x62C),
+                    0xFD84 => array(0x644, 0x62C, 0x62C), 0xFD85 => array(0x644, 0x62E, 0x645), 0xFD86 => array(0x644, 0x62E, 0x645),
+                    0xFD87 => array(0x644, 0x645, 0x62D), 0xFD88 => array(0x644, 0x645, 0x62D), 0xFD89 => array(0x645, 0x62D, 0x62C),
+                    0xFD8A => array(0x645, 0x62D, 0x645), 0xFD8B => array(0x645, 0x62D, 0x64A), 0xFD8C => array(0x645, 0x62C, 0x62D),
+                    0xFD8D => array(0x645, 0x62C, 0x645), 0xFD8E => array(0x645, 0x62E, 0x62C), 0xFD8F => array(0x645, 0x62E, 0x645),
+                    0xFD92 => array(0x645, 0x62C, 0x62E), 0xFD93 => array(0x647, 0x645, 0x62C), 0xFD94 => array(0x647, 0x645, 0x645),
+                    0xFD95 => array(0x646, 0x62D, 0x645), 0xFD96 => array(0x646, 0x62D, 0x649), 0xFD97 => array(0x646, 0x62C, 0x645),
+                    0xFD98 => array(0x646, 0x62C, 0x645), 0xFD99 => array(0x646, 0x62C, 0x649), 0xFD9A => array(0x646, 0x645, 0x64A),
+                    0xFD9B => array(0x646, 0x645, 0x649), 0xFD9C => array(0x64A, 0x645, 0x645), 0xFD9D => array(0x64A, 0x645, 0x645),
+                    0xFD9E => array(0x628, 0x62E, 0x64A), 0xFD9F => array(0x62A, 0x62C, 0x64A), 0xFDA0 => array(0x62A, 0x62C, 0x649),
+                    0xFDA1 => array(0x62A, 0x62E, 0x64A), 0xFDA2 => array(0x62A, 0x62E, 0x649), 0xFDA3 => array(0x62A, 0x645, 0x64A),
+                    0xFDA4 => array(0x62A, 0x645, 0x649), 0xFDA5 => array(0x62C, 0x645, 0x64A), 0xFDA6 => array(0x62C, 0x62D, 0x649),
+                    0xFDA7 => array(0x62C, 0x645, 0x649), 0xFDA8 => array(0x633, 0x62E, 0x649), 0xFDA9 => array(0x635, 0x62D, 0x64A),
+                    0xFDAA => array(0x634, 0x62D, 0x64A), 0xFDAB => array(0x636, 0x62D, 0x64A), 0xFDAC => array(0x644, 0x62C, 0x64A),
+                    0xFDAD => array(0x644, 0x645, 0x64A), 0xFDAE => array(0x64A, 0x62D, 0x64A), 0xFDAF => array(0x64A, 0x62C, 0x64A),
+                    0xFDB0 => array(0x64A, 0x645, 0x64A), 0xFDB1 => array(0x645, 0x645, 0x64A), 0xFDB2 => array(0x642, 0x645, 0x64A),
+                    0xFDB3 => array(0x646, 0x62D, 0x64A), 0xFDB4 => array(0x642, 0x645, 0x62D), 0xFDB5 => array(0x644, 0x62D, 0x645),
+                    0xFDB6 => array(0x639, 0x645, 0x64A), 0xFDB7 => array(0x643, 0x645, 0x64A), 0xFDB8 => array(0x646, 0x62C, 0x62D),
+                    0xFDB9 => array(0x645, 0x62E, 0x64A), 0xFDBA => array(0x644, 0x62C, 0x645), 0xFDBB => array(0x643, 0x645, 0x645),
+                    0xFDBC => array(0x644, 0x62C, 0x645), 0xFDBD => array(0x646, 0x62C, 0x62D), 0xFDBE => array(0x62C, 0x62D, 0x64A),
+                    0xFDBF => array(0x62D, 0x62C, 0x64A), 0xFDC0 => array(0x645, 0x62C, 0x64A), 0xFDC1 => array(0x641, 0x645, 0x64A),
+                    0xFDC2 => array(0x628, 0x62D, 0x64A), 0xFDC3 => array(0x643, 0x645, 0x645), 0xFDC4 => array(0x639, 0x62C, 0x645),
+                    0xFDC5 => array(0x635, 0x645, 0x645), 0xFDC6 => array(0x633, 0x62E, 0x64A), 0xFDC7 => array(0x646, 0x62C, 0x64A),
+                    0xFDF0 => array(0x635, 0x644, 0x6D2), 0xFDF1 => array(0x642, 0x644, 0x6D2), 0xFDF2 => array(0x627, 0x644, 0x644, 0x647),
+                    0xFDF3 => array(0x627, 0x643, 0x628, 0x631), 0xFDF4 => array(0x645, 0x62D, 0x645, 0x62F), 0xFDF5 => array(0x635, 0x644, 0x639, 0x645),
+                    0xFDF6 => array(0x631, 0x633, 0x648, 0x644), 0xFDF7 => array(0x639, 0x644, 0x64A, 0x647), 0xFDF8 => array(0x648, 0x633, 0x644, 0x645),
+                    0xFDF9 => array(0x635, 0x644, 0x649), 0xFDFC => array(0x631, 0x6CC, 0x627, 0x644), 0xFE11 => array(0x3001),
+                    0xFE17 => array(0x3016), 0xFE18 => array(0x3017), 0xFE31 => array(0x2014),
+                    0xFE32 => array(0x2013), 0xFE39 => array(0x3014), 0xFE3A => array(0x3015),
+                    0xFE3B => array(0x3010), 0xFE3C => array(0x3011), 0xFE3D => array(0x300A),
+                    0xFE3E => array(0x300B), 0xFE3F => array(0x3008), 0xFE40 => array(0x3009),
+                    0xFE41 => array(0x300C), 0xFE42 => array(0x300D), 0xFE43 => array(0x300E),
+                    0xFE44 => array(0x300F), 0xFE51 => array(0x3001), 0xFE58 => array(0x2014),
+                    0xFE5D => array(0x3014), 0xFE5E => array(0x3015), 0xFE63 => array(0x2D),
+                    0xFE71 => array(0x640, 0x64B), 0xFE77 => array(0x640, 0x64E), 0xFE79 => array(0x640, 0x64F),
+                    0xFE7B => array(0x640, 0x650), 0xFE7D => array(0x640, 0x651), 0xFE7F => array(0x640, 0x652),
+                    0xFE80 => array(0x621), 0xFE81 => array(0x622), 0xFE82 => array(0x622),
+                    0xFE83 => array(0x623), 0xFE84 => array(0x623), 0xFE85 => array(0x624),
+                    0xFE86 => array(0x624), 0xFE87 => array(0x625), 0xFE88 => array(0x625),
+                    0xFE89 => array(0x626), 0xFE8A => array(0x626), 0xFE8B => array(0x626),
+                    0xFE8C => array(0x626), 0xFE8D => array(0x627), 0xFE8E => array(0x627),
+                    0xFE8F => array(0x628), 0xFE90 => array(0x628), 0xFE91 => array(0x628),
+                    0xFE92 => array(0x628), 0xFE93 => array(0x629), 0xFE94 => array(0x629),
+                    0xFE95 => array(0x62A), 0xFE96 => array(0x62A), 0xFE97 => array(0x62A),
+                    0xFE98 => array(0x62A), 0xFE99 => array(0x62B), 0xFE9A => array(0x62B),
+                    0xFE9B => array(0x62B), 0xFE9C => array(0x62B), 0xFE9D => array(0x62C),
+                    0xFE9E => array(0x62C), 0xFE9F => array(0x62C), 0xFEA0 => array(0x62C),
+                    0xFEA1 => array(0x62D), 0xFEA2 => array(0x62D), 0xFEA3 => array(0x62D),
+                    0xFEA4 => array(0x62D), 0xFEA5 => array(0x62E), 0xFEA6 => array(0x62E),
+                    0xFEA7 => array(0x62E), 0xFEA8 => array(0x62E), 0xFEA9 => array(0x62F),
+                    0xFEAA => array(0x62F), 0xFEAB => array(0x630), 0xFEAC => array(0x630),
+                    0xFEAD => array(0x631), 0xFEAE => array(0x631), 0xFEAF => array(0x632),
+                    0xFEB0 => array(0x632), 0xFEB1 => array(0x633), 0xFEB2 => array(0x633),
+                    0xFEB3 => array(0x633), 0xFEB4 => array(0x633), 0xFEB5 => array(0x634),
+                    0xFEB6 => array(0x634), 0xFEB7 => array(0x634), 0xFEB8 => array(0x634),
+                    0xFEB9 => array(0x635), 0xFEBA => array(0x635), 0xFEBB => array(0x635),
+                    0xFEBC => array(0x635), 0xFEBD => array(0x636), 0xFEBE => array(0x636),
+                    0xFEBF => array(0x636), 0xFEC0 => array(0x636), 0xFEC1 => array(0x637),
+                    0xFEC2 => array(0x637), 0xFEC3 => array(0x637), 0xFEC4 => array(0x637),
+                    0xFEC5 => array(0x638), 0xFEC6 => array(0x638), 0xFEC7 => array(0x638),
+                    0xFEC8 => array(0x638), 0xFEC9 => array(0x639), 0xFECA => array(0x639),
+                    0xFECB => array(0x639), 0xFECC => array(0x639), 0xFECD => array(0x63A),
+                    0xFECE => array(0x63A), 0xFECF => array(0x63A), 0xFED0 => array(0x63A),
+                    0xFED1 => array(0x641), 0xFED2 => array(0x641), 0xFED3 => array(0x641),
+                    0xFED4 => array(0x641), 0xFED5 => array(0x642), 0xFED6 => array(0x642),
+                    0xFED7 => array(0x642), 0xFED8 => array(0x642), 0xFED9 => array(0x643),
+                    0xFEDA => array(0x643), 0xFEDB => array(0x643), 0xFEDC => array(0x643),
+                    0xFEDD => array(0x644), 0xFEDE => array(0x644), 0xFEDF => array(0x644),
+                    0xFEE0 => array(0x644), 0xFEE1 => array(0x645), 0xFEE2 => array(0x645),
+                    0xFEE3 => array(0x645), 0xFEE4 => array(0x645), 0xFEE5 => array(0x646),
+                    0xFEE6 => array(0x646), 0xFEE7 => array(0x646), 0xFEE8 => array(0x646),
+                    0xFEE9 => array(0x647), 0xFEEA => array(0x647), 0xFEEB => array(0x647),
+                    0xFEEC => array(0x647), 0xFEED => array(0x648), 0xFEEE => array(0x648),
+                    0xFEEF => array(0x649), 0xFEF0 => array(0x649), 0xFEF1 => array(0x64A),
+                    0xFEF2 => array(0x64A), 0xFEF3 => array(0x64A), 0xFEF4 => array(0x64A),
+                    0xFEF5 => array(0x644, 0x622), 0xFEF6 => array(0x644, 0x622), 0xFEF7 => array(0x644, 0x623),
+                    0xFEF8 => array(0x644, 0x623), 0xFEF9 => array(0x644, 0x625), 0xFEFA => array(0x644, 0x625),
+                    0xFEFB => array(0x644, 0x627), 0xFEFC => array(0x644, 0x627), 0xFF0D => array(0x2D),
+                    0xFF0E => array(0x2E), 0xFF10 => array(0x30), 0xFF11 => array(0x31),
+                    0xFF12 => array(0x32), 0xFF13 => array(0x33), 0xFF14 => array(0x34),
+                    0xFF15 => array(0x35), 0xFF16 => array(0x36), 0xFF17 => array(0x37),
+                    0xFF18 => array(0x38), 0xFF19 => array(0x39), 0xFF21 => array(0x61),
+                    0xFF22 => array(0x62), 0xFF23 => array(0x63), 0xFF24 => array(0x64),
+                    0xFF25 => array(0x65), 0xFF26 => array(0x66), 0xFF27 => array(0x67),
+                    0xFF28 => array(0x68), 0xFF29 => array(0x69), 0xFF2A => array(0x6A),
+                    0xFF2B => array(0x6B), 0xFF2C => array(0x6C), 0xFF2D => array(0x6D),
+                    0xFF2E => array(0x6E), 0xFF2F => array(0x6F), 0xFF30 => array(0x70),
+                    0xFF31 => array(0x71), 0xFF32 => array(0x72), 0xFF33 => array(0x73),
+                    0xFF34 => array(0x74), 0xFF35 => array(0x75), 0xFF36 => array(0x76),
+                    0xFF37 => array(0x77), 0xFF38 => array(0x78), 0xFF39 => array(0x79),
+                    0xFF3A => array(0x7A), 0xFF41 => array(0x61), 0xFF42 => array(0x62),
+                    0xFF43 => array(0x63), 0xFF44 => array(0x64), 0xFF45 => array(0x65),
+                    0xFF46 => array(0x66), 0xFF47 => array(0x67), 0xFF48 => array(0x68),
+                    0xFF49 => array(0x69), 0xFF4A => array(0x6A), 0xFF4B => array(0x6B),
+                    0xFF4C => array(0x6C), 0xFF4D => array(0x6D), 0xFF4E => array(0x6E),
+                    0xFF4F => array(0x6F), 0xFF50 => array(0x70), 0xFF51 => array(0x71),
+                    0xFF52 => array(0x72), 0xFF53 => array(0x73), 0xFF54 => array(0x74),
+                    0xFF55 => array(0x75), 0xFF56 => array(0x76), 0xFF57 => array(0x77),
+                    0xFF58 => array(0x78), 0xFF59 => array(0x79), 0xFF5A => array(0x7A),
+                    0xFF5F => array(0x2985), 0xFF60 => array(0x2986), 0xFF61 => array(0x2E),
+                    0xFF62 => array(0x300C), 0xFF63 => array(0x300D), 0xFF64 => array(0x3001),
+                    0xFF65 => array(0x30FB), 0xFF66 => array(0x30F2), 0xFF67 => array(0x30A1),
+                    0xFF68 => array(0x30A3), 0xFF69 => array(0x30A5), 0xFF6A => array(0x30A7),
+                    0xFF6B => array(0x30A9), 0xFF6C => array(0x30E3), 0xFF6D => array(0x30E5),
+                    0xFF6E => array(0x30E7), 0xFF6F => array(0x30C3), 0xFF70 => array(0x30FC),
+                    0xFF71 => array(0x30A2), 0xFF72 => array(0x30A4), 0xFF73 => array(0x30A6),
+                    0xFF74 => array(0x30A8), 0xFF75 => array(0x30AA), 0xFF76 => array(0x30AB),
+                    0xFF77 => array(0x30AD), 0xFF78 => array(0x30AF), 0xFF79 => array(0x30B1),
+                    0xFF7A => array(0x30B3), 0xFF7B => array(0x30B5), 0xFF7C => array(0x30B7),
+                    0xFF7D => array(0x30B9), 0xFF7E => array(0x30BB), 0xFF7F => array(0x30BD),
+                    0xFF80 => array(0x30BF), 0xFF81 => array(0x30C1), 0xFF82 => array(0x30C4),
+                    0xFF83 => array(0x30C6), 0xFF84 => array(0x30C8), 0xFF85 => array(0x30CA),
+                    0xFF86 => array(0x30CB), 0xFF87 => array(0x30CC), 0xFF88 => array(0x30CD),
+                    0xFF89 => array(0x30CE), 0xFF8A => array(0x30CF), 0xFF8B => array(0x30D2),
+                    0xFF8C => array(0x30D5), 0xFF8D => array(0x30D8), 0xFF8E => array(0x30DB),
+                    0xFF8F => array(0x30DE), 0xFF90 => array(0x30DF), 0xFF91 => array(0x30E0),
+                    0xFF92 => array(0x30E1), 0xFF93 => array(0x30E2), 0xFF94 => array(0x30E4),
+                    0xFF95 => array(0x30E6), 0xFF96 => array(0x30E8), 0xFF97 => array(0x30E9),
+                    0xFF98 => array(0x30EA), 0xFF99 => array(0x30EB), 0xFF9A => array(0x30EC),
+                    0xFF9B => array(0x30ED), 0xFF9C => array(0x30EF), 0xFF9D => array(0x30F3),
+                    0xFF9E => array(0x3099), 0xFF9F => array(0x309A), 0xFFA1 => array(0x1100),
+                    0xFFA2 => array(0x1101), 0xFFA3 => array(0x11AA), 0xFFA4 => array(0x1102),
+                    0xFFA5 => array(0x11AC), 0xFFA6 => array(0x11AD), 0xFFA7 => array(0x1103),
+                    0xFFA8 => array(0x1104), 0xFFA9 => array(0x1105), 0xFFAA => array(0x11B0),
+                    0xFFAB => array(0x11B1), 0xFFAC => array(0x11B2), 0xFFAD => array(0x11B3),
+                    0xFFAE => array(0x11B4), 0xFFAF => array(0x11B5), 0xFFB0 => array(0x111A),
+                    0xFFB1 => array(0x1106), 0xFFB2 => array(0x1107), 0xFFB3 => array(0x1108),
+                    0xFFB4 => array(0x1121), 0xFFB5 => array(0x1109), 0xFFB6 => array(0x110A),
+                    0xFFB7 => array(0x110B), 0xFFB8 => array(0x110C), 0xFFB9 => array(0x110D),
+                    0xFFBA => array(0x110E), 0xFFBB => array(0x110F), 0xFFBC => array(0x1110),
+                    0xFFBD => array(0x1111), 0xFFBE => array(0x1112), 0xFFC2 => array(0x1161),
+                    0xFFC3 => array(0x1162), 0xFFC4 => array(0x1163), 0xFFC5 => array(0x1164),
+                    0xFFC6 => array(0x1165), 0xFFC7 => array(0x1166), 0xFFCA => array(0x1167),
+                    0xFFCB => array(0x1168), 0xFFCC => array(0x1169), 0xFFCD => array(0x116A),
+                    0xFFCE => array(0x116B), 0xFFCF => array(0x116C), 0xFFD2 => array(0x116D),
+                    0xFFD3 => array(0x116E), 0xFFD4 => array(0x116F), 0xFFD5 => array(0x1170),
+                    0xFFD6 => array(0x1171), 0xFFD7 => array(0x1172), 0xFFDA => array(0x1173),
+                    0xFFDB => array(0x1174), 0xFFDC => array(0x1175), 0xFFE0 => array(0xA2),
+                    0xFFE1 => array(0xA3), 0xFFE2 => array(0xAC), 0xFFE4 => array(0xA6),
+                    0xFFE5 => array(0xA5), 0xFFE6 => array(0x20A9), 0xFFE8 => array(0x2502),
+                    0xFFE9 => array(0x2190), 0xFFEA => array(0x2191), 0xFFEB => array(0x2192),
+                    0xFFEC => array(0x2193), 0xFFED => array(0x25A0), 0xFFEE => array(0x25CB),
+                    0x10400 => array(0x10428), 0x10401 => array(0x10429), 0x10402 => array(0x1042A),
+                    0x10403 => array(0x1042B), 0x10404 => array(0x1042C), 0x10405 => array(0x1042D),
+                    0x10406 => array(0x1042E), 0x10407 => array(0x1042F), 0x10408 => array(0x10430),
+                    0x10409 => array(0x10431), 0x1040A => array(0x10432), 0x1040B => array(0x10433),
+                    0x1040C => array(0x10434), 0x1040D => array(0x10435), 0x1040E => array(0x10436),
+                    0x1040F => array(0x10437), 0x10410 => array(0x10438), 0x10411 => array(0x10439),
+                    0x10412 => array(0x1043A), 0x10413 => array(0x1043B), 0x10414 => array(0x1043C),
+                    0x10415 => array(0x1043D), 0x10416 => array(0x1043E), 0x10417 => array(0x1043F),
+                    0x10418 => array(0x10440), 0x10419 => array(0x10441), 0x1041A => array(0x10442),
+                    0x1041B => array(0x10443), 0x1041C => array(0x10444), 0x1041D => array(0x10445),
+                    0x1041E => array(0x10446), 0x1041F => array(0x10447), 0x10420 => array(0x10448),
+                    0x10421 => array(0x10449), 0x10422 => array(0x1044A), 0x10423 => array(0x1044B),
+                    0x10424 => array(0x1044C), 0x10425 => array(0x1044D), 0x10426 => array(0x1044E),
+                    0x10427 => array(0x1044F), 0x118A0 => array(0x118C0), 0x118A1 => array(0x118C1),
+                    0x118A2 => array(0x118C2), 0x118A3 => array(0x118C3), 0x118A4 => array(0x118C4),
+                    0x118A5 => array(0x118C5), 0x118A6 => array(0x118C6), 0x118A7 => array(0x118C7),
+                    0x118A8 => array(0x118C8), 0x118A9 => array(0x118C9), 0x118AA => array(0x118CA),
+                    0x118AB => array(0x118CB), 0x118AC => array(0x118CC), 0x118AD => array(0x118CD),
+                    0x118AE => array(0x118CE), 0x118AF => array(0x118CF), 0x118B0 => array(0x118D0),
+                    0x118B1 => array(0x118D1), 0x118B2 => array(0x118D2), 0x118B3 => array(0x118D3),
+                    0x118B4 => array(0x118D4), 0x118B5 => array(0x118D5), 0x118B6 => array(0x118D6),
+                    0x118B7 => array(0x118D7), 0x118B8 => array(0x118D8), 0x118B9 => array(0x118D9),
+                    0x118BA => array(0x118DA), 0x118BB => array(0x118DB), 0x118BC => array(0x118DC),
+                    0x118BD => array(0x118DD), 0x118BE => array(0x118DE), 0x118BF => array(0x118DF),
+                    0x1D15E => array(0x1D157, 0x1D165), 0x1D15F => array(0x1D158, 0x1D165), 0x1D160 => array(0x1D158, 0x1D165, 0x1D16E),
+                    0x1D161 => array(0x1D158, 0x1D165, 0x1D16F), 0x1D162 => array(0x1D158, 0x1D165, 0x1D170), 0x1D163 => array(0x1D158, 0x1D165, 0x1D171),
+                    0x1D164 => array(0x1D158, 0x1D165, 0x1D172), 0x1D1BB => array(0x1D1B9, 0x1D165), 0x1D1BC => array(0x1D1BA, 0x1D165),
+                    0x1D1BD => array(0x1D1B9, 0x1D165, 0x1D16E), 0x1D1BE => array(0x1D1BA, 0x1D165, 0x1D16E), 0x1D1BF => array(0x1D1B9, 0x1D165, 0x1D16F),
+                    0x1D1C0 => array(0x1D1BA, 0x1D165, 0x1D16F), 0x1D400 => array(0x61), 0x1D401 => array(0x62),
+                    0x1D402 => array(0x63), 0x1D403 => array(0x64), 0x1D404 => array(0x65),
+                    0x1D405 => array(0x66), 0x1D406 => array(0x67), 0x1D407 => array(0x68),
+                    0x1D408 => array(0x69), 0x1D409 => array(0x6A), 0x1D40A => array(0x6B),
+                    0x1D40B => array(0x6C), 0x1D40C => array(0x6D), 0x1D40D => array(0x6E),
+                    0x1D40E => array(0x6F), 0x1D40F => array(0x70), 0x1D410 => array(0x71),
+                    0x1D411 => array(0x72), 0x1D412 => array(0x73), 0x1D413 => array(0x74),
+                    0x1D414 => array(0x75), 0x1D415 => array(0x76), 0x1D416 => array(0x77),
+                    0x1D417 => array(0x78), 0x1D418 => array(0x79), 0x1D419 => array(0x7A),
+                    0x1D41A => array(0x61), 0x1D41B => array(0x62), 0x1D41C => array(0x63),
+                    0x1D41D => array(0x64), 0x1D41E => array(0x65), 0x1D41F => array(0x66),
+                    0x1D420 => array(0x67), 0x1D421 => array(0x68), 0x1D422 => array(0x69),
+                    0x1D423 => array(0x6A), 0x1D424 => array(0x6B), 0x1D425 => array(0x6C),
+                    0x1D426 => array(0x6D), 0x1D427 => array(0x6E), 0x1D428 => array(0x6F),
+                    0x1D429 => array(0x70), 0x1D42A => array(0x71), 0x1D42B => array(0x72),
+                    0x1D42C => array(0x73), 0x1D42D => array(0x74), 0x1D42E => array(0x75),
+                    0x1D42F => array(0x76), 0x1D430 => array(0x77), 0x1D431 => array(0x78),
+                    0x1D432 => array(0x79), 0x1D433 => array(0x7A), 0x1D434 => array(0x61),
+                    0x1D435 => array(0x62), 0x1D436 => array(0x63), 0x1D437 => array(0x64),
+                    0x1D438 => array(0x65), 0x1D439 => array(0x66), 0x1D43A => array(0x67),
+                    0x1D43B => array(0x68), 0x1D43C => array(0x69), 0x1D43D => array(0x6A),
+                    0x1D43E => array(0x6B), 0x1D43F => array(0x6C), 0x1D440 => array(0x6D),
+                    0x1D441 => array(0x6E), 0x1D442 => array(0x6F), 0x1D443 => array(0x70),
+                    0x1D444 => array(0x71), 0x1D445 => array(0x72), 0x1D446 => array(0x73),
+                    0x1D447 => array(0x74), 0x1D448 => array(0x75), 0x1D449 => array(0x76),
+                    0x1D44A => array(0x77), 0x1D44B => array(0x78), 0x1D44C => array(0x79),
+                    0x1D44D => array(0x7A), 0x1D44E => array(0x61), 0x1D44F => array(0x62),
+                    0x1D450 => array(0x63), 0x1D451 => array(0x64), 0x1D452 => array(0x65),
+                    0x1D453 => array(0x66), 0x1D454 => array(0x67), 0x1D456 => array(0x69),
+                    0x1D457 => array(0x6A), 0x1D458 => array(0x6B), 0x1D459 => array(0x6C),
+                    0x1D45A => array(0x6D), 0x1D45B => array(0x6E), 0x1D45C => array(0x6F),
+                    0x1D45D => array(0x70), 0x1D45E => array(0x71), 0x1D45F => array(0x72),
+                    0x1D460 => array(0x73), 0x1D461 => array(0x74), 0x1D462 => array(0x75),
+                    0x1D463 => array(0x76), 0x1D464 => array(0x77), 0x1D465 => array(0x78),
+                    0x1D466 => array(0x79), 0x1D467 => array(0x7A), 0x1D468 => array(0x61),
+                    0x1D469 => array(0x62), 0x1D46A => array(0x63), 0x1D46B => array(0x64),
+                    0x1D46C => array(0x65), 0x1D46D => array(0x66), 0x1D46E => array(0x67),
+                    0x1D46F => array(0x68), 0x1D470 => array(0x69), 0x1D471 => array(0x6A),
+                    0x1D472 => array(0x6B), 0x1D473 => array(0x6C), 0x1D474 => array(0x6D),
+                    0x1D475 => array(0x6E), 0x1D476 => array(0x6F), 0x1D477 => array(0x70),
+                    0x1D478 => array(0x71), 0x1D479 => array(0x72), 0x1D47A => array(0x73),
+                    0x1D47B => array(0x74), 0x1D47C => array(0x75), 0x1D47D => array(0x76),
+                    0x1D47E => array(0x77), 0x1D47F => array(0x78), 0x1D480 => array(0x79),
+                    0x1D481 => array(0x7A), 0x1D482 => array(0x61), 0x1D483 => array(0x62),
+                    0x1D484 => array(0x63), 0x1D485 => array(0x64), 0x1D486 => array(0x65),
+                    0x1D487 => array(0x66), 0x1D488 => array(0x67), 0x1D489 => array(0x68),
+                    0x1D48A => array(0x69), 0x1D48B => array(0x6A), 0x1D48C => array(0x6B),
+                    0x1D48D => array(0x6C), 0x1D48E => array(0x6D), 0x1D48F => array(0x6E),
+                    0x1D490 => array(0x6F), 0x1D491 => array(0x70), 0x1D492 => array(0x71),
+                    0x1D493 => array(0x72), 0x1D494 => array(0x73), 0x1D495 => array(0x74),
+                    0x1D496 => array(0x75), 0x1D497 => array(0x76), 0x1D498 => array(0x77),
+                    0x1D499 => array(0x78), 0x1D49A => array(0x79), 0x1D49B => array(0x7A),
+                    0x1D49C => array(0x61), 0x1D49E => array(0x63), 0x1D49F => array(0x64),
+                    0x1D4A2 => array(0x67), 0x1D4A5 => array(0x6A), 0x1D4A6 => array(0x6B),
+                    0x1D4A9 => array(0x6E), 0x1D4AA => array(0x6F), 0x1D4AB => array(0x70),
+                    0x1D4AC => array(0x71), 0x1D4AE => array(0x73), 0x1D4AF => array(0x74),
+                    0x1D4B0 => array(0x75), 0x1D4B1 => array(0x76), 0x1D4B2 => array(0x77),
+                    0x1D4B3 => array(0x78), 0x1D4B4 => array(0x79), 0x1D4B5 => array(0x7A),
+                    0x1D4B6 => array(0x61), 0x1D4B7 => array(0x62), 0x1D4B8 => array(0x63),
+                    0x1D4B9 => array(0x64), 0x1D4BB => array(0x66), 0x1D4BD => array(0x68),
+                    0x1D4BE => array(0x69), 0x1D4BF => array(0x6A), 0x1D4C0 => array(0x6B),
+                    0x1D4C1 => array(0x6C), 0x1D4C2 => array(0x6D), 0x1D4C3 => array(0x6E),
+                    0x1D4C5 => array(0x70), 0x1D4C6 => array(0x71), 0x1D4C7 => array(0x72),
+                    0x1D4C8 => array(0x73), 0x1D4C9 => array(0x74), 0x1D4CA => array(0x75),
+                    0x1D4CB => array(0x76), 0x1D4CC => array(0x77), 0x1D4CD => array(0x78),
+                    0x1D4CE => array(0x79), 0x1D4CF => array(0x7A), 0x1D4D0 => array(0x61),
+                    0x1D4D1 => array(0x62), 0x1D4D2 => array(0x63), 0x1D4D3 => array(0x64),
+                    0x1D4D4 => array(0x65), 0x1D4D5 => array(0x66), 0x1D4D6 => array(0x67),
+                    0x1D4D7 => array(0x68), 0x1D4D8 => array(0x69), 0x1D4D9 => array(0x6A),
+                    0x1D4DA => array(0x6B), 0x1D4DB => array(0x6C), 0x1D4DC => array(0x6D),
+                    0x1D4DD => array(0x6E), 0x1D4DE => array(0x6F), 0x1D4DF => array(0x70),
+                    0x1D4E0 => array(0x71), 0x1D4E1 => array(0x72), 0x1D4E2 => array(0x73),
+                    0x1D4E3 => array(0x74), 0x1D4E4 => array(0x75), 0x1D4E5 => array(0x76),
+                    0x1D4E6 => array(0x77), 0x1D4E7 => array(0x78), 0x1D4E8 => array(0x79),
+                    0x1D4E9 => array(0x7A), 0x1D4EA => array(0x61), 0x1D4EB => array(0x62),
+                    0x1D4EC => array(0x63), 0x1D4ED => array(0x64), 0x1D4EE => array(0x65),
+                    0x1D4EF => array(0x66), 0x1D4F0 => array(0x67), 0x1D4F1 => array(0x68),
+                    0x1D4F2 => array(0x69), 0x1D4F3 => array(0x6A), 0x1D4F4 => array(0x6B),
+                    0x1D4F5 => array(0x6C), 0x1D4F6 => array(0x6D), 0x1D4F7 => array(0x6E),
+                    0x1D4F8 => array(0x6F), 0x1D4F9 => array(0x70), 0x1D4FA => array(0x71),
+                    0x1D4FB => array(0x72), 0x1D4FC => array(0x73), 0x1D4FD => array(0x74),
+                    0x1D4FE => array(0x75), 0x1D4FF => array(0x76), 0x1D500 => array(0x77),
+                    0x1D501 => array(0x78), 0x1D502 => array(0x79), 0x1D503 => array(0x7A),
+                    0x1D504 => array(0x61), 0x1D505 => array(0x62), 0x1D507 => array(0x64),
+                    0x1D508 => array(0x65), 0x1D509 => array(0x66), 0x1D50A => array(0x67),
+                    0x1D50D => array(0x6A), 0x1D50E => array(0x6B), 0x1D50F => array(0x6C),
+                    0x1D510 => array(0x6D), 0x1D511 => array(0x6E), 0x1D512 => array(0x6F),
+                    0x1D513 => array(0x70), 0x1D514 => array(0x71), 0x1D516 => array(0x73),
+                    0x1D517 => array(0x74), 0x1D518 => array(0x75), 0x1D519 => array(0x76),
+                    0x1D51A => array(0x77), 0x1D51B => array(0x78), 0x1D51C => array(0x79),
+                    0x1D51E => array(0x61), 0x1D51F => array(0x62), 0x1D520 => array(0x63),
+                    0x1D521 => array(0x64), 0x1D522 => array(0x65), 0x1D523 => array(0x66),
+                    0x1D524 => array(0x67), 0x1D525 => array(0x68), 0x1D526 => array(0x69),
+                    0x1D527 => array(0x6A), 0x1D528 => array(0x6B), 0x1D529 => array(0x6C),
+                    0x1D52A => array(0x6D), 0x1D52B => array(0x6E), 0x1D52C => array(0x6F),
+                    0x1D52D => array(0x70), 0x1D52E => array(0x71), 0x1D52F => array(0x72),
+                    0x1D530 => array(0x73), 0x1D531 => array(0x74), 0x1D532 => array(0x75),
+                    0x1D533 => array(0x76), 0x1D534 => array(0x77), 0x1D535 => array(0x78),
+                    0x1D536 => array(0x79), 0x1D537 => array(0x7A), 0x1D538 => array(0x61),
+                    0x1D539 => array(0x62), 0x1D53B => array(0x64), 0x1D53C => array(0x65),
+                    0x1D53D => array(0x66), 0x1D53E => array(0x67), 0x1D540 => array(0x69),
+                    0x1D541 => array(0x6A), 0x1D542 => array(0x6B), 0x1D543 => array(0x6C),
+                    0x1D544 => array(0x6D), 0x1D546 => array(0x6F), 0x1D54A => array(0x73),
+                    0x1D54B => array(0x74), 0x1D54C => array(0x75), 0x1D54D => array(0x76),
+                    0x1D54E => array(0x77), 0x1D54F => array(0x78), 0x1D550 => array(0x79),
+                    0x1D552 => array(0x61), 0x1D553 => array(0x62), 0x1D554 => array(0x63),
+                    0x1D555 => array(0x64), 0x1D556 => array(0x65), 0x1D557 => array(0x66),
+                    0x1D558 => array(0x67), 0x1D559 => array(0x68), 0x1D55A => array(0x69),
+                    0x1D55B => array(0x6A), 0x1D55C => array(0x6B), 0x1D55D => array(0x6C),
+                    0x1D55E => array(0x6D), 0x1D55F => array(0x6E), 0x1D560 => array(0x6F),
+                    0x1D561 => array(0x70), 0x1D562 => array(0x71), 0x1D563 => array(0x72),
+                    0x1D564 => array(0x73), 0x1D565 => array(0x74), 0x1D566 => array(0x75),
+                    0x1D567 => array(0x76), 0x1D568 => array(0x77), 0x1D569 => array(0x78),
+                    0x1D56A => array(0x79), 0x1D56B => array(0x7A), 0x1D56C => array(0x61),
+                    0x1D56D => array(0x62), 0x1D56E => array(0x63), 0x1D56F => array(0x64),
+                    0x1D570 => array(0x65), 0x1D571 => array(0x66), 0x1D572 => array(0x67),
+                    0x1D573 => array(0x68), 0x1D574 => array(0x69), 0x1D575 => array(0x6A),
+                    0x1D576 => array(0x6B), 0x1D577 => array(0x6C), 0x1D578 => array(0x6D),
+                    0x1D579 => array(0x6E), 0x1D57A => array(0x6F), 0x1D57B => array(0x70),
+                    0x1D57C => array(0x71), 0x1D57D => array(0x72), 0x1D57E => array(0x73),
+                    0x1D57F => array(0x74), 0x1D580 => array(0x75), 0x1D581 => array(0x76),
+                    0x1D582 => array(0x77), 0x1D583 => array(0x78), 0x1D584 => array(0x79),
+                    0x1D585 => array(0x7A), 0x1D586 => array(0x61), 0x1D587 => array(0x62),
+                    0x1D588 => array(0x63), 0x1D589 => array(0x64), 0x1D58A => array(0x65),
+                    0x1D58B => array(0x66), 0x1D58C => array(0x67), 0x1D58D => array(0x68),
+                    0x1D58E => array(0x69), 0x1D58F => array(0x6A), 0x1D590 => array(0x6B),
+                    0x1D591 => array(0x6C), 0x1D592 => array(0x6D), 0x1D593 => array(0x6E),
+                    0x1D594 => array(0x6F), 0x1D595 => array(0x70), 0x1D596 => array(0x71),
+                    0x1D597 => array(0x72), 0x1D598 => array(0x73), 0x1D599 => array(0x74),
+                    0x1D59A => array(0x75), 0x1D59B => array(0x76), 0x1D59C => array(0x77),
+                    0x1D59D => array(0x78), 0x1D59E => array(0x79), 0x1D59F => array(0x7A),
+                    0x1D5A0 => array(0x61), 0x1D5A1 => array(0x62), 0x1D5A2 => array(0x63),
+                    0x1D5A3 => array(0x64), 0x1D5A4 => array(0x65), 0x1D5A5 => array(0x66),
+                    0x1D5A6 => array(0x67), 0x1D5A7 => array(0x68), 0x1D5A8 => array(0x69),
+                    0x1D5A9 => array(0x6A), 0x1D5AA => array(0x6B), 0x1D5AB => array(0x6C),
+                    0x1D5AC => array(0x6D), 0x1D5AD => array(0x6E), 0x1D5AE => array(0x6F),
+                    0x1D5AF => array(0x70), 0x1D5B0 => array(0x71), 0x1D5B1 => array(0x72),
+                    0x1D5B2 => array(0x73), 0x1D5B3 => array(0x74), 0x1D5B4 => array(0x75),
+                    0x1D5B5 => array(0x76), 0x1D5B6 => array(0x77), 0x1D5B7 => array(0x78),
+                    0x1D5B8 => array(0x79), 0x1D5B9 => array(0x7A), 0x1D5BA => array(0x61),
+                    0x1D5BB => array(0x62), 0x1D5BC => array(0x63), 0x1D5BD => array(0x64),
+                    0x1D5BE => array(0x65), 0x1D5BF => array(0x66), 0x1D5C0 => array(0x67),
+                    0x1D5C1 => array(0x68), 0x1D5C2 => array(0x69), 0x1D5C3 => array(0x6A),
+                    0x1D5C4 => array(0x6B), 0x1D5C5 => array(0x6C), 0x1D5C6 => array(0x6D),
+                    0x1D5C7 => array(0x6E), 0x1D5C8 => array(0x6F), 0x1D5C9 => array(0x70),
+                    0x1D5CA => array(0x71), 0x1D5CB => array(0x72), 0x1D5CC => array(0x73),
+                    0x1D5CD => array(0x74), 0x1D5CE => array(0x75), 0x1D5CF => array(0x76),
+                    0x1D5D0 => array(0x77), 0x1D5D1 => array(0x78), 0x1D5D2 => array(0x79),
+                    0x1D5D3 => array(0x7A), 0x1D5D4 => array(0x61), 0x1D5D5 => array(0x62),
+                    0x1D5D6 => array(0x63), 0x1D5D7 => array(0x64), 0x1D5D8 => array(0x65),
+                    0x1D5D9 => array(0x66), 0x1D5DA => array(0x67), 0x1D5DB => array(0x68),
+                    0x1D5DC => array(0x69), 0x1D5DD => array(0x6A), 0x1D5DE => array(0x6B),
+                    0x1D5DF => array(0x6C), 0x1D5E0 => array(0x6D), 0x1D5E1 => array(0x6E),
+                    0x1D5E2 => array(0x6F), 0x1D5E3 => array(0x70), 0x1D5E4 => array(0x71),
+                    0x1D5E5 => array(0x72), 0x1D5E6 => array(0x73), 0x1D5E7 => array(0x74),
+                    0x1D5E8 => array(0x75), 0x1D5E9 => array(0x76), 0x1D5EA => array(0x77),
+                    0x1D5EB => array(0x78), 0x1D5EC => array(0x79), 0x1D5ED => array(0x7A),
+                    0x1D5EE => array(0x61), 0x1D5EF => array(0x62), 0x1D5F0 => array(0x63),
+                    0x1D5F1 => array(0x64), 0x1D5F2 => array(0x65), 0x1D5F3 => array(0x66),
+                    0x1D5F4 => array(0x67), 0x1D5F5 => array(0x68), 0x1D5F6 => array(0x69),
+                    0x1D5F7 => array(0x6A), 0x1D5F8 => array(0x6B), 0x1D5F9 => array(0x6C),
+                    0x1D5FA => array(0x6D), 0x1D5FB => array(0x6E), 0x1D5FC => array(0x6F),
+                    0x1D5FD => array(0x70), 0x1D5FE => array(0x71), 0x1D5FF => array(0x72),
+                    0x1D600 => array(0x73), 0x1D601 => array(0x74), 0x1D602 => array(0x75),
+                    0x1D603 => array(0x76), 0x1D604 => array(0x77), 0x1D605 => array(0x78),
+                    0x1D606 => array(0x79), 0x1D607 => array(0x7A), 0x1D608 => array(0x61),
+                    0x1D609 => array(0x62), 0x1D60A => array(0x63), 0x1D60B => array(0x64),
+                    0x1D60C => array(0x65), 0x1D60D => array(0x66), 0x1D60E => array(0x67),
+                    0x1D60F => array(0x68), 0x1D610 => array(0x69), 0x1D611 => array(0x6A),
+                    0x1D612 => array(0x6B), 0x1D613 => array(0x6C), 0x1D614 => array(0x6D),
+                    0x1D615 => array(0x6E), 0x1D616 => array(0x6F), 0x1D617 => array(0x70),
+                    0x1D618 => array(0x71), 0x1D619 => array(0x72), 0x1D61A => array(0x73),
+                    0x1D61B => array(0x74), 0x1D61C => array(0x75), 0x1D61D => array(0x76),
+                    0x1D61E => array(0x77), 0x1D61F => array(0x78), 0x1D620 => array(0x79),
+                    0x1D621 => array(0x7A), 0x1D622 => array(0x61), 0x1D623 => array(0x62),
+                    0x1D624 => array(0x63), 0x1D625 => array(0x64), 0x1D626 => array(0x65),
+                    0x1D627 => array(0x66), 0x1D628 => array(0x67), 0x1D629 => array(0x68),
+                    0x1D62A => array(0x69), 0x1D62B => array(0x6A), 0x1D62C => array(0x6B),
+                    0x1D62D => array(0x6C), 0x1D62E => array(0x6D), 0x1D62F => array(0x6E),
+                    0x1D630 => array(0x6F), 0x1D631 => array(0x70), 0x1D632 => array(0x71),
+                    0x1D633 => array(0x72), 0x1D634 => array(0x73), 0x1D635 => array(0x74),
+                    0x1D636 => array(0x75), 0x1D637 => array(0x76), 0x1D638 => array(0x77),
+                    0x1D639 => array(0x78), 0x1D63A => array(0x79), 0x1D63B => array(0x7A),
+                    0x1D63C => array(0x61), 0x1D63D => array(0x62), 0x1D63E => array(0x63),
+                    0x1D63F => array(0x64), 0x1D640 => array(0x65), 0x1D641 => array(0x66),
+                    0x1D642 => array(0x67), 0x1D643 => array(0x68), 0x1D644 => array(0x69),
+                    0x1D645 => array(0x6A), 0x1D646 => array(0x6B), 0x1D647 => array(0x6C),
+                    0x1D648 => array(0x6D), 0x1D649 => array(0x6E), 0x1D64A => array(0x6F),
+                    0x1D64B => array(0x70), 0x1D64C => array(0x71), 0x1D64D => array(0x72),
+                    0x1D64E => array(0x73), 0x1D64F => array(0x74), 0x1D650 => array(0x75),
+                    0x1D651 => array(0x76), 0x1D652 => array(0x77), 0x1D653 => array(0x78),
+                    0x1D654 => array(0x79), 0x1D655 => array(0x7A), 0x1D656 => array(0x61),
+                    0x1D657 => array(0x62), 0x1D658 => array(0x63), 0x1D659 => array(0x64),
+                    0x1D65A => array(0x65), 0x1D65B => array(0x66), 0x1D65C => array(0x67),
+                    0x1D65D => array(0x68), 0x1D65E => array(0x69), 0x1D65F => array(0x6A),
+                    0x1D660 => array(0x6B), 0x1D661 => array(0x6C), 0x1D662 => array(0x6D),
+                    0x1D663 => array(0x6E), 0x1D664 => array(0x6F), 0x1D665 => array(0x70),
+                    0x1D666 => array(0x71), 0x1D667 => array(0x72), 0x1D668 => array(0x73),
+                    0x1D669 => array(0x74), 0x1D66A => array(0x75), 0x1D66B => array(0x76),
+                    0x1D66C => array(0x77), 0x1D66D => array(0x78), 0x1D66E => array(0x79),
+                    0x1D66F => array(0x7A), 0x1D670 => array(0x61), 0x1D671 => array(0x62),
+                    0x1D672 => array(0x63), 0x1D673 => array(0x64), 0x1D674 => array(0x65),
+                    0x1D675 => array(0x66), 0x1D676 => array(0x67), 0x1D677 => array(0x68),
+                    0x1D678 => array(0x69), 0x1D679 => array(0x6A), 0x1D67A => array(0x6B),
+                    0x1D67B => array(0x6C), 0x1D67C => array(0x6D), 0x1D67D => array(0x6E),
+                    0x1D67E => array(0x6F), 0x1D67F => array(0x70), 0x1D680 => array(0x71),
+                    0x1D681 => array(0x72), 0x1D682 => array(0x73), 0x1D683 => array(0x74),
+                    0x1D684 => array(0x75), 0x1D685 => array(0x76), 0x1D686 => array(0x77),
+                    0x1D687 => array(0x78), 0x1D688 => array(0x79), 0x1D689 => array(0x7A),
+                    0x1D68A => array(0x61), 0x1D68B => array(0x62), 0x1D68C => array(0x63),
+                    0x1D68D => array(0x64), 0x1D68E => array(0x65), 0x1D68F => array(0x66),
+                    0x1D690 => array(0x67), 0x1D691 => array(0x68), 0x1D692 => array(0x69),
+                    0x1D693 => array(0x6A), 0x1D694 => array(0x6B), 0x1D695 => array(0x6C),
+                    0x1D696 => array(0x6D), 0x1D697 => array(0x6E), 0x1D698 => array(0x6F),
+                    0x1D699 => array(0x70), 0x1D69A => array(0x71), 0x1D69B => array(0x72),
+                    0x1D69C => array(0x73), 0x1D69D => array(0x74), 0x1D69E => array(0x75),
+                    0x1D69F => array(0x76), 0x1D6A0 => array(0x77), 0x1D6A1 => array(0x78),
+                    0x1D6A2 => array(0x79), 0x1D6A3 => array(0x7A), 0x1D6A4 => array(0x131),
+                    0x1D6A5 => array(0x237), 0x1D6A8 => array(0x3B1), 0x1D6A9 => array(0x3B2),
+                    0x1D6AA => array(0x3B3), 0x1D6AB => array(0x3B4), 0x1D6AC => array(0x3B5),
+                    0x1D6AD => array(0x3B6), 0x1D6AE => array(0x3B7), 0x1D6AF => array(0x3B8),
+                    0x1D6B0 => array(0x3B9), 0x1D6B1 => array(0x3BA), 0x1D6B2 => array(0x3BB),
+                    0x1D6B3 => array(0x3BC), 0x1D6B4 => array(0x3BD), 0x1D6B5 => array(0x3BE),
+                    0x1D6B6 => array(0x3BF), 0x1D6B7 => array(0x3C0), 0x1D6B8 => array(0x3C1),
+                    0x1D6B9 => array(0x3B8), 0x1D6BA => array(0x3C3), 0x1D6BB => array(0x3C4),
+                    0x1D6BC => array(0x3C5), 0x1D6BD => array(0x3C6), 0x1D6BE => array(0x3C7),
+                    0x1D6BF => array(0x3C8), 0x1D6C0 => array(0x3C9), 0x1D6C1 => array(0x2207),
+                    0x1D6C2 => array(0x3B1), 0x1D6C3 => array(0x3B2), 0x1D6C4 => array(0x3B3),
+                    0x1D6C5 => array(0x3B4), 0x1D6C6 => array(0x3B5), 0x1D6C7 => array(0x3B6),
+                    0x1D6C8 => array(0x3B7), 0x1D6C9 => array(0x3B8), 0x1D6CA => array(0x3B9),
+                    0x1D6CB => array(0x3BA), 0x1D6CC => array(0x3BB), 0x1D6CD => array(0x3BC),
+                    0x1D6CE => array(0x3BD), 0x1D6CF => array(0x3BE), 0x1D6D0 => array(0x3BF),
+                    0x1D6D1 => array(0x3C0), 0x1D6D2 => array(0x3C1), 0x1D6D3 => array(0x3C3),
+                    0x1D6D4 => array(0x3C3), 0x1D6D5 => array(0x3C4), 0x1D6D6 => array(0x3C5),
+                    0x1D6D7 => array(0x3C6), 0x1D6D8 => array(0x3C7), 0x1D6D9 => array(0x3C8),
+                    0x1D6DA => array(0x3C9), 0x1D6DB => array(0x2202), 0x1D6DC => array(0x3B5),
+                    0x1D6DD => array(0x3B8), 0x1D6DE => array(0x3BA), 0x1D6DF => array(0x3C6),
+                    0x1D6E0 => array(0x3C1), 0x1D6E1 => array(0x3C0), 0x1D6E2 => array(0x3B1),
+                    0x1D6E3 => array(0x3B2), 0x1D6E4 => array(0x3B3), 0x1D6E5 => array(0x3B4),
+                    0x1D6E6 => array(0x3B5), 0x1D6E7 => array(0x3B6), 0x1D6E8 => array(0x3B7),
+                    0x1D6E9 => array(0x3B8), 0x1D6EA => array(0x3B9), 0x1D6EB => array(0x3BA),
+                    0x1D6EC => array(0x3BB), 0x1D6ED => array(0x3BC), 0x1D6EE => array(0x3BD),
+                    0x1D6EF => array(0x3BE), 0x1D6F0 => array(0x3BF), 0x1D6F1 => array(0x3C0),
+                    0x1D6F2 => array(0x3C1), 0x1D6F3 => array(0x3B8), 0x1D6F4 => array(0x3C3),
+                    0x1D6F5 => array(0x3C4), 0x1D6F6 => array(0x3C5), 0x1D6F7 => array(0x3C6),
+                    0x1D6F8 => array(0x3C7), 0x1D6F9 => array(0x3C8), 0x1D6FA => array(0x3C9),
+                    0x1D6FB => array(0x2207), 0x1D6FC => array(0x3B1), 0x1D6FD => array(0x3B2),
+                    0x1D6FE => array(0x3B3), 0x1D6FF => array(0x3B4), 0x1D700 => array(0x3B5),
+                    0x1D701 => array(0x3B6), 0x1D702 => array(0x3B7), 0x1D703 => array(0x3B8),
+                    0x1D704 => array(0x3B9), 0x1D705 => array(0x3BA), 0x1D706 => array(0x3BB),
+                    0x1D707 => array(0x3BC), 0x1D708 => array(0x3BD), 0x1D709 => array(0x3BE),
+                    0x1D70A => array(0x3BF), 0x1D70B => array(0x3C0), 0x1D70C => array(0x3C1),
+                    0x1D70D => array(0x3C3), 0x1D70E => array(0x3C3), 0x1D70F => array(0x3C4),
+                    0x1D710 => array(0x3C5), 0x1D711 => array(0x3C6), 0x1D712 => array(0x3C7),
+                    0x1D713 => array(0x3C8), 0x1D714 => array(0x3C9), 0x1D715 => array(0x2202),
+                    0x1D716 => array(0x3B5), 0x1D717 => array(0x3B8), 0x1D718 => array(0x3BA),
+                    0x1D719 => array(0x3C6), 0x1D71A => array(0x3C1), 0x1D71B => array(0x3C0),
+                    0x1D71C => array(0x3B1), 0x1D71D => array(0x3B2), 0x1D71E => array(0x3B3),
+                    0x1D71F => array(0x3B4), 0x1D720 => array(0x3B5), 0x1D721 => array(0x3B6),
+                    0x1D722 => array(0x3B7), 0x1D723 => array(0x3B8), 0x1D724 => array(0x3B9),
+                    0x1D725 => array(0x3BA), 0x1D726 => array(0x3BB), 0x1D727 => array(0x3BC),
+                    0x1D728 => array(0x3BD), 0x1D729 => array(0x3BE), 0x1D72A => array(0x3BF),
+                    0x1D72B => array(0x3C0), 0x1D72C => array(0x3C1), 0x1D72D => array(0x3B8),
+                    0x1D72E => array(0x3C3), 0x1D72F => array(0x3C4), 0x1D730 => array(0x3C5),
+                    0x1D731 => array(0x3C6), 0x1D732 => array(0x3C7), 0x1D733 => array(0x3C8),
+                    0x1D734 => array(0x3C9), 0x1D735 => array(0x2207), 0x1D736 => array(0x3B1),
+                    0x1D737 => array(0x3B2), 0x1D738 => array(0x3B3), 0x1D739 => array(0x3B4),
+                    0x1D73A => array(0x3B5), 0x1D73B => array(0x3B6), 0x1D73C => array(0x3B7),
+                    0x1D73D => array(0x3B8), 0x1D73E => array(0x3B9), 0x1D73F => array(0x3BA),
+                    0x1D740 => array(0x3BB), 0x1D741 => array(0x3BC), 0x1D742 => array(0x3BD),
+                    0x1D743 => array(0x3BE), 0x1D744 => array(0x3BF), 0x1D745 => array(0x3C0),
+                    0x1D746 => array(0x3C1), 0x1D747 => array(0x3C3), 0x1D748 => array(0x3C3),
+                    0x1D749 => array(0x3C4), 0x1D74A => array(0x3C5), 0x1D74B => array(0x3C6),
+                    0x1D74C => array(0x3C7), 0x1D74D => array(0x3C8), 0x1D74E => array(0x3C9),
+                    0x1D74F => array(0x2202), 0x1D750 => array(0x3B5), 0x1D751 => array(0x3B8),
+                    0x1D752 => array(0x3BA), 0x1D753 => array(0x3C6), 0x1D754 => array(0x3C1),
+                    0x1D755 => array(0x3C0), 0x1D756 => array(0x3B1), 0x1D757 => array(0x3B2),
+                    0x1D758 => array(0x3B3), 0x1D759 => array(0x3B4), 0x1D75A => array(0x3B5),
+                    0x1D75B => array(0x3B6), 0x1D75C => array(0x3B7), 0x1D75D => array(0x3B8),
+                    0x1D75E => array(0x3B9), 0x1D75F => array(0x3BA), 0x1D760 => array(0x3BB),
+                    0x1D761 => array(0x3BC), 0x1D762 => array(0x3BD), 0x1D763 => array(0x3BE),
+                    0x1D764 => array(0x3BF), 0x1D765 => array(0x3C0), 0x1D766 => array(0x3C1),
+                    0x1D767 => array(0x3B8), 0x1D768 => array(0x3C3), 0x1D769 => array(0x3C4),
+                    0x1D76A => array(0x3C5), 0x1D76B => array(0x3C6), 0x1D76C => array(0x3C7),
+                    0x1D76D => array(0x3C8), 0x1D76E => array(0x3C9), 0x1D76F => array(0x2207),
+                    0x1D770 => array(0x3B1), 0x1D771 => array(0x3B2), 0x1D772 => array(0x3B3),
+                    0x1D773 => array(0x3B4), 0x1D774 => array(0x3B5), 0x1D775 => array(0x3B6),
+                    0x1D776 => array(0x3B7), 0x1D777 => array(0x3B8), 0x1D778 => array(0x3B9),
+                    0x1D779 => array(0x3BA), 0x1D77A => array(0x3BB), 0x1D77B => array(0x3BC),
+                    0x1D77C => array(0x3BD), 0x1D77D => array(0x3BE), 0x1D77E => array(0x3BF),
+                    0x1D77F => array(0x3C0), 0x1D780 => array(0x3C1), 0x1D781 => array(0x3C3),
+                    0x1D782 => array(0x3C3), 0x1D783 => array(0x3C4), 0x1D784 => array(0x3C5),
+                    0x1D785 => array(0x3C6), 0x1D786 => array(0x3C7), 0x1D787 => array(0x3C8),
+                    0x1D788 => array(0x3C9), 0x1D789 => array(0x2202), 0x1D78A => array(0x3B5),
+                    0x1D78B => array(0x3B8), 0x1D78C => array(0x3BA), 0x1D78D => array(0x3C6),
+                    0x1D78E => array(0x3C1), 0x1D78F => array(0x3C0), 0x1D790 => array(0x3B1),
+                    0x1D791 => array(0x3B2), 0x1D792 => array(0x3B3), 0x1D793 => array(0x3B4),
+                    0x1D794 => array(0x3B5), 0x1D795 => array(0x3B6), 0x1D796 => array(0x3B7),
+                    0x1D797 => array(0x3B8), 0x1D798 => array(0x3B9), 0x1D799 => array(0x3BA),
+                    0x1D79A => array(0x3BB), 0x1D79B => array(0x3BC), 0x1D79C => array(0x3BD),
+                    0x1D79D => array(0x3BE), 0x1D79E => array(0x3BF), 0x1D79F => array(0x3C0),
+                    0x1D7A0 => array(0x3C1), 0x1D7A1 => array(0x3B8), 0x1D7A2 => array(0x3C3),
+                    0x1D7A3 => array(0x3C4), 0x1D7A4 => array(0x3C5), 0x1D7A5 => array(0x3C6),
+                    0x1D7A6 => array(0x3C7), 0x1D7A7 => array(0x3C8), 0x1D7A8 => array(0x3C9),
+                    0x1D7A9 => array(0x2207), 0x1D7AA => array(0x3B1), 0x1D7AB => array(0x3B2),
+                    0x1D7AC => array(0x3B3), 0x1D7AD => array(0x3B4), 0x1D7AE => array(0x3B5),
+                    0x1D7AF => array(0x3B6), 0x1D7B0 => array(0x3B7), 0x1D7B1 => array(0x3B8),
+                    0x1D7B2 => array(0x3B9), 0x1D7B3 => array(0x3BA), 0x1D7B4 => array(0x3BB),
+                    0x1D7B5 => array(0x3BC), 0x1D7B6 => array(0x3BD), 0x1D7B7 => array(0x3BE),
+                    0x1D7B8 => array(0x3BF), 0x1D7B9 => array(0x3C0), 0x1D7BA => array(0x3C1),
+                    0x1D7BB => array(0x3C3), 0x1D7BC => array(0x3C3), 0x1D7BD => array(0x3C4),
+                    0x1D7BE => array(0x3C5), 0x1D7BF => array(0x3C6), 0x1D7C0 => array(0x3C7),
+                    0x1D7C1 => array(0x3C8), 0x1D7C2 => array(0x3C9), 0x1D7C3 => array(0x2202),
+                    0x1D7C4 => array(0x3B5), 0x1D7C5 => array(0x3B8), 0x1D7C6 => array(0x3BA),
+                    0x1D7C7 => array(0x3C6), 0x1D7C8 => array(0x3C1), 0x1D7C9 => array(0x3C0),
+                    0x1D7CA => array(0x3DD), 0x1D7CB => array(0x3DD), 0x1D7CE => array(0x30),
+                    0x1D7CF => array(0x31), 0x1D7D0 => array(0x32), 0x1D7D1 => array(0x33),
+                    0x1D7D2 => array(0x34), 0x1D7D3 => array(0x35), 0x1D7D4 => array(0x36),
+                    0x1D7D5 => array(0x37), 0x1D7D6 => array(0x38), 0x1D7D7 => array(0x39),
+                    0x1D7D8 => array(0x30), 0x1D7D9 => array(0x31), 0x1D7DA => array(0x32),
+                    0x1D7DB => array(0x33), 0x1D7DC => array(0x34), 0x1D7DD => array(0x35),
+                    0x1D7DE => array(0x36), 0x1D7DF => array(0x37), 0x1D7E0 => array(0x38),
+                    0x1D7E1 => array(0x39), 0x1D7E2 => array(0x30), 0x1D7E3 => array(0x31),
+                    0x1D7E4 => array(0x32), 0x1D7E5 => array(0x33), 0x1D7E6 => array(0x34),
+                    0x1D7E7 => array(0x35), 0x1D7E8 => array(0x36), 0x1D7E9 => array(0x37),
+                    0x1D7EA => array(0x38), 0x1D7EB => array(0x39), 0x1D7EC => array(0x30),
+                    0x1D7ED => array(0x31), 0x1D7EE => array(0x32), 0x1D7EF => array(0x33),
+                    0x1D7F0 => array(0x34), 0x1D7F1 => array(0x35), 0x1D7F2 => array(0x36),
+                    0x1D7F3 => array(0x37), 0x1D7F4 => array(0x38), 0x1D7F5 => array(0x39),
+                    0x1D7F6 => array(0x30), 0x1D7F7 => array(0x31), 0x1D7F8 => array(0x32),
+                    0x1D7F9 => array(0x33), 0x1D7FA => array(0x34), 0x1D7FB => array(0x35),
+                    0x1D7FC => array(0x36), 0x1D7FD => array(0x37), 0x1D7FE => array(0x38),
+                    0x1D7FF => array(0x39), 0x1EE00 => array(0x627), 0x1EE01 => array(0x628),
+                    0x1EE02 => array(0x62C), 0x1EE03 => array(0x62F), 0x1EE05 => array(0x648),
+                    0x1EE06 => array(0x632), 0x1EE07 => array(0x62D), 0x1EE08 => array(0x637),
+                    0x1EE09 => array(0x64A), 0x1EE0A => array(0x643), 0x1EE0B => array(0x644),
+                    0x1EE0C => array(0x645), 0x1EE0D => array(0x646), 0x1EE0E => array(0x633),
+                    0x1EE0F => array(0x639), 0x1EE10 => array(0x641), 0x1EE11 => array(0x635),
+                    0x1EE12 => array(0x642), 0x1EE13 => array(0x631), 0x1EE14 => array(0x634),
+                    0x1EE15 => array(0x62A), 0x1EE16 => array(0x62B), 0x1EE17 => array(0x62E),
+                    0x1EE18 => array(0x630), 0x1EE19 => array(0x636), 0x1EE1A => array(0x638),
+                    0x1EE1B => array(0x63A), 0x1EE1C => array(0x66E), 0x1EE1D => array(0x6BA),
+                    0x1EE1E => array(0x6A1), 0x1EE1F => array(0x66F), 0x1EE21 => array(0x628),
+                    0x1EE22 => array(0x62C), 0x1EE24 => array(0x647), 0x1EE27 => array(0x62D),
+                    0x1EE29 => array(0x64A), 0x1EE2A => array(0x643), 0x1EE2B => array(0x644),
+                    0x1EE2C => array(0x645), 0x1EE2D => array(0x646), 0x1EE2E => array(0x633),
+                    0x1EE2F => array(0x639), 0x1EE30 => array(0x641), 0x1EE31 => array(0x635),
+                    0x1EE32 => array(0x642), 0x1EE34 => array(0x634), 0x1EE35 => array(0x62A),
+                    0x1EE36 => array(0x62B), 0x1EE37 => array(0x62E), 0x1EE39 => array(0x636),
+                    0x1EE3B => array(0x63A), 0x1EE42 => array(0x62C), 0x1EE47 => array(0x62D),
+                    0x1EE49 => array(0x64A), 0x1EE4B => array(0x644), 0x1EE4D => array(0x646),
+                    0x1EE4E => array(0x633), 0x1EE4F => array(0x639), 0x1EE51 => array(0x635),
+                    0x1EE52 => array(0x642), 0x1EE54 => array(0x634), 0x1EE57 => array(0x62E),
+                    0x1EE59 => array(0x636), 0x1EE5B => array(0x63A), 0x1EE5D => array(0x6BA),
+                    0x1EE5F => array(0x66F), 0x1EE61 => array(0x628), 0x1EE62 => array(0x62C),
+                    0x1EE64 => array(0x647), 0x1EE67 => array(0x62D), 0x1EE68 => array(0x637),
+                    0x1EE69 => array(0x64A), 0x1EE6A => array(0x643), 0x1EE6C => array(0x645),
+                    0x1EE6D => array(0x646), 0x1EE6E => array(0x633), 0x1EE6F => array(0x639),
+                    0x1EE70 => array(0x641), 0x1EE71 => array(0x635), 0x1EE72 => array(0x642),
+                    0x1EE74 => array(0x634), 0x1EE75 => array(0x62A), 0x1EE76 => array(0x62B),
+                    0x1EE77 => array(0x62E), 0x1EE79 => array(0x636), 0x1EE7A => array(0x638),
+                    0x1EE7B => array(0x63A), 0x1EE7C => array(0x66E), 0x1EE7E => array(0x6A1),
+                    0x1EE80 => array(0x627), 0x1EE81 => array(0x628), 0x1EE82 => array(0x62C),
+                    0x1EE83 => array(0x62F), 0x1EE84 => array(0x647), 0x1EE85 => array(0x648),
+                    0x1EE86 => array(0x632), 0x1EE87 => array(0x62D), 0x1EE88 => array(0x637),
+                    0x1EE89 => array(0x64A), 0x1EE8B => array(0x644), 0x1EE8C => array(0x645),
+                    0x1EE8D => array(0x646), 0x1EE8E => array(0x633), 0x1EE8F => array(0x639),
+                    0x1EE90 => array(0x641), 0x1EE91 => array(0x635), 0x1EE92 => array(0x642),
+                    0x1EE93 => array(0x631), 0x1EE94 => array(0x634), 0x1EE95 => array(0x62A),
+                    0x1EE96 => array(0x62B), 0x1EE97 => array(0x62E), 0x1EE98 => array(0x630),
+                    0x1EE99 => array(0x636), 0x1EE9A => array(0x638), 0x1EE9B => array(0x63A),
+                    0x1EEA1 => array(0x628), 0x1EEA2 => array(0x62C), 0x1EEA3 => array(0x62F),
+                    0x1EEA5 => array(0x648), 0x1EEA6 => array(0x632), 0x1EEA7 => array(0x62D),
+                    0x1EEA8 => array(0x637), 0x1EEA9 => array(0x64A), 0x1EEAB => array(0x644),
+                    0x1EEAC => array(0x645), 0x1EEAD => array(0x646), 0x1EEAE => array(0x633),
+                    0x1EEAF => array(0x639), 0x1EEB0 => array(0x641), 0x1EEB1 => array(0x635),
+                    0x1EEB2 => array(0x642), 0x1EEB3 => array(0x631), 0x1EEB4 => array(0x634),
+                    0x1EEB5 => array(0x62A), 0x1EEB6 => array(0x62B), 0x1EEB7 => array(0x62E),
+                    0x1EEB8 => array(0x630), 0x1EEB9 => array(0x636), 0x1EEBA => array(0x638),
+                    0x1EEBB => array(0x63A), 0x1F12A => array(0x3014, 0x73, 0x3015), 0x1F12B => array(0x63),
+                    0x1F12C => array(0x72), 0x1F12D => array(0x63, 0x64), 0x1F12E => array(0x77, 0x7A),
+                    0x1F130 => array(0x61), 0x1F131 => array(0x62), 0x1F132 => array(0x63),
+                    0x1F133 => array(0x64), 0x1F134 => array(0x65), 0x1F135 => array(0x66),
+                    0x1F136 => array(0x67), 0x1F137 => array(0x68), 0x1F138 => array(0x69),
+                    0x1F139 => array(0x6A), 0x1F13A => array(0x6B), 0x1F13B => array(0x6C),
+                    0x1F13C => array(0x6D), 0x1F13D => array(0x6E), 0x1F13E => array(0x6F),
+                    0x1F13F => array(0x70), 0x1F140 => array(0x71), 0x1F141 => array(0x72),
+                    0x1F142 => array(0x73), 0x1F143 => array(0x74), 0x1F144 => array(0x75),
+                    0x1F145 => array(0x76), 0x1F146 => array(0x77), 0x1F147 => array(0x78),
+                    0x1F148 => array(0x79), 0x1F149 => array(0x7A), 0x1F14A => array(0x68, 0x76),
+                    0x1F14B => array(0x6D, 0x76), 0x1F14C => array(0x73, 0x64), 0x1F14D => array(0x73, 0x73),
+                    0x1F14E => array(0x70, 0x70, 0x76), 0x1F14F => array(0x77, 0x63), 0x1F16A => array(0x6D, 0x63),
+                    0x1F16B => array(0x6D, 0x64), 0x1F190 => array(0x64, 0x6A), 0x1F200 => array(0x307B, 0x304B),
+                    0x1F201 => array(0x30B3, 0x30B3), 0x1F202 => array(0x30B5), 0x1F210 => array(0x624B),
+                    0x1F211 => array(0x5B57), 0x1F212 => array(0x53CC), 0x1F213 => array(0x30C7),
+                    0x1F214 => array(0x4E8C), 0x1F215 => array(0x591A), 0x1F216 => array(0x89E3),
+                    0x1F217 => array(0x5929), 0x1F218 => array(0x4EA4), 0x1F219 => array(0x6620),
+                    0x1F21A => array(0x7121), 0x1F21B => array(0x6599), 0x1F21C => array(0x524D),
+                    0x1F21D => array(0x5F8C), 0x1F21E => array(0x518D), 0x1F21F => array(0x65B0),
+                    0x1F220 => array(0x521D), 0x1F221 => array(0x7D42), 0x1F222 => array(0x751F),
+                    0x1F223 => array(0x8CA9), 0x1F224 => array(0x58F0), 0x1F225 => array(0x5439),
+                    0x1F226 => array(0x6F14), 0x1F227 => array(0x6295), 0x1F228 => array(0x6355),
+                    0x1F229 => array(0x4E00), 0x1F22A => array(0x4E09), 0x1F22B => array(0x904A),
+                    0x1F22C => array(0x5DE6), 0x1F22D => array(0x4E2D), 0x1F22E => array(0x53F3),
+                    0x1F22F => array(0x6307), 0x1F230 => array(0x8D70), 0x1F231 => array(0x6253),
+                    0x1F232 => array(0x7981), 0x1F233 => array(0x7A7A), 0x1F234 => array(0x5408),
+                    0x1F235 => array(0x6E80), 0x1F236 => array(0x6709), 0x1F237 => array(0x6708),
+                    0x1F238 => array(0x7533), 0x1F239 => array(0x5272), 0x1F23A => array(0x55B6),
+                    0x1F240 => array(0x3014, 0x672C, 0x3015), 0x1F241 => array(0x3014, 0x4E09, 0x3015), 0x1F242 => array(0x3014, 0x4E8C, 0x3015),
+                    0x1F243 => array(0x3014, 0x5B89, 0x3015), 0x1F244 => array(0x3014, 0x70B9, 0x3015), 0x1F245 => array(0x3014, 0x6253, 0x3015),
+                    0x1F246 => array(0x3014, 0x76D7, 0x3015), 0x1F247 => array(0x3014, 0x52DD, 0x3015), 0x1F248 => array(0x3014, 0x6557, 0x3015),
+                    0x1F250 => array(0x5F97), 0x1F251 => array(0x53EF), 0x2F800 => array(0x4E3D),
+                    0x2F801 => array(0x4E38), 0x2F802 => array(0x4E41), 0x2F803 => array(0x20122),
+                    0x2F804 => array(0x4F60), 0x2F805 => array(0x4FAE), 0x2F806 => array(0x4FBB),
+                    0x2F807 => array(0x5002), 0x2F808 => array(0x507A), 0x2F809 => array(0x5099),
+                    0x2F80A => array(0x50E7), 0x2F80B => array(0x50CF), 0x2F80C => array(0x349E),
+                    0x2F80D => array(0x2063A), 0x2F80E => array(0x514D), 0x2F80F => array(0x5154),
+                    0x2F810 => array(0x5164), 0x2F811 => array(0x5177), 0x2F812 => array(0x2051C),
+                    0x2F813 => array(0x34B9), 0x2F814 => array(0x5167), 0x2F815 => array(0x518D),
+                    0x2F816 => array(0x2054B), 0x2F817 => array(0x5197), 0x2F818 => array(0x51A4),
+                    0x2F819 => array(0x4ECC), 0x2F81A => array(0x51AC), 0x2F81B => array(0x51B5),
+                    0x2F81C => array(0x291DF), 0x2F81D => array(0x51F5), 0x2F81E => array(0x5203),
+                    0x2F81F => array(0x34DF), 0x2F820 => array(0x523B), 0x2F821 => array(0x5246),
+                    0x2F822 => array(0x5272), 0x2F823 => array(0x5277), 0x2F824 => array(0x3515),
+                    0x2F825 => array(0x52C7), 0x2F826 => array(0x52C9), 0x2F827 => array(0x52E4),
+                    0x2F828 => array(0x52FA), 0x2F829 => array(0x5305), 0x2F82A => array(0x5306),
+                    0x2F82B => array(0x5317), 0x2F82C => array(0x5349), 0x2F82D => array(0x5351),
+                    0x2F82E => array(0x535A), 0x2F82F => array(0x5373), 0x2F830 => array(0x537D),
+                    0x2F831 => array(0x537F), 0x2F832 => array(0x537F), 0x2F833 => array(0x537F),
+                    0x2F834 => array(0x20A2C), 0x2F835 => array(0x7070), 0x2F836 => array(0x53CA),
+                    0x2F837 => array(0x53DF), 0x2F838 => array(0x20B63), 0x2F839 => array(0x53EB),
+                    0x2F83A => array(0x53F1), 0x2F83B => array(0x5406), 0x2F83C => array(0x549E),
+                    0x2F83D => array(0x5438), 0x2F83E => array(0x5448), 0x2F83F => array(0x5468),
+                    0x2F840 => array(0x54A2), 0x2F841 => array(0x54F6), 0x2F842 => array(0x5510),
+                    0x2F843 => array(0x5553), 0x2F844 => array(0x5563), 0x2F845 => array(0x5584),
+                    0x2F846 => array(0x5584), 0x2F847 => array(0x5599), 0x2F848 => array(0x55AB),
+                    0x2F849 => array(0x55B3), 0x2F84A => array(0x55C2), 0x2F84B => array(0x5716),
+                    0x2F84C => array(0x5606), 0x2F84D => array(0x5717), 0x2F84E => array(0x5651),
+                    0x2F84F => array(0x5674), 0x2F850 => array(0x5207), 0x2F851 => array(0x58EE),
+                    0x2F852 => array(0x57CE), 0x2F853 => array(0x57F4), 0x2F854 => array(0x580D),
+                    0x2F855 => array(0x578B), 0x2F856 => array(0x5832), 0x2F857 => array(0x5831),
+                    0x2F858 => array(0x58AC), 0x2F859 => array(0x214E4), 0x2F85A => array(0x58F2),
+                    0x2F85B => array(0x58F7), 0x2F85C => array(0x5906), 0x2F85D => array(0x591A),
+                    0x2F85E => array(0x5922), 0x2F85F => array(0x5962), 0x2F860 => array(0x216A8),
+                    0x2F861 => array(0x216EA), 0x2F862 => array(0x59EC), 0x2F863 => array(0x5A1B),
+                    0x2F864 => array(0x5A27), 0x2F865 => array(0x59D8), 0x2F866 => array(0x5A66),
+                    0x2F867 => array(0x36EE), 0x2F869 => array(0x5B08), 0x2F86A => array(0x5B3E),
+                    0x2F86B => array(0x5B3E), 0x2F86C => array(0x219C8), 0x2F86D => array(0x5BC3),
+                    0x2F86E => array(0x5BD8), 0x2F86F => array(0x5BE7), 0x2F870 => array(0x5BF3),
+                    0x2F871 => array(0x21B18), 0x2F872 => array(0x5BFF), 0x2F873 => array(0x5C06),
+                    0x2F875 => array(0x5C22), 0x2F876 => array(0x3781), 0x2F877 => array(0x5C60),
+                    0x2F878 => array(0x5C6E), 0x2F879 => array(0x5CC0), 0x2F87A => array(0x5C8D),
+                    0x2F87B => array(0x21DE4), 0x2F87C => array(0x5D43), 0x2F87D => array(0x21DE6),
+                    0x2F87E => array(0x5D6E), 0x2F87F => array(0x5D6B), 0x2F880 => array(0x5D7C),
+                    0x2F881 => array(0x5DE1), 0x2F882 => array(0x5DE2), 0x2F883 => array(0x382F),
+                    0x2F884 => array(0x5DFD), 0x2F885 => array(0x5E28), 0x2F886 => array(0x5E3D),
+                    0x2F887 => array(0x5E69), 0x2F888 => array(0x3862), 0x2F889 => array(0x22183),
+                    0x2F88A => array(0x387C), 0x2F88B => array(0x5EB0), 0x2F88C => array(0x5EB3),
+                    0x2F88D => array(0x5EB6), 0x2F88E => array(0x5ECA), 0x2F88F => array(0x2A392),
+                    0x2F890 => array(0x5EFE), 0x2F891 => array(0x22331), 0x2F892 => array(0x22331),
+                    0x2F893 => array(0x8201), 0x2F894 => array(0x5F22), 0x2F895 => array(0x5F22),
+                    0x2F896 => array(0x38C7), 0x2F897 => array(0x232B8), 0x2F898 => array(0x261DA),
+                    0x2F899 => array(0x5F62), 0x2F89A => array(0x5F6B), 0x2F89B => array(0x38E3),
+                    0x2F89C => array(0x5F9A), 0x2F89D => array(0x5FCD), 0x2F89E => array(0x5FD7),
+                    0x2F89F => array(0x5FF9), 0x2F8A0 => array(0x6081), 0x2F8A1 => array(0x393A),
+                    0x2F8A2 => array(0x391C), 0x2F8A3 => array(0x6094), 0x2F8A4 => array(0x226D4),
+                    0x2F8A5 => array(0x60C7), 0x2F8A6 => array(0x6148), 0x2F8A7 => array(0x614C),
+                    0x2F8A8 => array(0x614E), 0x2F8A9 => array(0x614C), 0x2F8AA => array(0x617A),
+                    0x2F8AB => array(0x618E), 0x2F8AC => array(0x61B2), 0x2F8AD => array(0x61A4),
+                    0x2F8AE => array(0x61AF), 0x2F8AF => array(0x61DE), 0x2F8B0 => array(0x61F2),
+                    0x2F8B1 => array(0x61F6), 0x2F8B2 => array(0x6210), 0x2F8B3 => array(0x621B),
+                    0x2F8B4 => array(0x625D), 0x2F8B5 => array(0x62B1), 0x2F8B6 => array(0x62D4),
+                    0x2F8B7 => array(0x6350), 0x2F8B8 => array(0x22B0C), 0x2F8B9 => array(0x633D),
+                    0x2F8BA => array(0x62FC), 0x2F8BB => array(0x6368), 0x2F8BC => array(0x6383),
+                    0x2F8BD => array(0x63E4), 0x2F8BE => array(0x22BF1), 0x2F8BF => array(0x6422),
+                    0x2F8C0 => array(0x63C5), 0x2F8C1 => array(0x63A9), 0x2F8C2 => array(0x3A2E),
+                    0x2F8C3 => array(0x6469), 0x2F8C4 => array(0x647E), 0x2F8C5 => array(0x649D),
+                    0x2F8C6 => array(0x6477), 0x2F8C7 => array(0x3A6C), 0x2F8C8 => array(0x654F),
+                    0x2F8C9 => array(0x656C), 0x2F8CA => array(0x2300A), 0x2F8CB => array(0x65E3),
+                    0x2F8CC => array(0x66F8), 0x2F8CD => array(0x6649), 0x2F8CE => array(0x3B19),
+                    0x2F8CF => array(0x6691), 0x2F8D0 => array(0x3B08), 0x2F8D1 => array(0x3AE4),
+                    0x2F8D2 => array(0x5192), 0x2F8D3 => array(0x5195), 0x2F8D4 => array(0x6700),
+                    0x2F8D5 => array(0x669C), 0x2F8D6 => array(0x80AD), 0x2F8D7 => array(0x43D9),
+                    0x2F8D8 => array(0x6717), 0x2F8D9 => array(0x671B), 0x2F8DA => array(0x6721),
+                    0x2F8DB => array(0x675E), 0x2F8DC => array(0x6753), 0x2F8DD => array(0x233C3),
+                    0x2F8DE => array(0x3B49), 0x2F8DF => array(0x67FA), 0x2F8E0 => array(0x6785),
+                    0x2F8E1 => array(0x6852), 0x2F8E2 => array(0x6885), 0x2F8E3 => array(0x2346D),
+                    0x2F8E4 => array(0x688E), 0x2F8E5 => array(0x681F), 0x2F8E6 => array(0x6914),
+                    0x2F8E7 => array(0x3B9D), 0x2F8E8 => array(0x6942), 0x2F8E9 => array(0x69A3),
+                    0x2F8EA => array(0x69EA), 0x2F8EB => array(0x6AA8), 0x2F8EC => array(0x236A3),
+                    0x2F8ED => array(0x6ADB), 0x2F8EE => array(0x3C18), 0x2F8EF => array(0x6B21),
+                    0x2F8F0 => array(0x238A7), 0x2F8F1 => array(0x6B54), 0x2F8F2 => array(0x3C4E),
+                    0x2F8F3 => array(0x6B72), 0x2F8F4 => array(0x6B9F), 0x2F8F5 => array(0x6BBA),
+                    0x2F8F6 => array(0x6BBB), 0x2F8F7 => array(0x23A8D), 0x2F8F8 => array(0x21D0B),
+                    0x2F8F9 => array(0x23AFA), 0x2F8FA => array(0x6C4E), 0x2F8FB => array(0x23CBC),
+                    0x2F8FC => array(0x6CBF), 0x2F8FD => array(0x6CCD), 0x2F8FE => array(0x6C67),
+                    0x2F8FF => array(0x6D16), 0x2F900 => array(0x6D3E), 0x2F901 => array(0x6D77),
+                    0x2F902 => array(0x6D41), 0x2F903 => array(0x6D69), 0x2F904 => array(0x6D78),
+                    0x2F905 => array(0x6D85), 0x2F906 => array(0x23D1E), 0x2F907 => array(0x6D34),
+                    0x2F908 => array(0x6E2F), 0x2F909 => array(0x6E6E), 0x2F90A => array(0x3D33),
+                    0x2F90B => array(0x6ECB), 0x2F90C => array(0x6EC7), 0x2F90D => array(0x23ED1),
+                    0x2F90E => array(0x6DF9), 0x2F90F => array(0x6F6E), 0x2F910 => array(0x23F5E),
+                    0x2F911 => array(0x23F8E), 0x2F912 => array(0x6FC6), 0x2F913 => array(0x7039),
+                    0x2F914 => array(0x701E), 0x2F915 => array(0x701B), 0x2F916 => array(0x3D96),
+                    0x2F917 => array(0x704A), 0x2F918 => array(0x707D), 0x2F919 => array(0x7077),
+                    0x2F91A => array(0x70AD), 0x2F91B => array(0x20525), 0x2F91C => array(0x7145),
+                    0x2F91D => array(0x24263), 0x2F91E => array(0x719C), 0x2F920 => array(0x7228),
+                    0x2F921 => array(0x7235), 0x2F922 => array(0x7250), 0x2F923 => array(0x24608),
+                    0x2F924 => array(0x7280), 0x2F925 => array(0x7295), 0x2F926 => array(0x24735),
+                    0x2F927 => array(0x24814), 0x2F928 => array(0x737A), 0x2F929 => array(0x738B),
+                    0x2F92A => array(0x3EAC), 0x2F92B => array(0x73A5), 0x2F92C => array(0x3EB8),
+                    0x2F92D => array(0x3EB8), 0x2F92E => array(0x7447), 0x2F92F => array(0x745C),
+                    0x2F930 => array(0x7471), 0x2F931 => array(0x7485), 0x2F932 => array(0x74CA),
+                    0x2F933 => array(0x3F1B), 0x2F934 => array(0x7524), 0x2F935 => array(0x24C36),
+                    0x2F936 => array(0x753E), 0x2F937 => array(0x24C92), 0x2F938 => array(0x7570),
+                    0x2F939 => array(0x2219F), 0x2F93A => array(0x7610), 0x2F93B => array(0x24FA1),
+                    0x2F93C => array(0x24FB8), 0x2F93D => array(0x25044), 0x2F93E => array(0x3FFC),
+                    0x2F93F => array(0x4008), 0x2F940 => array(0x76F4), 0x2F941 => array(0x250F3),
+                    0x2F942 => array(0x250F2), 0x2F943 => array(0x25119), 0x2F944 => array(0x25133),
+                    0x2F945 => array(0x771E), 0x2F946 => array(0x771F), 0x2F947 => array(0x771F),
+                    0x2F948 => array(0x774A), 0x2F949 => array(0x4039), 0x2F94A => array(0x778B),
+                    0x2F94B => array(0x4046), 0x2F94C => array(0x4096), 0x2F94D => array(0x2541D),
+                    0x2F94E => array(0x784E), 0x2F94F => array(0x788C), 0x2F950 => array(0x78CC),
+                    0x2F951 => array(0x40E3), 0x2F952 => array(0x25626), 0x2F953 => array(0x7956),
+                    0x2F954 => array(0x2569A), 0x2F955 => array(0x256C5), 0x2F956 => array(0x798F),
+                    0x2F957 => array(0x79EB), 0x2F958 => array(0x412F), 0x2F959 => array(0x7A40),
+                    0x2F95A => array(0x7A4A), 0x2F95B => array(0x7A4F), 0x2F95C => array(0x2597C),
+                    0x2F95D => array(0x25AA7), 0x2F95E => array(0x25AA7), 0x2F960 => array(0x4202),
+                    0x2F961 => array(0x25BAB), 0x2F962 => array(0x7BC6), 0x2F963 => array(0x7BC9),
+                    0x2F964 => array(0x4227), 0x2F965 => array(0x25C80), 0x2F966 => array(0x7CD2),
+                    0x2F967 => array(0x42A0), 0x2F968 => array(0x7CE8), 0x2F969 => array(0x7CE3),
+                    0x2F96A => array(0x7D00), 0x2F96B => array(0x25F86), 0x2F96C => array(0x7D63),
+                    0x2F96D => array(0x4301), 0x2F96E => array(0x7DC7), 0x2F96F => array(0x7E02),
+                    0x2F970 => array(0x7E45), 0x2F971 => array(0x4334), 0x2F972 => array(0x26228),
+                    0x2F973 => array(0x26247), 0x2F974 => array(0x4359), 0x2F975 => array(0x262D9),
+                    0x2F976 => array(0x7F7A), 0x2F977 => array(0x2633E), 0x2F978 => array(0x7F95),
+                    0x2F979 => array(0x7FFA), 0x2F97A => array(0x8005), 0x2F97B => array(0x264DA),
+                    0x2F97C => array(0x26523), 0x2F97D => array(0x8060), 0x2F97E => array(0x265A8),
+                    0x2F97F => array(0x8070), 0x2F980 => array(0x2335F), 0x2F981 => array(0x43D5),
+                    0x2F982 => array(0x80B2), 0x2F983 => array(0x8103), 0x2F984 => array(0x440B),
+                    0x2F985 => array(0x813E), 0x2F986 => array(0x5AB5), 0x2F987 => array(0x267A7),
+                    0x2F988 => array(0x267B5), 0x2F989 => array(0x23393), 0x2F98A => array(0x2339C),
+                    0x2F98B => array(0x8201), 0x2F98C => array(0x8204), 0x2F98D => array(0x8F9E),
+                    0x2F98E => array(0x446B), 0x2F98F => array(0x8291), 0x2F990 => array(0x828B),
+                    0x2F991 => array(0x829D), 0x2F992 => array(0x52B3), 0x2F993 => array(0x82B1),
+                    0x2F994 => array(0x82B3), 0x2F995 => array(0x82BD), 0x2F996 => array(0x82E6),
+                    0x2F997 => array(0x26B3C), 0x2F998 => array(0x82E5), 0x2F999 => array(0x831D),
+                    0x2F99A => array(0x8363), 0x2F99B => array(0x83AD), 0x2F99C => array(0x8323),
+                    0x2F99D => array(0x83BD), 0x2F99E => array(0x83E7), 0x2F99F => array(0x8457),
+                    0x2F9A0 => array(0x8353), 0x2F9A1 => array(0x83CA), 0x2F9A2 => array(0x83CC),
+                    0x2F9A3 => array(0x83DC), 0x2F9A4 => array(0x26C36), 0x2F9A5 => array(0x26D6B),
+                    0x2F9A6 => array(0x26CD5), 0x2F9A7 => array(0x452B), 0x2F9A8 => array(0x84F1),
+                    0x2F9A9 => array(0x84F3), 0x2F9AA => array(0x8516), 0x2F9AB => array(0x273CA),
+                    0x2F9AC => array(0x8564), 0x2F9AD => array(0x26F2C), 0x2F9AE => array(0x455D),
+                    0x2F9AF => array(0x4561), 0x2F9B0 => array(0x26FB1), 0x2F9B1 => array(0x270D2),
+                    0x2F9B2 => array(0x456B), 0x2F9B3 => array(0x8650), 0x2F9B4 => array(0x865C),
+                    0x2F9B5 => array(0x8667), 0x2F9B6 => array(0x8669), 0x2F9B7 => array(0x86A9),
+                    0x2F9B8 => array(0x8688), 0x2F9B9 => array(0x870E), 0x2F9BA => array(0x86E2),
+                    0x2F9BB => array(0x8779), 0x2F9BC => array(0x8728), 0x2F9BD => array(0x876B),
+                    0x2F9BE => array(0x8786), 0x2F9C0 => array(0x87E1), 0x2F9C1 => array(0x8801),
+                    0x2F9C2 => array(0x45F9), 0x2F9C3 => array(0x8860), 0x2F9C4 => array(0x8863),
+                    0x2F9C5 => array(0x27667), 0x2F9C6 => array(0x88D7), 0x2F9C7 => array(0x88DE),
+                    0x2F9C8 => array(0x4635), 0x2F9C9 => array(0x88FA), 0x2F9CA => array(0x34BB),
+                    0x2F9CB => array(0x278AE), 0x2F9CC => array(0x27966), 0x2F9CD => array(0x46BE),
+                    0x2F9CE => array(0x46C7), 0x2F9CF => array(0x8AA0), 0x2F9D0 => array(0x8AED),
+                    0x2F9D1 => array(0x8B8A), 0x2F9D2 => array(0x8C55), 0x2F9D3 => array(0x27CA8),
+                    0x2F9D4 => array(0x8CAB), 0x2F9D5 => array(0x8CC1), 0x2F9D6 => array(0x8D1B),
+                    0x2F9D7 => array(0x8D77), 0x2F9D8 => array(0x27F2F), 0x2F9D9 => array(0x20804),
+                    0x2F9DA => array(0x8DCB), 0x2F9DB => array(0x8DBC), 0x2F9DC => array(0x8DF0),
+                    0x2F9DD => array(0x208DE), 0x2F9DE => array(0x8ED4), 0x2F9DF => array(0x8F38),
+                    0x2F9E0 => array(0x285D2), 0x2F9E1 => array(0x285ED), 0x2F9E2 => array(0x9094),
+                    0x2F9E3 => array(0x90F1), 0x2F9E4 => array(0x9111), 0x2F9E5 => array(0x2872E),
+                    0x2F9E6 => array(0x911B), 0x2F9E7 => array(0x9238), 0x2F9E8 => array(0x92D7),
+                    0x2F9E9 => array(0x92D8), 0x2F9EA => array(0x927C), 0x2F9EB => array(0x93F9),
+                    0x2F9EC => array(0x9415), 0x2F9ED => array(0x28BFA), 0x2F9EE => array(0x958B),
+                    0x2F9EF => array(0x4995), 0x2F9F0 => array(0x95B7), 0x2F9F1 => array(0x28D77),
+                    0x2F9F2 => array(0x49E6), 0x2F9F3 => array(0x96C3), 0x2F9F4 => array(0x5DB2),
+                    0x2F9F5 => array(0x9723), 0x2F9F6 => array(0x29145), 0x2F9F7 => array(0x2921A),
+                    0x2F9F8 => array(0x4A6E), 0x2F9F9 => array(0x4A76), 0x2F9FA => array(0x97E0),
+                    0x2F9FB => array(0x2940A), 0x2F9FC => array(0x4AB2), 0x2F9FD => array(0x29496),
+                    0x2F9FE => array(0x980B), 0x2F9FF => array(0x980B), 0x2FA00 => array(0x9829),
+                    0x2FA01 => array(0x295B6), 0x2FA02 => array(0x98E2), 0x2FA03 => array(0x4B33),
+                    0x2FA04 => array(0x9929), 0x2FA05 => array(0x99A7), 0x2FA06 => array(0x99C2),
+                    0x2FA07 => array(0x99FE), 0x2FA08 => array(0x4BCE), 0x2FA09 => array(0x29B30),
+                    0x2FA0A => array(0x9B12), 0x2FA0B => array(0x9C40), 0x2FA0C => array(0x9CFD),
+                    0x2FA0D => array(0x4CCE), 0x2FA0E => array(0x4CED), 0x2FA0F => array(0x9D67),
+                    0x2FA10 => array(0x2A0CE), 0x2FA11 => array(0x4CF8), 0x2FA12 => array(0x2A105),
+                    0x2FA13 => array(0x2A20E), 0x2FA14 => array(0x2A291), 0x2FA15 => array(0x9EBB),
+                    0x2FA16 => array(0x4D56), 0x2FA17 => array(0x9EF9), 0x2FA18 => array(0x9EFE),
+                    0x2FA19 => array(0x9F05), 0x2FA1A => array(0x9F0F), 0x2FA1B => array(0x9F16),
+                    0x2FA1C => array(0x9F3B), 0x2FA1D => array(0x2A600)
+            ),
+            'norm_combcls' => array(0x334 => 1, 0x335 => 1, 0x336 => 1, 0x337 => 1,
+                    0x338 => 1, 0x93C => 7, 0x9BC => 7, 0xA3C => 7, 0xABC => 7,
+                    0xB3C => 7, 0xCBC => 7, 0x1037 => 7, 0x3099 => 8, 0x309A => 8,
+                    0x94D => 9, 0x9CD => 9, 0xA4D => 9, 0xACD => 9, 0xB4D => 9,
+                    0xBCD => 9, 0xC4D => 9, 0xCCD => 9, 0xD4D => 9, 0xDCA => 9,
+                    0xE3A => 9, 0xF84 => 9, 0x1039 => 9, 0x1714 => 9, 0x1734 => 9,
+                    0x17D2 => 9, 0x5B0 => 10, 0x5B1 => 11, 0x5B2 => 12, 0x5B3 => 13,
+                    0x5B4 => 14, 0x5B5 => 15, 0x5B6 => 16, 0x5B7 => 17, 0x5B8 => 18,
+                    0x5B9 => 19, 0x5BB => 20, 0x5Bc => 21, 0x5BD => 22, 0x5BF => 23,
+                    0x5C1 => 24, 0x5C2 => 25, 0xFB1E => 26, 0x64B => 27, 0x64C => 28,
+                    0x64D => 29, 0x64E => 30, 0x64F => 31, 0x650 => 32, 0x651 => 33,
+                    0x652 => 34, 0x670 => 35, 0x711 => 36, 0xC55 => 84, 0xC56 => 91,
+                    0xE38 => 103, 0xE39 => 103, 0xE48 => 107, 0xE49 => 107, 0xE4A => 107,
+                    0xE4B => 107, 0xEB8 => 118, 0xEB9 => 118, 0xEC8 => 122, 0xEC9 => 122,
+                    0xECA => 122, 0xECB => 122, 0xF71 => 129, 0xF72 => 130, 0xF7A => 130,
+                    0xF7B => 130, 0xF7C => 130, 0xF7D => 130, 0xF80 => 130, 0xF74 => 132,
+                    0x321 => 202, 0x322 => 202, 0x327 => 202, 0x328 => 202, 0x31B => 216,
+                    0xF39 => 216, 0x1D165 => 216, 0x1D166 => 216, 0x1D16E => 216, 0x1D16F => 216,
+                    0x1D170 => 216, 0x1D171 => 216, 0x1D172 => 216, 0x302A => 218, 0x316 => 220,
+                    0x317 => 220, 0x318 => 220, 0x319 => 220, 0x31C => 220, 0x31D => 220,
+                    0x31E => 220, 0x31F => 220, 0x320 => 220, 0x323 => 220, 0x324 => 220,
+                    0x325 => 220, 0x326 => 220, 0x329 => 220, 0x32A => 220, 0x32B => 220,
+                    0x32C => 220, 0x32D => 220, 0x32E => 220, 0x32F => 220, 0x330 => 220,
+                    0x331 => 220, 0x332 => 220, 0x333 => 220, 0x339 => 220, 0x33A => 220,
+                    0x33B => 220, 0x33C => 220, 0x347 => 220, 0x348 => 220, 0x349 => 220,
+                    0x34D => 220, 0x34E => 220, 0x353 => 220, 0x354 => 220, 0x355 => 220,
+                    0x356 => 220, 0x591 => 220, 0x596 => 220, 0x59B => 220, 0x5A3 => 220,
+                    0x5A4 => 220, 0x5A5 => 220, 0x5A6 => 220, 0x5A7 => 220, 0x5AA => 220,
+                    0x655 => 220, 0x656 => 220, 0x6E3 => 220, 0x6EA => 220, 0x6ED => 220,
+                    0x731 => 220, 0x734 => 220, 0x737 => 220, 0x738 => 220, 0x739 => 220,
+                    0x73B => 220, 0x73C => 220, 0x73E => 220, 0x742 => 220, 0x744 => 220,
+                    0x746 => 220, 0x748 => 220, 0x952 => 220, 0xF18 => 220, 0xF19 => 220,
+                    0xF35 => 220, 0xF37 => 220, 0xFC6 => 220, 0x193B => 220, 0x20E8 => 220,
+                    0x1D17B => 220, 0x1D17C => 220, 0x1D17D => 220, 0x1D17E => 220, 0x1D17F => 220,
+                    0x1D180 => 220, 0x1D181 => 220, 0x1D182 => 220, 0x1D18A => 220, 0x1D18B => 220,
+                    0x59A => 222, 0x5AD => 222, 0x1929 => 222, 0x302D => 222, 0x302E => 224,
+                    0x302F => 224, 0x1D16D => 226, 0x5AE => 228, 0x18A9 => 228, 0x302B => 228,
+                    0x300 => 230, 0x301 => 230, 0x302 => 230, 0x303 => 230, 0x304 => 230,
+                    0x305 => 230, 0x306 => 230, 0x307 => 230, 0x308 => 230, 0x309 => 230,
+                    0x30A => 230, 0x30B => 230, 0x30C => 230, 0x30D => 230, 0x30E => 230,
+                    0x30F => 230, 0x310 => 230, 0x311 => 230, 0x312 => 230, 0x313 => 230,
+                    0x314 => 230, 0x33D => 230, 0x33E => 230, 0x33F => 230, 0x340 => 230,
+                    0x341 => 230, 0x342 => 230, 0x343 => 230, 0x344 => 230, 0x346 => 230,
+                    0x34A => 230, 0x34B => 230, 0x34C => 230, 0x350 => 230, 0x351 => 230,
+                    0x352 => 230, 0x357 => 230, 0x363 => 230, 0x364 => 230, 0x365 => 230,
+                    0x366 => 230, 0x367 => 230, 0x368 => 230, 0x369 => 230, 0x36A => 230,
+                    0x36B => 230, 0x36C => 230, 0x36D => 230, 0x36E => 230, 0x36F => 230,
+                    0x483 => 230, 0x484 => 230, 0x485 => 230, 0x486 => 230, 0x592 => 230,
+                    0x593 => 230, 0x594 => 230, 0x595 => 230, 0x597 => 230, 0x598 => 230,
+                    0x599 => 230, 0x59C => 230, 0x59D => 230, 0x59E => 230, 0x59F => 230,
+                    0x5A0 => 230, 0x5A1 => 230, 0x5A8 => 230, 0x5A9 => 230, 0x5AB => 230,
+                    0x5AC => 230, 0x5AF => 230, 0x5C4 => 230, 0x610 => 230, 0x611 => 230,
+                    0x612 => 230, 0x613 => 230, 0x614 => 230, 0x615 => 230, 0x653 => 230,
+                    0x654 => 230, 0x657 => 230, 0x658 => 230, 0x6D6 => 230, 0x6D7 => 230,
+                    0x6D8 => 230, 0x6D9 => 230, 0x6DA => 230, 0x6DB => 230, 0x6DC => 230,
+                    0x6DF => 230, 0x6E0 => 230, 0x6E1 => 230, 0x6E2 => 230, 0x6E4 => 230,
+                    0x6E7 => 230, 0x6E8 => 230, 0x6EB => 230, 0x6EC => 230, 0x730 => 230,
+                    0x732 => 230, 0x733 => 230, 0x735 => 230, 0x736 => 230, 0x73A => 230,
+                    0x73D => 230, 0x73F => 230, 0x740 => 230, 0x741 => 230, 0x743 => 230,
+                    0x745 => 230, 0x747 => 230, 0x749 => 230, 0x74A => 230, 0x951 => 230,
+                    0x953 => 230, 0x954 => 230, 0xF82 => 230, 0xF83 => 230, 0xF86 => 230,
+                    0xF87 => 230, 0x170D => 230, 0x193A => 230, 0x20D0 => 230, 0x20D1 => 230,
+                    0x20D4 => 230, 0x20D5 => 230, 0x20D6 => 230, 0x20D7 => 230, 0x20DB => 230,
+                    0x20DC => 230, 0x20E1 => 230, 0x20E7 => 230, 0x20E9 => 230, 0xFE20 => 230,
+                    0xFE21 => 230, 0xFE22 => 230, 0xFE23 => 230, 0x1D185 => 230, 0x1D186 => 230,
+                    0x1D187 => 230, 0x1D189 => 230, 0x1D188 => 230, 0x1D1AA => 230, 0x1D1AB => 230,
+                    0x1D1AC => 230, 0x1D1AD => 230, 0x315 => 232, 0x31A => 232, 0x302C => 232,
+                    0x35F => 233, 0x362 => 233, 0x35D => 234, 0x35E => 234, 0x360 => 234,
+                    0x361 => 234, 0x345 => 240
+            )
+    );
+}
index d887f48..6521780 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index e92ccd3..9ff5e62 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index f52471d..80536ba 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index f34ea91..09e70ae 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 538d08d..49cce51 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index a2e88b1..208338a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -419,8 +419,8 @@ function init_langues() {
        if (!isset($GLOBALS['meta']['langue_site'])) {
                // Initialisation : le francais si dispo, sinon la premiere langue trouvee
                $GLOBALS['meta']['langue_site'] = $tout =
-               (!$all_langs OR (strpos(',fr,',",$all_langs,")!==false))
-                 ? 'fr' :  substr($all_langs,0,strpos($all_langs,','));
+               (!$all_langs OR (strpos(','._LANGUE_PAR_DEFAUT.',',",$all_langs,")!==false))
+                 ? _LANGUE_PAR_DEFAUT :  substr($all_langs,0,strpos($all_langs,','));
                ecrire_meta('langue_site', $tout);
        }
 }
index 9fe1e64..6bd2e71 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -33,7 +33,7 @@ $GLOBALS['codes_langues'] = array(
        'ay' => "Aymara",
        'az' => "Az&#601;rbaycan dili",
        'ba' => "Bashkir",
-       'be' => "&#1041;&#1077;&#1083;&#1072;&#1088;&#1091;&#1089;&#1082;&#1110;",
+       'be' => "&#1041;&#1077;&#1083;&#1072;&#1088;&#1091;&#1089;&#1082;&#1072;&#1103;",
        'ber_tam' => "Tamazigh",
        'ber_tam_tfng' => "Tamazigh tifinagh",
        'bg' => "&#1073;&#1098;&#1083;&#1075;&#1072;&#1088;&#1089;&#1082;&#1080;",
@@ -48,7 +48,7 @@ $GLOBALS['codes_langues'] = array(
        'co' => "corsu",
        'cpf' => "Kr&eacute;ol r&eacute;yon&eacute;",
        'cpf_dom' => "Krey&ograve;l",
-       'cpf_hat' => "Kr&eacute;y&ograve;l (P&eacute;yi Dayiti)",
+       'cpf_hat' => "Krey&ograve;l (Peyi Dayiti)",
        'cs' => "&#269;e&#353;tina",
        'cy' => "Cymraeg",      # welsh, gallois
        'da' => "dansk",
@@ -91,7 +91,7 @@ $GLOBALS['codes_langues'] = array(
        'hi' => "&#2361;&#2367;&#2306;&#2342;&#2368;",
        'hr' => "hrvatski",
        'hu' => "magyar",
-       'hy' => "Õ€Õ¡ÕµÕ¥Ö€Õ¥Õ¶",// Arménien
+       'hy' => "&#1344;&#1377;&#1397;&#1381;&#1408;&#1381;&#1398;",// Arménien
        'ia' => "Interlingua",
        'id' => "Indonesia",
        'ie' => "Interlingue",
index 3455fb0..9a2d5fc 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 9fc5d48..55fc18b 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -255,7 +255,9 @@ function traiter_modeles($texte, $doublons=false, $echap='', $connect='', $liens
                                $lien = array(
                                        'href' => extraire_attribut($r[0],'href'),
                                        'class' => extraire_attribut($r[0],'class'),
-                                       'mime' => extraire_attribut($r[0],'type')
+                                       'mime' => extraire_attribut($r[0],'type'),
+                                       'title' => extraire_attribut($r[0],'title'),
+                                       'hreflang' => extraire_attribut($r[0],'hreflang')
                                );
                                $n = strlen($r[0]);
                                $a -= $n;
@@ -275,7 +277,7 @@ function traiter_modeles($texte, $doublons=false, $echap='', $connect='', $liens
                                // dans les parametres, plutot que les liens echappes
                                if (!is_null($liens))
                                        $params = str_replace($liens[0], $liens[1], $params);
-                         $modele = inclure_modele($type, $id, $params, $lien, $connect, $env);
+                               $modele = inclure_modele($type, $id, $params, $lien, $connect, $env);
                                // en cas d'echec, 
                                // si l'objet demande a une url, 
                                // creer un petit encadre vers elle
index 5166ff8..e15d98a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 861e66a..2eec519 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 1a5fcb1..07f9e78 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index fc81757..c2f717c 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index ecbb5a0..1143c9a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index e99d52d..b50f00f 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 0de42ae..63249d5 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -123,6 +123,10 @@ function minipres($titre='', $corps="", $onload='', $all_inline = false)
                $statut = isset($GLOBALS['visiteur_session']['statut']) ? $GLOBALS['visiteur_session']['statut'] : '';
                $nom    = isset($GLOBALS['visiteur_session']['nom']) ? $GLOBALS['visiteur_session']['nom'] : '';
 
+               if ($statut != '0minirezo') {
+                       $titre = _T('info_acces_interdit');
+               }
+
                $corps = generer_form_ecrire('accueil', '','',
                                                $statut ? _T('public:accueil_site') : _T('public:lien_connecter')
                );
index cca62ae..872a477 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -78,7 +78,13 @@ function collecter_requests($white_list, $black_list, $set=null, $tous=false){
  * @param int $id_objet
  *     Identifiant de l'objet
  * @param array $options
- *     Toutes les options
+ *     array data : tableau des donnees sources utilisees pour la detection de conflit ($_POST sinon fourni ou si nul)
+ *     array nonvide : valeur par defaut des champs que l'on ne veut pas vide
+ *     string date_modif : champ a mettre a date('Y-m-d H:i:s') s'il y a modif
+ *     string invalideur : id de l'invalideur eventuel
+ *     array champs : non documente (utilise seulement par inc/rechercher ?)
+ *     string action : action realisee, passee aux pipelines pre/post edition (par defaut 'modifier')
+ *     bool indexation : deprecie
  * @param array|null $c
  *     Couples champ/valeur Ã  modifier
  * @param string $serveur
@@ -150,7 +156,7 @@ function objet_modifier_champs($objet, $id_objet, $options, $c=null, $serveur=''
                                'id_objet' => $id_objet,
                                'champs' => isset($options['champs']) ? $options['champs'] : array(), // [doc] c'est quoi ?
                                'serveur' => $serveur,
-                               'action' => 'modifier'
+                               'action' => isset($options['action']) ? $options['action'] : 'modifier'
                        ),
                        'data' => $champs
                )
@@ -167,7 +173,10 @@ function objet_modifier_champs($objet, $id_objet, $options, $c=null, $serveur=''
 
        // Verifier si les mises a jour sont pertinentes, datees, en conflit etc
        include_spip('inc/editer');
-       $conflits = controler_md5($champs, $_POST, $objet, $id_objet, $serveur);
+       if (!isset($options['data']) OR is_null($options['data'])){
+               $options['data'] = &$_POST;
+       }
+       $conflits = controler_md5($champs, $options['data'], $objet, $id_objet, $serveur);
        // cas hypothetique : normalement inc/editer verifie en amont le conflit edition
        // et gere l'interface
        // ici on ne renvoie donc qu'un messsage d'erreur, au cas ou on y arrive quand meme
@@ -183,8 +192,8 @@ function objet_modifier_champs($objet, $id_objet, $options, $c=null, $serveur=''
                                        $parent = ($objet=='rubrique')?'id_parent':'id_rubrique';
                                        $id_rubrique = sql_getfetsel($parent, $spip_table_objet, "$id_table_objet=".intval($id_objet));
                                }
-                               $instituer_langue_objet = charger_fonction('instituer_langue_objet','action');
-                               $champs['lang'] = $instituer_langue_objet($objet,$id_objet, $id_rubrique, $changer_lang);
+                               $instituer_langue_objet = charger_fonction('instituer_langue_objet', 'action');
+                               $champs['lang'] = $instituer_langue_objet($objet, $id_objet, $id_rubrique, $changer_lang, $serveur);
                        }
                        // on laisse 'lang' dans $champs,
                        // ca permet de passer dans le pipeline post_edition et de journaliser
@@ -245,7 +254,7 @@ function objet_modifier_champs($objet, $id_objet, $options, $c=null, $serveur=''
                                        'id_objet' => $id_objet,
                                        'champs' => isset($options['champs']) ? $options['champs'] : array(), // [doc] kesako ?
                                        'serveur' => $serveur,
-                                       'action' => 'modifier'
+                                       'action' => isset($options['action']) ? $options['action'] : 'modifier'
                                ),
                                'data' => $champs
                        )
index abc2840..785aed3 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index b2eb236..1b3a83a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -82,6 +82,13 @@ function f_surligne ($texte) {
               OR !isset($_SERVER['HTTP_REFERER'])))
                return $texte;
        include_spip('inc/surligne');
+       if (isset($_SERVER['HTTP_REFERER'])) {
+               $_SERVER['HTTP_REFERER'] = preg_replace(',[^\w\,/#&;-]+,', ' ', $_SERVER['HTTP_REFERER']);
+       }
+       if ($rech){
+               $rech = preg_replace(',[^\w\,/#&;-]+,', ' ', $rech);
+       }
+
        return surligner_mots($texte, $rech);
 }
 
index 1cebc91..faa6864 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 7acfa93..e766f36 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 1510889..442b0a5 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -149,89 +149,139 @@ function plugin_version_compatible($intervalle, $version, $avec_quoi = '') {
 }
 
 
-
-// Construire la liste des infos strictement necessaires aux plugins a activer
-// afin de les memoriser dans une meta pas trop grosse
-// http://doc.spip.org/@liste_plugin_valides
-function liste_plugin_valides($liste_plug, $force = false)
-{
+/**
+ * Construire la liste des infos strictement necessaires aux plugins a activer
+ * afin de les memoriser dans une meta pas trop grosse
+ * http://code.spip.net/@liste_plugin_valides
+ *
+ * @param array $liste_plug
+ * @param bool $force
+ * @return array
+ */
+function liste_plugin_valides($liste_plug, $force = false){
        $liste_ext = liste_plugin_files(_DIR_PLUGINS_DIST);
-       $get_infos = charger_fonction('get_infos','plugins');
+       $get_infos = charger_fonction('get_infos', 'plugins');
        $infos = array(
                // lister les extensions qui sont automatiquement actives
                '_DIR_PLUGINS_DIST' => $get_infos($liste_ext, $force, _DIR_PLUGINS_DIST),
                '_DIR_PLUGINS' => $get_infos($liste_plug, $force, _DIR_PLUGINS)
-                      );
+       );
 
        // creer une premiere liste non ordonnee mais qui ne retient
        // que les plugins valides, et dans leur derniere version en cas de doublon
-       $infos['_DIR_RESTREINT'][''] = $get_infos('./',$force,_DIR_RESTREINT);
+       $infos['_DIR_RESTREINT'][''] = $get_infos('./', $force, _DIR_RESTREINT);
        $infos['_DIR_RESTREINT']['SPIP']['version'] = $GLOBALS['spip_version_branche'];
        $infos['_DIR_RESTREINT']['SPIP']['chemin'] = array();
-       $liste_non_classee = array('SPIP'=>array(
+       $liste_non_classee = array('SPIP' => array(
                'nom' => 'SPIP',
                'etat' => 'stable',
                'version' => $GLOBALS['spip_version_branche'],
                'dir_type' => '_DIR_RESTREINT',
-               'dir'=> '',
+               'dir' => '',
        )
        );
 
-       foreach($liste_ext as $plug){
-         if (isset($infos['_DIR_PLUGINS_DIST'][$plug]))
-           plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS_DIST');
+       foreach ($liste_ext as $plug){
+               if (isset($infos['_DIR_PLUGINS_DIST'][$plug]))
+                       plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS_DIST');
        }
-       foreach($liste_plug as $plug) {
-         if (isset($infos['_DIR_PLUGINS'][$plug]))
-           plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS');
+       foreach ($liste_plug as $plug){
+               if (isset($infos['_DIR_PLUGINS'][$plug]))
+                       plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS');
        }
        
-       if (defined('_DIR_PLUGINS_SUPPL') and _DIR_PLUGINS_SUPPL) {
+       if (defined('_DIR_PLUGINS_SUPPL') and _DIR_PLUGINS_SUPPL){
                $infos['_DIR_PLUGINS_SUPPL'] = $get_infos($liste_plug, false, _DIR_PLUGINS_SUPPL);
-               foreach($liste_plug as $plug) {
+               foreach ($liste_plug as $plug){
                        if (isset($infos['_DIR_PLUGINS_SUPPL'][$plug]))
                                plugin_valide_resume($liste_non_classee, $plug, $infos, '_DIR_PLUGINS_SUPPL');
                }
        }
        
-       // les procure de core.xml sont consideres comme des plugins proposes,
-       // mais surchargeables (on peut activer un plugin qui procure ca pour l'ameliorer,
-       // donc avec le meme prefixe)
-       foreach($infos['_DIR_RESTREINT']['']['procure'] as $procure) {
-               $p = strtoupper($procure['nom']);
-               if (!isset($liste_non_classee[$p])){
-                       $procure['etat'] = '?';
-                       $procure['dir_type'] = '_DIR_RESTREINT';
-                       $procure['dir'] = '';
-                       $liste_non_classee[$p] = $procure;
-               }
-       }
+       plugin_fixer_procure($liste_non_classee, $infos);
 
        return array($infos, $liste_non_classee);
 }
 
-// Ne retenir un plugin que s'il est valide
-// et dans leur plus recente version compatible
-// avec la version presente de SPIP
-
-function plugin_valide_resume(&$liste, $plug, $infos, $dir)
-{
-       $i = $infos[$dir][$plug];
+/**
+ * Ne retenir un plugin que s'il est valide
+ * et dans leur plus recente version compatible
+ * avec la version presente de SPIP
+ *
+ * @param array $liste
+ * @param string $plug
+ * @param array $infos
+ * @param string $dir_type
+ */
+function plugin_valide_resume(&$liste, $plug, $infos, $dir_type){
+       $i = $infos[$dir_type][$plug];
        if (isset($i['erreur']) AND $i['erreur'])
                return;
-       if (!plugin_version_compatible($i['compatibilite'], $GLOBALS['spip_version_branche'],'spip'))
+       if (!plugin_version_compatible($i['compatibilite'], $GLOBALS['spip_version_branche'], 'spip'))
                return;
        $p = strtoupper($i['prefix']);
        if (!isset($liste[$p]) 
-       OR spip_version_compare($i['version'],$liste[$p]['version'],'>')) {
+               OR spip_version_compare($i['version'], $liste[$p]['version'], '>')
+         ){
                $liste[$p] = array(
                        'nom' => $i['nom'],
                        'etat' => $i['etat'],
-                       'version'=> $i['version'],
-                       'dir'=> $plug,
-                       'dir_type' => $dir
-                                              );
+                       'version' => $i['version'],
+                       'dir' => $plug,
+                       'dir_type' => $dir_type
+               );
+       }
+}
+
+/**
+ * Completer la liste des plugins avec les eventuels procure
+ *
+ * les <procure> sont consideres comme des plugins proposes,
+ * mais surchargeables (on peut activer un plugin qui procure ca pour l'ameliorer,
+ * donc avec le meme prefixe, qui sera pris en compte si il a une version plus grande)
+ *
+ * @param array $liste
+ * @param array $infos
+ */
+function plugin_fixer_procure(&$liste, &$infos){
+       foreach($liste as $p=>$resume){
+               $i = $infos[$resume['dir_type']][$resume['dir']];
+               if (isset($i['procure']) AND $i['procure']){
+                       foreach($i['procure'] as $procure){
+                               $p = strtoupper($procure['nom']);
+                               $dir = $resume['dir'];
+                               if ($dir) $dir .= "/";
+                               $dir .= "procure:".$procure['nom'];
+
+                               $procure['etat'] = '?';
+                               $procure['dir_type'] = $resume['dir_type'];
+                               $procure['dir'] = $dir;
+
+                               // si ce plugin n'est pas deja procure, ou dans une version plus ancienne
+                               // on ajoute cette version a la liste
+                               if (!isset($liste[$p])
+                                       OR spip_version_compare($procure['version'], $liste[$p]['version'], '>')
+                                 ){
+                                       $liste[$p] = $procure;
+
+                                       // on fournit une information minimale pour ne pas perturber la compilation
+                                       $infos[$resume['dir_type']][$dir] = array(
+                                               'prefix' => $procure['nom'],
+                                               'nom' => $procure['nom'],
+                                               'etat' => $procure['etat'],
+                                               'version' => $procure['version'],
+                                               'chemin' => array(),
+                                               'necessite' => array(),
+                                               'utilise' => array(),
+                                               'lib' => array(),
+                                               'menu' => array(),
+                                               'onglet' => array(),
+                                               'procure' => array(),
+                                       );
+                               }
+                       }
                }
+       }
 }
 
 /**
@@ -594,6 +644,7 @@ function plugins_precompile_xxxtions($plugin_valides, $ordre)
                                // donc ni sa relecture, ni sa detection
                                if (!isset($info[$charge])
                                        AND $dir // exclure le cas du plugin "SPIP"
+                                       AND strpos($dir,":")===false // exclure le cas des procure:
                                        AND file_exists("$dir$plug/paquet.xml") // uniquement pour les paquet.xml
                                        ){
                                        if (is_readable("$dir$plug/".($file=$info['prefix']."_".$charge.".php"))){
index 36491c6..9169b7a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index bef3c7c..5852f4f 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 065ca58..1570293 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 98996f0..8043b5a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 8fe805f..74f74fd 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 5754a1c..2bfaef9 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 4502ceb..91df554 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 353c0a1..2375867 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 7fa78cd..9df1340 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 14ab04c..3b26c3c 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index e289c73..f5ecc4b 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -72,7 +72,7 @@ function expression_recherche($recherche, $options) {
        $recherche = trim($recherche);
 
        $is_preg = false;
-       if (substr($recherche,0,1)=='/' AND substr($recherche,-1,1)=='/'){
+       if (substr($recherche, 0, 1) == '/' and substr($recherche, -1, 1) == '/' and strlen($recherche) > 2) {
                // c'est une preg
                $recherche_trans = translitteration($recherche);
                $preg = $recherche_trans.$options['preg_flags'];
index f707250..e1ccdaa 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 369d53d..1968538 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 83c6cd5..f2ddb6f 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 97067ce..f19d06a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index fbb91d4..7dce798 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 004a812..ecdf900 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index af706b3..c64532e 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -156,6 +156,7 @@ function typo($letexte, $echapper=true, $connect=null, $env=array()) {
        if (is_null($connect)){
                $connect = '';
                $interdire_script = true;
+               $env['espace_prive'] = 1;
        }
 
        // Echapper les codes <html> etc
@@ -183,6 +184,12 @@ function typo($letexte, $echapper=true, $connect=null, $env=array()) {
        if ($interdire_script)
                $letexte = interdire_scripts($letexte);
 
+       // Dans l'espace prive on se mefie de tout contenu dangereux
+       // https://core.spip.net/issues/3371
+       if (isset($env['espace_prive']) AND $env['espace_prive']){
+               $letexte = echapper_html_suspect($letexte);
+       }
+
        return $letexte;
 }
 
index b0aab8a..8171342 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -381,15 +381,52 @@ function echapper_faux_tags($letexte){
   $letexte = "";
   while (count($textMatches)) {
        // un texte a echapper
-       $letexte .= str_replace(array("<"),array('&lt;'),array_shift($textMatches));
+       $letexte .= str_replace("<",'&lt;',array_shift($textMatches));
        // un tag html qui a servit a faite le split
                $letexte .= array_shift($textMatches);
   }
   return $letexte;
 }
 
-// Securite : utiliser SafeHTML s'il est present dans ecrire/safehtml/
-// http://doc.spip.org/@safehtml
+/**
+ * Si le html contenu dans un texte ne passe pas sans transformation a travers safehtml
+ * on l'echappe
+ * si safehtml ne renvoie pas la meme chose on echappe les < en &lt; pour montrer le contenu brut
+ *
+ * @param string $texte
+ * @return string
+ */
+function echapper_html_suspect($texte){
+       if (strpos($texte,'<')===false OR strpos($texte,'=')===false)
+               return $texte;
+
+       // on teste sur strlen car safehtml supprime le contenu dangereux
+       // mais il peut aussi changer des ' en " sur les attributs html,
+       // donc un test d'egalite est trop strict
+       if (strlen(safehtml($texte))!==strlen($texte)){
+               $texte = str_replace("<","&lt;",$texte);
+       }
+
+       return $texte;
+}
+
+
+/**
+ * Sécurise un texte HTML 
+ *
+ * Ã‰chappe le code PHP et JS.
+ * Applique en plus safehtml si un plugin le définit dans inc/safehtml.php
+ *
+ * Permet de protéger les textes issus d'une origine douteuse (forums, syndications...)
+ *
+ * @filtre
+ * @link http://www.spip.net/4310
+ * 
+ * @param string $t
+ *      Texte Ã  sécuriser
+ * @return string
+ *      Texte sécurisé
+**/
 function safehtml($t) {
        static $safehtml;
 
index 989e763..861bce1 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -69,7 +69,7 @@ function charger_langue($lang, $module = 'spip') {
                // var liee a la langue
                $l = $GLOBALS['meta']['langue_site'];
                if (!$fichiers_lang = chercher_module_lang($module, $l))
-                       $fichiers_lang = chercher_module_lang($module, 'fr');
+                       $fichiers_lang = chercher_module_lang($module, _LANGUE_PAR_DEFAUT);
 
                if ($fichiers_lang) {
                        $GLOBALS['idx_lang']='i18n_'.$module.'_' .$l;
@@ -167,14 +167,14 @@ function inc_traduire_dist($ori, $lang) {
        // on essaie d'abord la langue du site, puis a defaut la langue fr
        $langue_retenue = $lang;
        if (!strlen($text)
-       AND $lang !== 'fr') {
+       AND $lang !== _LANGUE_PAR_DEFAUT) {
                if ($lang !== $GLOBALS['meta']['langue_site']) {
                        $text = inc_traduire_dist($ori, $GLOBALS['meta']['langue_site']);
                        $langue_retenue = (!strlen($text) ? $GLOBALS['meta']['langue_site'] : '');
                }
                else {
-                       $text = inc_traduire_dist($ori, 'fr');
-                       $langue_retenue = (!strlen($text) ? 'fr' : '');
+                       $text = inc_traduire_dist($ori, _LANGUE_PAR_DEFAUT);
+                       $langue_retenue = (!strlen($text) ? _LANGUE_PAR_DEFAUT : '');
                }
        }
 
index 9c21837..108b805 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 1650013..d0653b7 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -45,7 +45,9 @@ function charger_fonction($nom, $dossier='exec', $continue=false) {
 
        if (!preg_match(',^\w+$,', $f)){
                if ($continue) return false; //appel interne, on passe
-               die(spip_htmlspecialchars($nom)." pas autorise");
+               include_spip('inc/minipres');
+               echo minipres();
+               exit;
        }
 
        // passer en minuscules (cf les balises de formulaires)
@@ -66,7 +68,8 @@ function charger_fonction($nom, $dossier='exec', $continue=false) {
 
        include_spip('inc/minipres');
        echo minipres(_T('forum_titre_erreur'),
-                _T('fichier_introuvable', array('fichier'=> '<b>'.spip_htmlentities($d).'</b>')));
+                _T('fichier_introuvable', array('fichier'=> '<b>'.spip_htmlentities($d).'</b>')),
+               array('all_inline'=>true,'status'=>404));
        exit;
 }
 
@@ -77,7 +80,7 @@ function charger_fonction($nom, $dossier='exec', $continue=false) {
  */
 function include_once_check($file){
        if (file_exists($file)) {include_once $file;return true;}
-       $crash = (isset($GLOBALS['message_crash_plugins'])?unserialize($GLOBALS['message_crash_plugins']):'');
+       $crash = (isset($GLOBALS['meta']['message_crash_plugins'])?unserialize($GLOBALS['meta']['message_crash_plugins']):'');
        $crash = ($crash?$crash:array());
        $crash[$file] = true;
        ecrire_meta('message_crash_plugins',serialize($crash));
@@ -271,12 +274,27 @@ function set_request($var, $val = NULL, $c=false) {
 
 
 /**
- * Tester si une url est absolue
- * @param  $url
+ * Tester si une URL est absolue
+ * 
+ * On est sur le web, on exclut certains protocoles, 
+ * notamment 'file://', 'php://' et d'autres…
+
+ * @param string $url
  * @return bool
  */
-function tester_url_absolue($url){
-       return preg_match(";^([a-z]+:)?//;Uims",trim($url))?true:false;
+function tester_url_absolue($url) {
+       $url = trim($url);
+       if (preg_match(";^([a-z]{3,7}:)?//;Uims", $url, $m)) {
+               if (
+                       isset($m[1])
+                       and $p = strtolower(rtrim($m[1], ':'))
+                       and in_array($p, array('file', 'php', 'zlib', 'glob', 'phar', 'ssh2', 'rar', 'ogg', 'expect', 'zip'))
+                 ) {
+                       return false;
+               }
+               return true;
+       }
+       return false;
 }
 
 /**
@@ -872,7 +890,7 @@ function lister_themes_prives(){
                $themes = array(_SPIP_THEME_PRIVE);
                // lors d'une installation neuve, prefs n'est pas definie.
                if (isset($GLOBALS['visiteur_session']['prefs'])) {
-                       $prefs = isset($GLOBALS['visiteur_session']['prefs']);
+                       $prefs = $GLOBALS['visiteur_session']['prefs'];
                } else {
                        $prefs = array();
                }
@@ -969,8 +987,11 @@ function find_in_path ($file, $dirname='', $include=false) {
                                        include_once _ROOT_CWD . $a;
                                        $inc[$dirname][$file] = $inc[''][$dirname . $file] = true;
                                }
-                               if (!defined('_SAUVER_CHEMIN'))
-                                       define('_SAUVER_CHEMIN',true);
+                               if (!defined('_SAUVER_CHEMIN')){
+                                       // si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher
+                                       if (is_null($GLOBALS['path_files'])) return $a;
+                                       define('_SAUVER_CHEMIN', true);
+                               }
                                return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = $a;
                        }
                }
@@ -988,8 +1009,11 @@ function find_in_path ($file, $dirname='', $include=false) {
                }
        }
 
-       if (!defined('_SAUVER_CHEMIN'))
-               define('_SAUVER_CHEMIN',true);
+       if (!defined('_SAUVER_CHEMIN')){
+               // si le chemin n'a pas encore ete charge, ne pas lever le flag, ne pas cacher
+               if (is_null($GLOBALS['path_files'])) return false;
+               define('_SAUVER_CHEMIN', true);
+       }
        return $GLOBALS['path_files'][$GLOBALS['path_sig']][$dirname][$file] = $GLOBALS['path_files'][$GLOBALS['path_sig']][''][$dirname . $file] = false;
 }
 
@@ -1214,8 +1238,9 @@ function test_valeur_serveur($truc) {
 // Fonctions de fabrication des URL des scripts de Spip
 //
 /**
- * l'URL de base du site, sans se fier a meta(adresse_site) qui
- * peut etre fausse (sites a plusieurs noms d'hotes, deplacements, erreurs)
+ * L'URL de base du site, en priorité sans se fier a meta(adresse_site) qui
+ * peut etre fausse (sites a plusieurs noms d'hotes, deplacements, erreurs).
+ * En dernier recours, lorsqu'on ne trouve rien, on utilise adresse_site comme fallback.
  * Note : la globale $profondeur_url doit etre initialisee de maniere a
  * indiquer le nombre de sous-repertoires de l'url courante par rapport a la
  * racine de SPIP : par exemple, sur ecrire/ elle vaut 1, sur sedna/ 1, et a
@@ -1246,8 +1271,16 @@ function url_de_base($profondeur=null) {
                OR (isset($_SERVER['HTTPS']) AND
                    test_valeur_serveur($_SERVER['HTTPS']))
        ) ? 'https' : 'http';
-       # note : HTTP_HOST contient le :port si necessaire
+       // note : HTTP_HOST contient le :port si necessaire
        $host = $_SERVER['HTTP_HOST'];
+       // si on n'a pas trouvé d'hôte du tout, en dernier recours on utilise adresse_site comme fallback
+       if (is_null($host) and isset($GLOBALS['meta']['adresse_site'])) {
+               $host = $GLOBALS['meta']['adresse_site'];
+               if ($scheme = parse_url($host, PHP_URL_SCHEME)) {
+                       $http = $scheme;
+                       $host = str_replace("{$scheme}://", '', $host);
+               }
+       }
        if (isset($_SERVER['SERVER_PORT'])
                AND $port=$_SERVER['SERVER_PORT']
                AND strpos($host,":")==false){
@@ -1281,6 +1314,16 @@ function url_de_($http,$host,$request,$prof=0){
        $prof = max($prof,0);
 
        $myself = ltrim($request,'/');
+       // vieux mode HTTP qui envoie après le nom de la methode l'URL compléte
+       // protocole, "://", nom du serveur avant le path dans _SERVER["REQUEST_URI"]
+       if (strpos($myself,'://') !== false) {
+               $myself = explode('://',$myself);
+               array_shift($myself);
+               $myself = implode('://',$myself);
+               $myself = explode('/',$myself);
+               array_shift($myself);
+               $myself = implode('/',$myself);
+       }
        # supprimer la chaine de GET
        list($myself) = explode('?', $myself);
        $url = join('/', array_slice(explode('/', $myself), 0, -1-$prof)).'/';
@@ -1568,6 +1611,15 @@ function spip_initialisation_core($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) {
                #if (!defined('_SPIP_LOCK_MODE')) define('_SPIP_LOCK_MODE',2); // utiliser le nfslock de spip mais link() est tres souvent interdite
        }
 
+       // Langue par defaut
+       if (!defined('_LANGUE_PAR_DEFAUT')) define('_LANGUE_PAR_DEFAUT','fr');
+
+       // PHP_VERSION_ID dispo depuis PHP 5.2.7
+       if (!defined('PHP_VERSION_ID')) {
+          $version = explode('.',PHP_VERSION);
+          define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
+       }
+
        //
        // Module de lecture/ecriture/suppression de fichiers utilisant flock()
        // (non surchargeable en l'etat ; attention si on utilise include_spip()
@@ -1593,7 +1645,9 @@ function spip_initialisation_core($pi=NULL, $pa=NULL, $ti=NULL, $ta=NULL) {
        spip_desinfecte($_REQUEST);
 
        // Par ailleurs on ne veut pas de magic_quotes au cours de l'execution
-       @set_magic_quotes_runtime(0);
+       if (PHP_VERSION_ID<50300) {
+               @set_magic_quotes_runtime(0);
+       }
 
        // Si les variables sont passees en global par le serveur,
        // il faut faire quelques verifications de base
@@ -1785,7 +1839,7 @@ function spip_initialisation_suite() {
        // on verifie que la memoire est suffisante pour le compactage css+js pour eviter la page blanche
        // il y aura d'autres problemes et l'utilisateur n'ira pas tres loin, mais ce sera plus comprehensible qu'une page blanche
        if (test_espace_prive() AND _MEMORY_LIMIT_MIN>8){
-               if ($memory = trim(ini_get('memory_limit'))){
+               if ($memory = trim(ini_get('memory_limit')) and $memory != -1) {
                        $unit = strtolower(substr($memory,strlen($memory/1),1));
                        switch($unit) {
                                // Le modifieur 'G' est disponible depuis PHP 5.1.0
index a85db3f..3a40fb1 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 188638d..684e8b0 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -90,10 +90,12 @@ if (!defined('_IS_BOT')){
        define('_IS_BOT',
                isset($_SERVER['HTTP_USER_AGENT'])
                AND preg_match(
-               // mots generiques
+                       // mots generiques
                        ',bot|slurp|crawler|spider|webvac|yandex|'
+                       // MSIE 6.0 est un botnet 99,9% du temps, on traite donc ce USER_AGENT comme un bot
+                       . 'MSIE 6\.0|'
                        // UA plus cibles
-                       . '80legs|accoona|AltaVista|ASPSeek|Baidu|Charlotte|EC2LinkFinder|eStyle|Google|Genieo|INA dlweb|InfegyAtlas|Java VM|LiteFinder|Lycos|Rambler|Scooter|ScrubbyBloglines|Yahoo|Yeti'
+                       . '80legs|accoona|AltaVista|ASPSeek|Baidu|Charlotte|EC2LinkFinder|eStyle|facebook|flipboard|hootsuite|FunWebProducts|Google|Genieo|INA dlweb|InfegyAtlas|Java VM|LiteFinder|Lycos|MetaURI|Moreover|Rambler|Scooter|ScrubbyBloglines|Yahoo|Yeti'
                        . ',i', (string)$_SERVER['HTTP_USER_AGENT'])
        );
 }
@@ -294,7 +296,7 @@ $liste_des_authentifications = array(
 // pour specifier les versions de SPIP necessaires
 // il faut s'en tenir a un nombre de decimales fixe
 // ex : 2.0.0, 2.0.0-dev, 2.0.0-beta, 2.0.0-beta2
-$spip_version_branche = "3.0.20";
+$spip_version_branche = "3.0.25";
 // version des signatures de fonctions PHP
 // (= numero SVN de leur derniere modif cassant la compatibilite et/ou necessitant un recalcul des squelettes)
 $spip_version_code = 17873;
index 99a8329..d3c650a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -65,6 +65,14 @@ if (_request('action') OR _request('var_ajax') OR _request('formulaire_action'))
          traiter_formulaires_dynamiques())
          exit; // le hit est fini !
 }
+// securiser les redirect du back-office
+if (_request('redirect')) {
+       if (!function_exists('securiser_redirect_action')){
+               include_spip('public/aiguiller');
+       }
+       set_request('redirect',securiser_redirect_action(_request('redirect')));
+}
+
 
 //
 // Gestion d'une page normale de l'espace prive
index 4c1a3ed..3a0320e 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index e3e6432..d1fd2d0 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 67d9519..c14092e 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 5c706ff..947c1bc 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 46ec2e7..08b983c 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 6c20a6f..abc89ab 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 9c25740..9d07b3e 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -53,16 +53,9 @@ function test_ecrire($my_dir) {
                }
                spip_unlink('test');
        }
-       // Verifier que les valeurs sont correctes
-       $f = @fopen($my_dir.'test.php', 'w');
-       if ($f) {
-               @fputs($f, '<'.'?php $ok = true; ?'.'>');
-               @fclose($f);
-               @chmod($my_dir.'test.php', $chmod);
-               include($my_dir.'test.php');
-       }
-       spip_unlink($my_dir.'test.php');
-       return $ok?$chmod:false;
+       $ok = is_dir($my_dir) && is_writable($my_dir);
+
+       return $ok ? $chmod : false;
 }
 
 //
index cb3cec6..471ac7f 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 4acbac5..8e8a1a4 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index b6ce021..4359030 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 4f8b61c..768f007 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 23223ce..1265e03 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 9a3bd0b..433069e 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index bc1684e..29acc55 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 4ccaa43..2af35bc 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index a06d4b3..0afa991 100644 (file)
@@ -4,7 +4,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 9a9166c..98ce715 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 58b0572..2a1c37e 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index abe37f2..b458dc2 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 6da03a4..425d6e2 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index d6e78cd..c3429f0 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index a732516..68d5f99 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 863eebf..4aed6a1 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 822f27f..efbf362 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 6ad8b98..fb6a906 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index c141afa..eb56c9c 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 7cd11c0..964b03c 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index c447266..31b6585 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 114df0d..8bc746a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index ad59906..6f25476 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index bad0d5f..0c47a24 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index aca20e3..8ac9d03 100644 (file)
@@ -1,8 +1,8 @@
 <paquet
        prefix="spip"
        categorie="outil"
-       version="3.0.20"
-       etat="stable"
+       version="3.0.25"
+       etat="dev"
        compatibilite="];["
        schema="19268"
        documentation="http://www.spip.net"
@@ -49,6 +49,7 @@
        <pipeline nom="affiche_formulaire_login" action="auth_formulaire_login" inclure="inc/pipelines.php" />
        <pipeline nom="alertes_auteur" action="" />
        <pipeline nom="arbo_creer_chaine_url" action="" />
+       <pipeline nom="auth_administrer" action="" />
        <pipeline nom="autoriser" action="" />
        <pipeline nom="base_admin_repair" action="" />
        <pipeline nom="boite_infos" action="f_boite_infos" inclure="inc/pipelines_ecrire.php" />
index 6aa7b1b..c1046ee 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index ae074d2..fdbecad 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 6c9989f..7ae782a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index d3bdef7..af14268 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index fdb761b..6bb5cd3 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index aef46b1..a3da5ef 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 3681b8b..4cfe614 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 6ba910d..55c793b 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 915dd82..5590ce5 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 12d74ac..8d08e3b 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index c0cbac0..800acba 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index c3bf5a6..e0394f9 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index a128889..c24466e 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index f361e28..ed1ab60 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 28f552b..d34c686 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -12,8 +12,9 @@
 
 if (!defined('_ECRIRE_INC_VERSION')) return;
 
-function securiser_redirect_action($redirect){
-       if (tester_url_absolue($redirect) AND !defined('_AUTORISER_ACTION_ABS_REDIRECT')){
+function securiser_redirect_action($redirect) {
+       if ((tester_url_absolue($redirect) or preg_match(',^\w+:,',trim($redirect)))
+               and !defined('_AUTORISER_ACTION_ABS_REDIRECT')) {
                // si l'url est une url du site, on la laisse passer sans rien faire
                // c'est encore le plus simple
                $base = $GLOBALS['meta']['adresse_site']."/";
index 34f4fba..c4796b3 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -477,6 +477,8 @@ function inclure_modele($type, $id, $params, $lien, $connect='', $env=array()) {
                $contexte['lien'] = str_replace("&quot;",'"', $lien['href']);
                $contexte['lien_class'] = $lien['class'];
                $contexte['lien_mime'] = $lien['mime'];
+               $contexte['lien_title'] = $lien['title'];
+               $contexte['lien_hreflang'] = $lien['hreflang'];
        }
 
        // Traiter les parametres
index 27b8f19..a7c63e6 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -474,45 +474,59 @@ function balise_LESAUTEURS_dist ($p) {
 function balise_RANG_dist($p) {
        $b = index_boucle($p);
        if ($b === '') {
-               $msg = array('zbug_champ_hors_boucle',
-                               array('champ' => '#RANG')
-                         );
+               $msg = array(
+                       'zbug_champ_hors_boucle',
+                       array('champ' => '#RANG')
+               );
                erreur_squelette($msg, $p);
-       }
-       else {
+       } else {
                // chercher d'abord un champ sql rang (mais pas dans le env : defaut '' si on trouve pas de champ sql)
                // dans la boucle immediatement englobante uniquement
                // sinon on compose le champ calcule
                $_rang = champ_sql('rang', $p, '', false);
 
                // si pas trouve de champ sql rang :
-               if (!$_rang){
+               if (!$_rang) {
                        $boucle = &$p->boucles[$b];
-                       $trouver_table = charger_fonction('trouver_table','base');
+                       $trouver_table = charger_fonction('trouver_table', 'base');
                        $desc = $trouver_table($boucle->id_table);
-                       $_titre = ''; # champ dont on extrait le numero
-                       if (isset($desc['titre'])){
-                               $t=$desc['titre'];
-                         if (preg_match(';(^|,)([^,]*titre)(,|$);',$t,$m)){
-                                 $m = preg_replace(",as\s+titre$,i","",$m[2]);
-                                 $m = trim($m);
-                                 if ($m!="''"){
-                                         if (!preg_match(",\W,",$m))
-                                                 $m = $boucle->id_table . ".$m";
-                                         $m .= " AS titre_rang";
-
-                                         $boucle->select[] = $m;
-                                         $_titre = '$Pile[$SP][\'titre_rang\']';
-                                 }
-                         }
+                       $_titre = ''; # où extraire le numero ?
+                       
+                       if (isset($desc['titre'])) {
+                               $t = $desc['titre'];
+                               if (
+                                       // Soit on trouve avec la déclaration de la lang AVANT
+                                       preg_match(';(?:lang\s*,)\s*(.*?titre)\s*(,|$);', $t, $m)
+                                       // Soit on prend depuis le début
+                                       or preg_match(';^(.*?titre)\s*(,|$);', $t, $m)
+                               ) {
+                                       $m = preg_replace(',as\s+titre$,i', '', $m[1]);
+                                       $m = trim($m);
+                                       if ($m != "''") {
+                                               if (!preg_match(",\W,", $m)) {
+                                                       $m = $boucle->id_table . ".$m";
+                                               }
+                                               
+                                               $m .= " AS titre_rang";
+
+                                               $boucle->select[] = $m;
+                                               $_titre = '$Pile[$SP][\'titre_rang\']';
+                                       }
+                               }
                        }
-                       if (!$_titre)
+                       
+                       // si on n'a rien trouvé, on utilise le champ titre classique
+                       if (!$_titre) {
                                $_titre = champ_sql('titre', $p);
+                       }
+                       
                        $_rang = "recuperer_numero($_titre)";
                }
+               
                $p->code = $_rang;
                $p->interdire_scripts = false;
        }
+       
        return $p;
 }
 
@@ -853,7 +867,7 @@ function balise_CHAMP_SQL_dist($p){
        AND $champ = ($p->param[0][1][0]->texte))
                $p->code = champ_sql($champ, $p);
        else {
-               $err_b_s_a = array('zbug_balise_sans_argument', array('balise' => ' URL_'));
+               $err_b_s_a = array('zbug_balise_sans_argument', array('balise' => ' CHAMP_SQL'));
                erreur_squelette($err_b_s_a, $p);
        }
        #$p->interdire_scripts = true;
@@ -886,26 +900,43 @@ function balise_REM_dist($p) {
 }
 
 
-//
-// #HTTP_HEADER
-// pour les entetes de retour http
-// Ne fonctionne pas sur les INCLURE !
-// #HTTP_HEADER{Content-Type: text/css}
-//
-// http://doc.spip.org/@balise_HTTP_HEADER_dist
+
+/**
+ * Compile la balise `#HTTP_HEADER` envoyant des entêtes de retour HTTP
+ *
+ * Doit Ãªtre placée en tête de fichier et ne fonctionne pas dans une
+ * inclusion.
+ *
+ * @balise
+ * @link http://www.spip.net/4631
+ * @example
+ *     ```
+ *     #HTTP_HEADER{Content-Type: text/csv; charset=#CHARSET}
+ *     ```
+ *
+ * @param Champ $p
+ *     Pile au niveau de la balise
+ * @return Champ
+ *     Pile complétée par le code Ã  générer
+ **/
 function balise_HTTP_HEADER_dist($p) {
 
-       $header = interprete_argument_balise(1,$p);
+       $header = interprete_argument_balise(1, $p);
        if (!$header) {
                $err_b_s_a = array('zbug_balise_sans_argument', array('balise' => 'HTTP_HEADER'));
                erreur_squelette($err_b_s_a, $p);
-       } else  $p->code = "'<'.'?php header(\"' . "
-               . $header
-               . " . '\"); ?'.'>'";
+       } else {
+               $p->code = "'<'.'?php header(' . _q("
+                       . $header
+                       . ") . '); ?'.'>'";
+       }
        $p->interdire_scripts = false;
+
        return $p;
 }
 
+
+
 // Filtre a appliquer a l'ensemble de la page une fois calculee
 // (filtrage fait au niveau du squelette, et sans s'appliquer aux <INCLURE>)
 // http://doc.spip.org/@balise_FILTRE_dist
index be9513c..37c0b1b 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index ab8d1d9..478dbc3 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 7341b0a..362000a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -140,7 +140,7 @@ function calculer_inclure($p, &$boucles, $id_boucle) {
        $_contexte = argumenter_inclure($p->param, false, $p, $boucles, $id_boucle, true, '', true);
        if (is_string($p->texte)) {
                $fichier = $p->texte;
-               $code = "\"$fichier\"";
+               $code = "\"".str_replace('"','\"',$fichier)."\"";
 
        } else {
                $code = calculer_liste($p->texte, $p->descr, $boucles, $id_boucle);
@@ -184,7 +184,7 @@ function calculer_inclure($p, &$boucles, $id_boucle) {
        }
 
        // s'il y a une extension .php, ce n'est pas un squelette
-       if (preg_match('/^.+[.]php$/s', $fichier)) {
+       if ($fichier and preg_match('/^.+[.]php$/s', $fichier)) {
                $code = sandbox_composer_inclure_php($fichier, $p, $contexte);
        } else  {
                $_options[] = "\"compil\"=>array($compil)";
@@ -446,6 +446,7 @@ function calculer_boucle_nonrec($id_boucle, &$boucles, $trace) {
                // afin que le corps de boucle affecte la globale directement
                $init_lang = "lang_select(\$GLOBALS['spip_lang']);\n\t";
                $fin_lang = "lang_select();\n\t";
+               $fin_lang_select_public = "\n\t\tlang_select();";
 
                $corps .= 
                        "\n\t\tlang_select_public("
@@ -459,6 +460,7 @@ function calculer_boucle_nonrec($id_boucle, &$boucles, $trace) {
        else {
                $init_lang = '';
                $fin_lang = '';
+               $fin_lang_select_public = '';
                // sortir les appels au traducteur (invariants de boucle)
                if (strpos($return, '?php') === false
                AND preg_match_all("/\W(_T[(]'[^']*'[)])/", $return, $r)) {
@@ -503,6 +505,9 @@ function calculer_boucle_nonrec($id_boucle, &$boucles, $trace) {
                . $boucle->partie 
                . $corps;
 
+       // depiler la lang de la boucle si besoin
+       $corps .= $fin_lang_select_public;
+
        // si le corps est une constante, ne pas appeler le serveur N fois!
 
        if (preg_match(CODE_MONOTONE,str_replace("\\'",'',$corps), $r)) {
index 71aca21..f96e8fb 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -421,21 +421,22 @@ function lang_select_public($lang, $lang_select, $titre=null) {
        // Cas 1. forcer_lang = true et pas de critere {lang_select}
        if (isset($GLOBALS['forcer_lang']) AND $GLOBALS['forcer_lang']
        AND $lang_select !== 'oui')
-               return;
+               $lang = $GLOBALS['spip_lang'];
 
        // Cas 2. l'objet n'a pas de langue definie (ou definie a '')
-       if (!strlen($lang))
-               return;
+       elseif (!strlen($lang))
+               $lang = $GLOBALS['spip_lang'];
 
        // Cas 3. l'objet est multilingue !
-       if ($lang_select !== 'oui'
-       AND strlen($titre) > 10
-       AND strpos($titre, '<multi>') !== false
-       AND strpos(echappe_html($titre), '<multi>') !== false)
-               return;
-
-       // Tous les cas ayant ete elimines, faire le job
-       $GLOBALS['spip_lang'] = $lang;
+       elseif ($lang_select !== 'oui'
+         AND strlen($titre) > 10
+         AND strpos($titre, '<multi>') !== false
+         AND strpos(echappe_html($titre), '<multi>') !== false)
+               $lang = $GLOBALS['spip_lang'];
+
+       // faire un lang_select() eventuellement sur la langue inchangee
+       lang_select($lang);
+
        return;
 }
 
index 92b7cc2..f797b0a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 1fb6dd8..9fdae9f 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 7becebc..9d5db12 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 85f5611..49c7090 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -52,8 +52,43 @@ if ($page['process_ins'] != 'html') {
        if (strpos($page['texte'],'?xml')!==false)
                $page['texte'] = str_replace('<'.'?xml', "<\1?xml", $page['texte']);
 
-       $res = eval('?' . '>' . $page['texte']);
-       $page['texte'] = ob_get_contents();
+       try {
+               $res = eval('?' . '>' . $page['texte']);
+               // error catching 5.2<=PHP<7
+               if ($res === false
+                 and function_exists('error_get_last')
+                 and ($erreur = error_get_last()) ) {
+                       $code = $page['texte'];
+                       $GLOBALS['numero_ligne_php'] = 1;
+                       if (!function_exists('numerote_ligne_php')){
+                               function numerote_ligne_php($match){
+                                       $GLOBALS['numero_ligne_php']++;
+                                       return "\n/*".str_pad($GLOBALS['numero_ligne_php'],3,"0",STR_PAD_LEFT)."*/";
+                               }
+                       }
+                       $code = "/*001*/".preg_replace_callback(",\n,","numerote_ligne_php",$code);
+                       $code = trim(highlight_string($code,true));
+                       erreur_squelette("L".$erreur['line'].": ".$erreur['message']."<br />".$code,array($page['source'],'',$erreur['file'],'',$GLOBALS['spip_lang']));
+                       $page['texte'] = "<!-- Erreur -->";
+               }
+               else {
+                       $page['texte'] = ob_get_contents();
+               }
+       }
+       catch (Exception $e){
+               $code = $page['texte'];
+               $GLOBALS['numero_ligne_php'] = 1;
+               if (!function_exists('numerote_ligne_php')){
+                       function numerote_ligne_php($match){
+                               $GLOBALS['numero_ligne_php']++;
+                               return "\n/*".str_pad($GLOBALS['numero_ligne_php'],3,"0",STR_PAD_LEFT)."*/";
+                       }
+               }
+               $code = "/*001*/".preg_replace_callback(",\n,","numerote_ligne_php",$code);
+               $code = trim(highlight_string($code,true));
+               erreur_squelette("L".$e->getLine().": ".$e->getMessage()."<br />".$code,array($page['source'],'',$e->getFile(),'',$GLOBALS['spip_lang']));
+               $page['texte'] = "<!-- Erreur -->";
+       }
        ob_end_clean();
 
        $page['process_ins'] = 'html';
index fcfbfb3..9efb9fc 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 90a7e30..f40ef5e 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 89acafa..3aa6711 100644 (file)
@@ -4,7 +4,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index cbad1c4..10e62c9 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index f596a0e..0934339 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index adbf38d..fe60941 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -143,6 +143,12 @@ function public_parametrer_dist($fond, $contexte='', $cache='', $connect='')  {
                        . join(', ', $infos)
                        .' ('.strlen($page['texte']).' octets)');
 
+               if (defined('_CALCUL_PROFILER') AND intval($profile)>_CALCUL_PROFILER){
+                       spip_log("calcul ($profile) [$skel] "
+                               . join(', ', $infos)
+                               .' ('.strlen($page['texte']).' octets) | '.$_SERVER['REQUEST_URI'],"profiler"._LOG_AVERTISSEMENT);
+               }
+
                if ($debug) {
                // si c'est ce que demande le debusqueur, lui passer la main
                        $t = strlen($page['texte']) ? $page['texte'] : " ";
@@ -158,7 +164,7 @@ function public_parametrer_dist($fond, $contexte='', $cache='', $connect='')  {
                // Si #CACHE{} n'etait pas la, le mettre a $delais
                if (!isset($page['entetes']['X-Spip-Cache'])){
                        // Dans l'espace prive ou dans un modeles/ on pose un cache 0 par defaut
-                       // si aucun #CACHE{} spécifié
+                       // si aucun #CACHE{} specifie
                        // le contexte implicite qui conditionne le cache assure qu'on retombe pas sur le meme
                        // entre public et prive
                        if (test_espace_prive() OR strncmp($fond,'modeles/',8)==0)
index 50064e8..aea89ed 100644 (file)
@@ -3,12 +3,12 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
  *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
-\***************************************************************************/
+ * \***************************************************************************/
 
 
 if (!defined('_ECRIRE_INC_VERSION')) return;
@@ -24,42 +24,42 @@ define('BALISE_POST_BOUCLE', '</B');
 define('BALISE_ALT_BOUCLE', '<//B');
 
 define('TYPE_RECURSIF', 'boucle');
-define('SPEC_BOUCLE','/\s*\(\s*([^\s?)]+)(\s*[^)?]*)([?]?)\)/');
+define('SPEC_BOUCLE', '/\s*\(\s*([^\s?)]+)(\s*[^)?]*)([?]?)\)/');
 define('NOM_DE_BOUCLE', "[0-9]+|[-_][-_.a-zA-Z0-9]*");
 # ecriture alambiquee pour rester compatible avec les hexadecimaux des vieux squelettes
 define('NOM_DE_CHAMP', "#((" . NOM_DE_BOUCLE . "):)?(([A-F]*[G-Z_][A-Z_0-9]*)|[A-Z_]+)(\*{0,2})");
 define('CHAMP_ETENDU', '/\[([^]\[]*)\(' . NOM_DE_CHAMP . '([^[)]*\)[^]\[]*)\]/S');
 
-define('BALISE_INCLURE','/<INCLU[DR]E[[:space:]]*(\(([^)]*)\))?/S');
-define('BALISE_POLYGLOTTE',',<multi>(.*)</multi>,Uims');
-define('BALISE_IDIOMES',',<:(([a-z0-9_]+):)?([a-z0-9_]*)({([^\|=>]*=[^\|>]*)})?((\|[^>]*)?:>),iS');
+define('BALISE_INCLURE', '/<INCLU[DR]E[[:space:]]*(\(([^)]*)\))?/S');
+define('BALISE_POLYGLOTTE', ',<multi>(.*)</multi>,Uims');
+define('BALISE_IDIOMES', ',<:(([a-z0-9_]+):)?([a-z0-9_]*)({([^\|=>]*=[^\|>]*)})?((\|[^>]*)?:>),iS');
 define('BALISE_IDIOMES_ARGS', '@^\s*([^= ]*)\s*=\s*((' . NOM_DE_CHAMP . '[{][^}]*})?[^,]*)\s*,?\s*@s');
 
 define('SQL_ARGS', '(\([^)]*\))');
 define('CHAMP_SQL_PLUS_FONC', '`?([A-Z_\/][A-Z_\/0-9.]*)' . SQL_ARGS . '?`?');
 
 // http://doc.spip.org/@phraser_inclure
-function phraser_inclure($texte, $ligne, $result) {
+function phraser_inclure($texte, $ligne, $result){
 
-       while (preg_match(BALISE_INCLURE, $texte, $match)) {
-               $p = strpos($texte,$match[0]);
+       while (preg_match(BALISE_INCLURE, $texte, $match)){
+               $p = strpos($texte, $match[0]);
                $debut = substr($texte, 0, $p);
                if ($p) $result = phraser_idiomes($debut, $ligne, $result);
-               $ligne +=  substr_count($debut, "\n");
+               $ligne += substr_count($debut, "\n");
                $champ = new Inclure;
                $champ->ligne = $ligne;
                $ligne += substr_count($match[0], "\n");
                $fichier = @$match[2];
                # assurer ici la migration .php3 => .php
                # et de l'ancienne syntaxe INCLURE(page.php3) devenue surperflue
-               if (preg_match(',^(.*[.]php)3$,', $fichier, $r)) {
+               if (preg_match(',^(.*[.]php)3$,', $fichier, $r)){
                        $fichier = $r[1];
                }
-               $champ->texte = ($fichier !== 'page.php') ? $fichier : '';
+               $champ->texte = ($fichier!=='page.php') ? $fichier : '';
                $texte = substr($texte, $p+strlen($match[0]));
                // on assimile {var=val} a une liste de un argument sans fonction
-               phraser_args($texte,"/>","",$result,$champ);
-               if (!$champ->texte OR count($champ->param) > 1) {
+               phraser_args($texte, "/>", "", $result, $champ);
+               if (!$champ->texte OR count($champ->param)>1){
                        if (!function_exists('normaliser_inclure'))
                                include_spip('public/normaliser');
                        normaliser_inclure($champ);
@@ -69,46 +69,48 @@ function phraser_inclure($texte, $ligne, $result) {
                $texte = preg_replace(',^</INCLU[DR]E>,', '', $texte);
                $result[] = $champ;
        }
+
        return (($texte==="") ? $result : phraser_idiomes($texte, $ligne, $result));
 }
 
 // http://doc.spip.org/@phraser_polyglotte
-function phraser_polyglotte($texte,$ligne, $result) {
+function phraser_polyglotte($texte, $ligne, $result){
 
        if (preg_match_all(BALISE_POLYGLOTTE, $texte, $m, PREG_SET_ORDER))
-       foreach ($m as $match) {
-               $p = strpos($texte, $match[0]);
-               $debut = substr($texte, 0, $p);
-               if ($p) {
-                       $champ = new Texte;
-                       $champ->texte = $debut;
+               foreach ($m as $match){
+                       $p = strpos($texte, $match[0]);
+                       $debut = substr($texte, 0, $p);
+                       if ($p){
+                               $champ = new Texte;
+                               $champ->texte = $debut;
+                               $champ->ligne = $ligne;
+                               $result[] = $champ;
+                               $ligne += substr_count($champ->texte, "\n");
+                       }
+
+                       $champ = new Polyglotte;
                        $champ->ligne = $ligne;
+                       $ligne += substr_count($match[0], "\n");
+                       $lang = '';
+                       $bloc = $match[1];
+                       $texte = substr($texte, $p+strlen($match[0]));
+                       while (preg_match("/^[[:space:]]*([^[{]*)[[:space:]]*[[{]([a-z_]+)[]}](.*)$/si", $bloc, $regs)){
+                               $trad = $regs[1];
+                               if ($trad OR $lang)
+                                       $champ->traductions[$lang] = $trad;
+                               $lang = $regs[2];
+                               $bloc = $regs[3];
+                       }
+                       $champ->traductions[$lang] = $bloc;
                        $result[] = $champ;
-                       $ligne += substr_count($champ->texte, "\n");
                }
-
-               $champ = new Polyglotte;
+       if ($texte!==""){
+               $champ = new Texte;
+               $champ->texte = $texte;
                $champ->ligne = $ligne;
-               $ligne += substr_count($match[0], "\n");
-               $lang = '';
-               $bloc = $match[1];
-               $texte = substr($texte,$p+strlen($match[0]));
-               while (preg_match("/^[[:space:]]*([^[{]*)[[:space:]]*[[{]([a-z_]+)[]}](.*)$/si", $bloc, $regs)) {
-                 $trad = $regs[1];
-                 if ($trad OR $lang) 
-                       $champ->traductions[$lang] = $trad;
-                 $lang = $regs[2];
-                 $bloc = $regs[3];
-               }
-               $champ->traductions[$lang] = $bloc;
                $result[] = $champ;
        }
-       if ($texte!=="") {
-                       $champ = new Texte;
-                       $champ->texte = $texte;
-                       $champ->ligne = $ligne;
-                       $result[] = $champ;
-       }
+
        return $result;
 }
 
@@ -118,13 +120,13 @@ function phraser_polyglotte($texte,$ligne, $result) {
 // chaine peut etre vide si =texte1 est present et arg1 est vide
 // sinon ce n'est pas un idiome
 // http://doc.spip.org/@phraser_idiomes
-function phraser_idiomes($texte,$ligne,$result) {
-       while (preg_match(BALISE_IDIOMES, $texte, $match)) {
+function phraser_idiomes($texte, $ligne, $result){
+       while (preg_match(BALISE_IDIOMES, $texte, $match)){
                $p = strpos($texte, $match[0]);
                $ko = (!$match[3] && ($match[5][0]!=='='));
-               $debut = substr($texte, 0, $p + ($ko ? strlen($match[0]) : 0));
+               $debut = substr($texte, 0, $p+($ko ? strlen($match[0]) : 0));
                if ($debut) $result = phraser_champs($debut, $ligne, $result);
-               $texte = substr($texte,$p+strlen($match[0]));
+               $texte = substr($texte, $p+strlen($match[0]));
                $ligne += substr_count($debut, "\n");
                if ($ko) continue; // faux idiome
                $champ = new Idiome;
@@ -133,9 +135,9 @@ function phraser_idiomes($texte,$ligne,$result) {
                // Stocker les arguments de la balise de traduction
                $args = array();
                $largs = $match[5];
-               while (preg_match(BALISE_IDIOMES_ARGS, $largs, $r)) {
+               while (preg_match(BALISE_IDIOMES_ARGS, $largs, $r)){
                        $args[$r[1]] = phraser_champs($r[2], 0, array());
-                       $largs = substr($largs, strlen($r[0])); 
+                       $largs = substr($largs, strlen($r[0]));
                }
                $champ->arg = $args;
                $champ->nom_champ = strtolower($match[3]);
@@ -144,49 +146,51 @@ function phraser_idiomes($texte,$ligne,$result) {
                phraser_args(@$match[7], ":", '', array(), $champ);
                $result[] = $champ;
        }
-       if ($texte!=="")  $result = phraser_champs($texte,$ligne,$result);
+       if ($texte!=="") $result = phraser_champs($texte, $ligne, $result);
+
        return $result;
 }
 
 // http://doc.spip.org/@phraser_champs
-function phraser_champs($texte,$ligne,$result) {
-       while (preg_match("/".NOM_DE_CHAMP."/S", $texte, $match)) {
-         $p = strpos($texte, $match[0]);
-         $suite = substr($texte,$p+strlen($match[0]));
-         if ($match[5] || (strpos($suite[0], "[0-9]") === false)) {
-               $debut = substr($texte, 0, $p);
-               if ($p) $result = phraser_polyglotte($debut, $ligne, $result);
-               $ligne += substr_count($debut, "\n");
-               $champ = new Champ;
-               $champ->ligne = $ligne;
-               $ligne += substr_count($match[0], "\n");
-               $champ->nom_boucle = $match[2];
-               $champ->nom_champ = $match[3];
-               $champ->etoile = $match[5];
-
-               if ($suite[0] == '{') {
-                       phraser_arg($suite, '', array(), $champ);
-               // ce ltrim est une ereur de conception
-               // mais on le conserve par souci de compatibilite
-                       $texte = ltrim($suite);
-               // Il faudrait le normaliser dans l'arbre de syntaxe abstraite
-               // pour faire sauter ce cas particulier a la decompilation.
-               /* Ce qui suit est malheureusement incomplet pour cela:
-                       if ($n = (strlen($suite) - strlen($texte))) {
-                               $champ->apres = array(new Texte);
-                               $champ->apres[0]->texte = substr($suite,0,$n);
-                       }
-               */
-               } else $texte = $suite;
-               phraser_vieux($champ);
-               $result[] = $champ;
-         } else {
-           // faux champ
-           $result = phraser_polyglotte (substr($texte, 0, $p+1), $ligne, $result);
-           $texte = (substr($texte, $p+1));
-         }
+function phraser_champs($texte, $ligne, $result){
+       while (preg_match("/" . NOM_DE_CHAMP . "/S", $texte, $match)){
+               $p = strpos($texte, $match[0]);
+               $suite = substr($texte, $p+strlen($match[0]));
+               if ($match[5] || (strpos($suite[0], "[0-9]")===false)){
+                       $debut = substr($texte, 0, $p);
+                       if ($p) $result = phraser_polyglotte($debut, $ligne, $result);
+                       $ligne += substr_count($debut, "\n");
+                       $champ = new Champ;
+                       $champ->ligne = $ligne;
+                       $ligne += substr_count($match[0], "\n");
+                       $champ->nom_boucle = $match[2];
+                       $champ->nom_champ = $match[3];
+                       $champ->etoile = $match[5];
+
+                       if ($suite[0]=='{'){
+                               phraser_arg($suite, '', array(), $champ);
+                               // ce ltrim est une ereur de conception
+                               // mais on le conserve par souci de compatibilite
+                               $texte = ltrim($suite);
+                               // Il faudrait le normaliser dans l'arbre de syntaxe abstraite
+                               // pour faire sauter ce cas particulier a la decompilation.
+                               /* Ce qui suit est malheureusement incomplet pour cela:
+                                       if ($n = (strlen($suite) - strlen($texte))) {
+                                               $champ->apres = array(new Texte);
+                                               $champ->apres[0]->texte = substr($suite,0,$n);
+                                       }
+                               */
+                       } else $texte = $suite;
+                       phraser_vieux($champ);
+                       $result[] = $champ;
+               } else {
+                       // faux champ
+                       $result = phraser_polyglotte(substr($texte, 0, $p+1), $ligne, $result);
+                       $texte = (substr($texte, $p+1));
+               }
        }
        if ($texte!=="") $result = phraser_polyglotte($texte, $ligne, $result);
+
        return $result;
 }
 
@@ -196,11 +200,12 @@ function phraser_champs($texte,$ligne,$result) {
 // on recommence tant qu'il y a des [...] en substituant a l'appel suivant
 
 // http://doc.spip.org/@phraser_champs_etendus
-function phraser_champs_etendus($texte, $ligne,$result) {
+function phraser_champs_etendus($texte, $ligne, $result){
        if ($texte==="") return $result;
        $sep = '##';
-       while (strpos($texte,$sep)!== false)
+       while (strpos($texte, $sep)!==false)
                $sep .= '#';
+
        return array_merge($result, phraser_champs_interieurs($texte, $ligne, $sep, array()));
 }
 
@@ -211,60 +216,61 @@ function phraser_champs_etendus($texte, $ligne,$result) {
 // Tres chevelu
 
 // http://doc.spip.org/@phraser_args
-function phraser_args($texte, $fin, $sep, $result, &$pointeur_champ) {
-  $texte = ltrim($texte);
-  while (($texte!=="") && strpos($fin, $texte[0]) === false) {
-       $result = phraser_arg($texte, $sep, $result, $pointeur_champ);
+function phraser_args($texte, $fin, $sep, $result, &$pointeur_champ){
        $texte = ltrim($texte);
-  }
+       while (($texte!=="") && strpos($fin, $texte[0])===false){
+               $result = phraser_arg($texte, $sep, $result, $pointeur_champ);
+               $texte = ltrim($texte);
+       }
 # mettre ici la suite du texte, 
 # notamment pour que l'appelant vire le caractere fermant si besoin
-  $pointeur_champ->apres = $texte;
-  return $result;
+       $pointeur_champ->apres = $texte;
+
+       return $result;
 }
 
 // http://doc.spip.org/@phraser_arg
-function phraser_arg(&$texte, $sep, $result, &$pointeur_champ) {
+function phraser_arg(&$texte, $sep, $result, &$pointeur_champ){
        preg_match(",^(\|?[^}{)|]*)(.*)$,ms", $texte, $match);
        $suite = ltrim($match[2]);
        $fonc = trim($match[1]);
-       if ($fonc && $fonc[0] == "|") $fonc = ltrim(substr($fonc,1));
+       if ($fonc && $fonc[0]=="|") $fonc = ltrim(substr($fonc, 1));
        $res = array($fonc);
        $err_f = '';
        // cas du filtre sans argument ou du critere /
-       if (($suite && ($suite[0] != '{')) || ($fonc  && $fonc[0] == '/')) {
+       if (($suite && ($suite[0]!='{')) || ($fonc && $fonc[0]=='/')){
                // si pas d'argument, alors il faut une fonction ou un double |
-               if (!$match[1]) {
+               if (!$match[1]){
                        $err_f = array('zbug_erreur_filtre', array('filtre' => $texte));
                        erreur_squelette($err_f, $pointeur_champ);
                        $texte = '';
-               } else  $texte = $suite;
+               } else  $texte = $suite;
                if ($err_f) $pointeur_champ->param = false;
                elseif ($fonc!=='') $pointeur_champ->param[] = $res;
                // pour les balises avec faux filtres qui boudent ce dur larbeur
                $pointeur_champ->fonctions[] = array($fonc, '');
+
                return $result;
        }
-       $args = ltrim(substr($suite,1)); // virer le '(' initial
+       $args = ltrim(substr($suite, 1)); // virer le '(' initial
        $collecte = array();
-       while ($args && $args[0] != '}') {
-               if ($args[0] == '"')
-                       preg_match ('/^(")([^"]*)(")(.*)$/ms', $args, $regs);
-               else if ($args[0] == "'")
-                       preg_match ("/^(')([^']*)(')(.*)$/ms", $args, $regs);
+       while ($args && $args[0]!='}'){
+               if ($args[0]=='"')
+                       preg_match('/^(")([^"]*)(")(.*)$/ms', $args, $regs);
+               else if ($args[0]=="'")
+                       preg_match("/^(')([^']*)(')(.*)$/ms", $args, $regs);
                else {
-                 preg_match("/^([[:space:]]*)([^,([{}]*([(\[{][^])}]*[])}])?[^,}]*)([,}].*)$/ms", $args, $regs);
-                 if (!strlen($regs[2]))
-                   {
-                       $err_f = array('zbug_erreur_filtre', array('filtre' => $args));
-                       erreur_squelette($err_f, $pointeur_champ);
-                       $champ = new Texte;
-                       $champ->apres = $champ->avant = $args = "";
-                       break;
-                     }   
+                       preg_match("/^([[:space:]]*)([^,([{}]*([(\[{][^])}]*[])}])?[^,}]*)([,}].*)$/ms", $args, $regs);
+                       if (!strlen($regs[2])){
+                               $err_f = array('zbug_erreur_filtre', array('filtre' => $args));
+                               erreur_squelette($err_f, $pointeur_champ);
+                               $champ = new Texte;
+                               $champ->apres = $champ->avant = $args = "";
+                               break;
+                       }
                }
                $arg = $regs[2];
-               if (trim($regs[1])) {
+               if (trim($regs[1])){
                        $champ = new Texte;
                        $champ->texte = $arg;
                        $champ->apres = $champ->avant = $regs[1];
@@ -272,109 +278,118 @@ function phraser_arg(&$texte, $sep, $result, &$pointeur_champ) {
                        $collecte[] = $champ;
                        $args = ltrim($regs[count($regs)-1]);
                } else {
-                       if (!preg_match("/".NOM_DE_CHAMP ."([{|])/", $arg, $r)) {
+                       if (!preg_match("/" . NOM_DE_CHAMP . "([{|])/", $arg, $r)){
                                // 0 est un aveu d'impuissance. A completer
                                $arg = phraser_champs_exterieurs($arg, 0, $sep, $result);
 
                                $args = ltrim($regs[count($regs)-1]);
                                $collecte = array_merge($collecte, $arg);
                                $result = array_merge($result, $arg);
-                       }
-                       else {
-                               $n = strpos($args,$r[0]);
+                       } else {
+                               $n = strpos($args, $r[0]);
                                $pred = substr($args, 0, $n);
                                $par = ',}';
-                               if (preg_match('/^(.*)\($/', $pred, $m))
-                                       {$pred = $m[1]; $par =')';}
-                               if ($pred) {
+                               if (preg_match('/^(.*)\($/', $pred, $m)){
+                                       $pred = $m[1];
+                                       $par = ')';
+                               }
+                               if ($pred){
                                        $champ = new Texte;
                                        $champ->texte = $pred;
                                        $champ->apres = $champ->avant = "";
                                        $result[] = $champ;
                                        $collecte[] = $champ;
                                }
-                               $rec = substr($args, $n + strlen($r[0]) -1);
+                               $rec = substr($args, $n+strlen($r[0])-1);
                                $champ = new Champ;
                                $champ->nom_boucle = $r[2];
                                $champ->nom_champ = $r[3];
                                $champ->etoile = $r[5];
                                $next = $r[6];
-                               while ($next=='{') {
+                               while ($next=='{'){
                                        phraser_arg($rec, $sep, array(), $champ);
-                                       $args = ltrim($rec) ;
+                                       $args = ltrim($rec);
                                        $next = isset($args[0]) ? $args[0] : '';
                                }
-                               while ($next=='|') {
+                               while ($next=='|'){
                                        phraser_args($rec, $par, $sep, array(), $champ);
-                                       $args = $champ->apres ;
+                                       $args = $champ->apres;
                                        $champ->apres = '';
                                        $next = isset($args[0]) ? $args[0] : '';
                                }
                                // Si erreur de syntaxe dans un sous-argument, propager.
-                               if ($champ->param === false)
+                               if ($champ->param===false)
                                        $err_f = true;
                                else phraser_vieux($champ);
-                               if ($par==')') $args = substr($args,1);
+                               if ($par==')') $args = substr($args, 1);
                                $collecte[] = $champ;
                                $result[] = $champ;
                        }
                }
-               if (isset($args[0]) AND $args[0] == ',') {
-                       $args = ltrim(substr($args,1));
-                       if ($collecte) {$res[] = $collecte; $collecte = array();}
+               if (isset($args[0]) AND $args[0]==','){
+                       $args = ltrim(substr($args, 1));
+                       if ($collecte){
+                               $res[] = $collecte;
+                               $collecte = array();
+                       }
                }
        }
-       if ($collecte) {$res[] = $collecte; $collecte = array();}
-       $texte = substr($args,1);
-       $source = substr($suite, 0, strlen($suite) - strlen($texte));
+       if ($collecte){
+               $res[] = $collecte;
+               $collecte = array();
+       }
+       $texte = substr($args, 1);
+       $source = substr($suite, 0, strlen($suite)-strlen($texte));
        // propager les erreurs, et ignorer les param vides
-       if ($pointeur_champ->param !== false) {
+       if ($pointeur_champ->param!==false){
                if ($err_f)
                        $pointeur_champ->param = false;
-               elseif ($fonc!=='' || count($res) > 1)
+               elseif ($fonc!=='' || count($res)>1)
                        $pointeur_champ->param[] = $res;
        }
        // pour les balises avec faux filtres qui boudent ce dur larbeur
        $pointeur_champ->fonctions[] = array($fonc, $source);
+
        return $result;
 }
 
 
 // http://doc.spip.org/@phraser_champs_exterieurs
-function phraser_champs_exterieurs($texte, $ligne, $sep, $nested) {
+function phraser_champs_exterieurs($texte, $ligne, $sep, $nested){
        $res = array();
-       while (($p=strpos($texte, "%$sep"))!==false) {
-               if (!preg_match(',^%'.preg_quote($sep).'([0-9]+)@,', substr($texte,$p), $m))
+       while (($p = strpos($texte, "%$sep"))!==false){
+               if (!preg_match(',^%' . preg_quote($sep) . '([0-9]+)@,', substr($texte, $p), $m))
                        break;
-               $debut = substr($texte,0,$p);
+               $debut = substr($texte, 0, $p);
                $texte = substr($texte, $p+strlen($m[0]));
                if ($p)
                        $res = phraser_inclure($debut, $ligne, $res);
                $ligne += substr_count($debut, "\n");
-               $res[]= $nested[$m[1]];
+               $res[] = $nested[$m[1]];
        }
+
        return (($texte==='') ? $res : phraser_inclure($texte, $ligne, $res));
 }
 
 // http://doc.spip.org/@phraser_champs_interieurs
-function phraser_champs_interieurs($texte, $ligne, $sep, $result) {
+function phraser_champs_interieurs($texte, $ligne, $sep, $result){
        $i = 0; // en fait count($result)
        $x = "";
 
-       while (true) {
-               $j=$i;
+       while (true){
+               $j = $i;
                $n = $ligne;
-               while (preg_match(CHAMP_ETENDU, $texte, $match)) {
+               while (preg_match(CHAMP_ETENDU, $texte, $match)){
                        $p = strpos($texte, $match[0]);
                        $debut = substr($texte, 0, $p);
-                       if ($p) {
+                       if ($p){
                                $result[$i] = $debut;
                                $i++;
                        }
                        $nom = $match[4];
                        $champ = new Champ;
                        // ca ne marche pas encore en cas de champ imbrique
-                       $champ->ligne = $x ? 0 :($n+substr_count($debut, "\n"));
+                       $champ->ligne = $x ? 0 : ($n+substr_count($debut, "\n"));
                        $champ->nom_boucle = $match[3];
                        $champ->nom_champ = $nom;
                        $champ->etoile = $match[6];
@@ -382,25 +397,30 @@ function phraser_champs_interieurs($texte, $ligne, $sep, $result) {
                        $result = phraser_args($match[7], ")", $sep, $result, $champ);
                        phraser_vieux($champ);
                        $champ->avant =
-                               phraser_champs_exterieurs($match[1],$n,$sep,$result);
-                       $debut = substr($champ->apres,1);
-                       $n += substr_count(substr($texte, 0, strpos($texte, $debut)), "\n");
-                       $champ->apres = phraser_champs_exterieurs($debut,$n,$sep,$result);
+                               phraser_champs_exterieurs($match[1], $n, $sep, $result);
+                       $debut = substr($champ->apres, 1);
+                       if (!empty($debut)){
+                               $n += substr_count(substr($texte, 0, strpos($texte, $debut)), "\n");
+                       }
+                       $champ->apres = phraser_champs_exterieurs($debut, $n, $sep, $result);
 
                        $result[$i] = $champ;
                        $i++;
-                       $texte = substr($texte,$p+strlen($match[0]));
+                       $texte = substr($texte, $p+strlen($match[0]));
+               }
+               if ($texte!==""){
+                       $result[$i] = $texte;
+                       $i++;
                }
-               if ($texte!=="") {$result[$i] = $texte; $i++;}
-               $x ='';
+               $x = '';
 
-               while($j < $i) {
-                       $z= $result[$j]; 
+               while ($j<$i){
+                       $z = $result[$j];
                        // j'aurais besoin de connaitre le nombre de lignes...
                        if (is_object($z))
                                $x .= "%$sep$j@";
                        else
-                               $x.=$z;
+                               $x .= $z;
                        $j++;
                }
                if (preg_match(CHAMP_ETENDU, $x))
@@ -410,19 +430,18 @@ function phraser_champs_interieurs($texte, $ligne, $sep, $result) {
        }
 }
 
-function phraser_vieux(&$champ)
-{
+function phraser_vieux(&$champ){
        $nom = $champ->nom_champ;
-       if ($nom == 'EMBED_DOCUMENT') {
+       if ($nom=='EMBED_DOCUMENT'){
                if (!function_exists('phraser_vieux_emb'))
                        include_spip('public/normaliser');
                phraser_vieux_emb($champ);
-       } elseif ($nom == 'EXPOSER') {
+       } elseif ($nom=='EXPOSER') {
                if (!function_exists('phraser_vieux_exposer'))
                        include_spip('public/normaliser');
                phraser_vieux_exposer($champ);
        } elseif ($champ->param) {
-               if ($nom == 'FORMULAIRE_RECHERCHE') {
+               if ($nom=='FORMULAIRE_RECHERCHE'){
                        if (!function_exists('phraser_vieux_recherche'))
                                include_spip('public/normaliser');
                        phraser_vieux_recherche($champ);
@@ -430,11 +449,11 @@ function phraser_vieux(&$champ)
                        if (!function_exists('phraser_vieux_logos'))
                                include_spip('public/normaliser');
                        phraser_vieux_logos($champ);
-               } elseif ($nom == 'MODELE') {
+               } elseif ($nom=='MODELE') {
                        if (!function_exists('phraser_vieux_modele'))
                                include_spip('public/normaliser');
                        phraser_vieux_modele($champ);
-               } elseif ($nom == 'INCLURE' OR $nom == 'INCLUDE') {
+               } elseif ($nom=='INCLURE' OR $nom=='INCLUDE') {
                        if (!function_exists('phraser_vieux_inclu'))
                                include_spip('public/normaliser');
                        phraser_vieux_inclu($champ);
@@ -444,19 +463,19 @@ function phraser_vieux(&$champ)
 
 
 /**
- * Analyse les critères de boucle 
+ * Analyse les critères de boucle
  *
  * Chaque paramètre de la boucle (tel que {id_article>3}) est analysé
  * pour construire un critère (objet Critere) de boucle.
- * 
+ *
  * Un critère a une description plus fine que le paramètre original
  * car on en extrait certaines informations tel que la n'égation et l'opérateur
  * utilisé s'il y a.
- * 
+ *
  * La fonction en profite pour déclarer des modificateurs de boucles
  * en présence de certains critères (tout, plat) ou initialiser des
  * variables de compilation (doublons)...
- * 
+ *
  * @param array $params
  *     Tableau de description des paramètres passés Ã  la boucle.
  *     Chaque paramètre deviendra un critère
@@ -464,180 +483,177 @@ function phraser_vieux(&$champ)
  *     Description de la boucle
  *     Elle sera complété de la liste de ses critères
  * @return void
-**/
-function phraser_criteres($params, &$result) {
+ **/
+function phraser_criteres($params, &$result){
 
        $err_ci = ''; // indiquera s'il y a eu une erreur
        $args = array();
        $type = $result->type_requete;
        $doublons = array();
-       foreach($params as $v) {
+       foreach ($params as $v){
                $var = $v[1][0];
-               $param = ($var->type != 'texte') ? "" : $var->texte;
-               if ((count($v) > 2) && (!preg_match(",[^A-Za-z]IN[^A-Za-z],i",$param)))
-                 {
+               $param = ($var->type!='texte') ? "" : $var->texte;
+               if ((count($v)>2) && (!preg_match(",[^A-Za-z]IN[^A-Za-z],i", $param))){
 // plus d'un argument et pas le critere IN:
 // detecter comme on peut si c'est le critere implicite LIMIT debut, fin
 
-                       if ($var->type != 'texte'
-                       OR preg_match("/^(n|n-|(n-)?\d+)$/S", $param)) {
-                         $op = ',';
-                         $not = "";
+                       if ($var->type!='texte'
+                               OR preg_match("/^(n|n-|(n-)?\d+)$/S", $param)
+                       ){
+                               $op = ',';
+                               $not = "";
                        } else {
-                         // Le debut du premier argument est l'operateur
-                         preg_match("/^([!]?)([a-zA-Z][a-zA-Z0-9]*)[[:space:]]*(.*)$/ms", $param, $m);
-                         $op = $m[2];
-                         $not = $m[1];
-                         // virer le premier argument,
-                         // et mettre son reliquat eventuel
-                         // Recopier pour ne pas alterer le texte source
-                         // utile au debusqueur
-                         if ($m[3]) {
-                           // une maniere tres sale de supprimer les "' autour de {critere "xxx","yyy"}
-                           if (preg_match(',^(["\'])(.*)\1$,', $m[3])) {
-                               $c = null;
-                               eval ('$c = '.$m[3].';');
-                               if (isset($c))
-                                       $m[3] = $c;
-                           }
-                           $texte = new Texte;
-                           $texte->texte = $m[3]; 
-                           $v[1][0]= $texte;
-                         } else array_shift($v[1]);
+                               // Le debut du premier argument est l'operateur
+                               preg_match("/^([!]?)([a-zA-Z][a-zA-Z0-9_]*)[[:space:]]*(\??)[[:space:]]*(.*)$/ms", $param, $m);
+                               $op = $m[2];
+                               $not = $m[1];
+                               $cond = $m[3];
+                               // virer le premier argument,
+                               // et mettre son reliquat eventuel
+                               // Recopier pour ne pas alterer le texte source
+                               // utile au debusqueur
+                               if ($m[4]){
+                                       // une maniere tres sale de supprimer les "' autour de {critere "xxx","yyy"}
+                                       if (preg_match(',^(["\'])(.*)\1$,', $m[4])){
+                                               $c = null;
+                                               eval ('$c = ' . $m[4] . ';');
+                                               if (isset($c))
+                                                       $m[4] = $c;
+                                       }
+                                       $texte = new Texte;
+                                       $texte->texte = $m[4];
+                                       $v[1][0] = $texte;
+                               } else array_shift($v[1]);
                        }
                        array_shift($v); // $v[O] est vide
                        $crit = new Critere;
                        $crit->op = $op;
                        $crit->not = $not;
-                       $crit->exclus ="";
+                       $crit->cond = $cond;
+                       $crit->exclus = "";
                        $crit->param = $v;
                        $args[] = $crit;
-                 } else {
-                 if ($var->type != 'texte') {
-                   // cas 1 seul arg ne commencant pas par du texte brut: 
-                   // erreur ou critere infixe "/"
-                   if (($v[1][1]->type != 'texte') || (trim($v[1][1]->texte) !='/')) {
-                       $err_ci = array('zbug_critere_inconnu', 
-                                       array('critere' => $var->nom_champ));
-                       erreur_squelette($err_ci, $result);
-                   } else {
-                     $crit = new Critere;
-                     $crit->op = '/';
-                     $crit->not = "";
-                     $crit->exclus ="";
-                     $crit->param = array(array($v[1][0]),array($v[1][2]));
-                     $args[] = $crit;
-                   }
-                 } else {
-       // traiter qq lexemes particuliers pour faciliter la suite
-       // les separateurs
-                       if ($var->apres)
-                               $result->separateur[] = $param;
-                       elseif (($param == 'tout') OR ($param == 'tous'))
-                               $result->modificateur['tout'] = true;
-                       elseif ($param == 'plat') 
-                               $result->modificateur['plat'] = true;
-
-                       // Boucle hierarchie, analyser le critere id_rubrique
-                       // et les autres critères {id_x} pour forcer {tout} sur
-                       // ceux-ci pour avoir la rubrique mere...
-                       // Les autres critères de la boucle hierarchie doivent Ãªtre
-                       // traités normalement.
-                       elseif (strcasecmp($type, 'hierarchie')==0
-                               AND !preg_match(",^id_rubrique\b,",$param)
-                               AND preg_match(",^id_\w+\s*$,", $param))
-                       {
-                               $result->modificateur['tout'] = true;
-                       }
-                       elseif (strcasecmp($type, 'hierarchie')==0 AND $param=="id_rubrique") {
-                               // rien a faire sur {id_rubrique} tout seul
-                       }
-                       else {
-                         // pas d'emplacement statique, faut un dynamique
-                         /// mais il y a 2 cas qui ont les 2 !
-                         if (($param == 'unique') || (preg_match(',^!?doublons *,', $param)))
-                           {
-                             // cette variable sera inseree dans le code
-                             // et son nom sert d'indicateur des maintenant
-                             $result->doublons = '$doublons_index';
-                             if ($param == 'unique') $param = 'doublons';
-                           }
-                         elseif ($param == 'recherche')
-                           // meme chose (a cause de #nom_de_boucle:URL_*)
-                             $result->hash = ' ';
-                         if (preg_match(',^ *([0-9-]+) *(/) *(.+) *$,', $param, $m)) {
-                           $crit = phraser_critere_infixe($m[1], $m[3],$v, '/', '', '');
-                         } elseif (preg_match(',^([!]?)(' . CHAMP_SQL_PLUS_FONC . 
-                                        ')[[:space:]]*(\??)(!?)(<=?|>=?|==?|\b(?:IN|LIKE)\b)(.*)$,is', $param, $m)) {
-                           $a2 = trim($m[8]);
-                           if ($a2 AND ($a2[0]=="'" OR $a2[0]=='"') AND ($a2[0]==substr($a2,-1)))
-                             $a2 = substr($a2,1,-1);
-                           $crit = phraser_critere_infixe($m[2], $a2, $v,
-                                                          (($m[2] == 'lang_select') ? $m[2] : $m[7]),
-                                                          $m[6], $m[5]);
-                                       $crit->exclus = $m[1];
-                         } elseif (preg_match("/^([!]?)\s*(" .
-                                              CHAMP_SQL_PLUS_FONC .
-                                              ")\s*(\??)(.*)$/is", $param, $m)) {
-                 // contient aussi les comparaisons implicites !
-                           // Comme ci-dessus: 
-                           // le premier arg contient l'operateur
-                           array_shift($v);
-                           if ($m[6]) {
-                             $v[0][0] = new Texte;
-                             $v[0][0]->texte = $m[6];
-                           } else {
-                             array_shift($v[0]);
-                             if (!$v[0]) array_shift($v);
-                           }
-                           $crit = new Critere;
-                           $crit->op = $m[2];
-                           $crit->param = $v;
-                           $crit->not = $m[1];
-                           $crit->cond = $m[5];
-                         }
-                         else {
-                               $err_ci = array('zbug_critere_inconnu', 
-                                       array('critere' => $param));
-                               erreur_squelette($err_ci, $result);
-                         }
-                         if ((!preg_match(',^!?doublons *,', $param)) || $crit->not)
-                           $args[] = $crit;
-                         else 
-                           $doublons[] = $crit;
+               } else {
+                       if ($var->type!='texte'){
+                               // cas 1 seul arg ne commencant pas par du texte brut:
+                               // erreur ou critere infixe "/"
+                               if (($v[1][1]->type!='texte') || (trim($v[1][1]->texte)!='/')){
+                                       $err_ci = array('zbug_critere_inconnu',
+                                               array('critere' => $var->nom_champ));
+                                       erreur_squelette($err_ci, $result);
+                               } else {
+                                       $crit = new Critere;
+                                       $crit->op = '/';
+                                       $crit->not = "";
+                                       $crit->exclus = "";
+                                       $crit->param = array(array($v[1][0]), array($v[1][2]));
+                                       $args[] = $crit;
+                               }
+                       } else {
+                               // traiter qq lexemes particuliers pour faciliter la suite
+                               // les separateurs
+                               if ($var->apres)
+                                       $result->separateur[] = $param;
+                               elseif (($param=='tout') OR ($param=='tous'))
+                                       $result->modificateur['tout'] = true;
+                               elseif ($param=='plat')
+                                       $result->modificateur['plat'] = true;
+
+                               // Boucle hierarchie, analyser le critere id_rubrique
+                               // et les autres critères {id_x} pour forcer {tout} sur
+                               // ceux-ci pour avoir la rubrique mere...
+                               // Les autres critères de la boucle hierarchie doivent Ãªtre
+                               // traités normalement.
+                               elseif (strcasecmp($type, 'hierarchie')==0
+                                       AND !preg_match(",^id_rubrique\b,", $param)
+                                       AND preg_match(",^id_\w+\s*$,", $param)
+                               ) {
+                                       $result->modificateur['tout'] = true;
+                               } elseif (strcasecmp($type, 'hierarchie')==0 AND $param=="id_rubrique") {
+                                       // rien a faire sur {id_rubrique} tout seul
+                               } else {
+                                       // pas d'emplacement statique, faut un dynamique
+                                       /// mais il y a 2 cas qui ont les 2 !
+                                       if (($param=='unique') || (preg_match(',^!?doublons *,', $param))){
+                                               // cette variable sera inseree dans le code
+                                               // et son nom sert d'indicateur des maintenant
+                                               $result->doublons = '$doublons_index';
+                                               if ($param=='unique') $param = 'doublons';
+                                       } elseif ($param=='recherche')
+                                               // meme chose (a cause de #nom_de_boucle:URL_*)
+                                               $result->hash = ' ';
+                                       if (preg_match(',^ *([0-9-]+) *(/) *(.+) *$,', $param, $m)){
+                                               $crit = phraser_critere_infixe($m[1], $m[3], $v, '/', '', '');
+                                       } elseif (preg_match(',^([!]?)(' . CHAMP_SQL_PLUS_FONC .
+                                               ')[[:space:]]*(\??)(!?)(<=?|>=?|==?|\b(?:IN|LIKE)\b)(.*)$,is', $param, $m)) {
+                                               $a2 = trim($m[8]);
+                                               if ($a2 AND ($a2[0]=="'" OR $a2[0]=='"') AND ($a2[0]==substr($a2, -1)))
+                                                       $a2 = substr($a2, 1, -1);
+                                               $crit = phraser_critere_infixe($m[2], $a2, $v,
+                                                       (($m[2]=='lang_select') ? $m[2] : $m[7]),
+                                                       $m[6], $m[5]);
+                                               $crit->exclus = $m[1];
+                                       } elseif (preg_match("/^([!]?)\s*(" .
+                                               CHAMP_SQL_PLUS_FONC .
+                                               ")\s*(\??)(.*)$/is", $param, $m)) {
+                                               // contient aussi les comparaisons implicites !
+                                               // Comme ci-dessus:
+                                               // le premier arg contient l'operateur
+                                               array_shift($v);
+                                               if ($m[6]){
+                                                       $v[0][0] = new Texte;
+                                                       $v[0][0]->texte = $m[6];
+                                               } else {
+                                                       array_shift($v[0]);
+                                                       if (!$v[0]) array_shift($v);
+                                               }
+                                               $crit = new Critere;
+                                               $crit->op = $m[2];
+                                               $crit->param = $v;
+                                               $crit->not = $m[1];
+                                               $crit->cond = $m[5];
+                                       } else {
+                                               $err_ci = array('zbug_critere_inconnu',
+                                                       array('critere' => $param));
+                                               erreur_squelette($err_ci, $result);
+                                       }
+                                       if ((!preg_match(',^!?doublons *,', $param)) || $crit->not)
+                                               $args[] = $crit;
+                                       else
+                                               $doublons[] = $crit;
+                               }
                        }
-                 }
                }
        }
        // les doublons non nies doivent etre le dernier critere
        // pour que la variable $doublon_index ait la bonne valeur
        // cf critere_doublon
-       if ($doublons) $args= array_merge($args, $doublons);
+       if ($doublons) $args = array_merge($args, $doublons);
        // Si erreur, laisser la chaine dans ce champ pour le HTTP 503
        if (!$err_ci) $result->criteres = $args;
 }
 
 // http://doc.spip.org/@phraser_critere_infixe
-function phraser_critere_infixe($arg1, $arg2, $args, $op, $not, $cond)
-{
+function phraser_critere_infixe($arg1, $arg2, $args, $op, $not, $cond){
        $args[0] = new Texte;
        $args[0]->texte = $arg1;
        $args[0] = array($args[0]);
        $args[1][0] = new Texte;
-       $args[1][0]->texte  = $arg2;
+       $args[1][0]->texte = $arg2;
        $crit = new Critere;
        $crit->op = $op;
        $crit->not = $not;
        $crit->cond = $cond;
        $crit->param = $args;
+
        return $crit;
 }
 
-function public_phraser_html_dist($texte, $id_parent, &$boucles, $descr, $ligne=1) {
+function public_phraser_html_dist($texte, $id_parent, &$boucles, $descr, $ligne = 1){
 
        $all_res = array();
 
-       while (($pos_boucle = strpos($texte, BALISE_BOUCLE)) !== false) {
+       while (($pos_boucle = strpos($texte, BALISE_BOUCLE))!==false){
 
                $err_b = ''; // indiquera s'il y a eu une erreur
                $result = new Boucle;
@@ -645,80 +661,84 @@ function public_phraser_html_dist($texte, $id_parent, &$boucles, $descr, $ligne=
                $result->descr = $descr;
 # attention: reperer la premiere des 2 balises: pre_boucle ou boucle
 
-               if (!preg_match(",".BALISE_PRE_BOUCLE . '[0-9_],', $texte, $r)
+               if (!preg_match("," . BALISE_PRE_BOUCLE . '[0-9_],', $texte, $r)
                        OR ($n = strpos($texte, $r[0]))===false
-                       OR ($n > $pos_boucle) ) {
-                 $debut = substr($texte, 0, $pos_boucle);
-                 $milieu = substr($texte, $pos_boucle);
-                 $k = strpos($milieu, '(');
-                 $id_boucle = trim(substr($milieu,
-                                          strlen(BALISE_BOUCLE),
-                                          $k - strlen(BALISE_BOUCLE)));
-                 $milieu = substr($milieu, $k);
+                       OR ($n>$pos_boucle)
+               ){
+                       $debut = substr($texte, 0, $pos_boucle);
+                       $milieu = substr($texte, $pos_boucle);
+                       $k = strpos($milieu, '(');
+                       $id_boucle = trim(substr($milieu,
+                               strlen(BALISE_BOUCLE),
+                               $k-strlen(BALISE_BOUCLE)));
+                       $milieu = substr($milieu, $k);
 
                } else {
-                 $debut = substr($texte, 0, $n);
-                 $milieu = substr($texte, $n);
-                 $k = strpos($milieu, '>');
-                 $id_boucle = substr($milieu,
-                                      strlen(BALISE_PRE_BOUCLE),
-                                      $k - strlen(BALISE_PRE_BOUCLE));
-
-                 if (!preg_match(",".BALISE_BOUCLE . $id_boucle . "[[:space:]]*\(,", $milieu, $r)) {
-                       $err_b = array('zbug_erreur_boucle_syntaxe', array('id' => $id_boucle));
-                       erreur_squelette($err_b, $result);
-                 }
-                 $pos_boucle = $n;
-                 $n = strpos($milieu, $r[0]);
-                 $result->avant = substr($milieu, $k+1, $n-$k-1);
-                 $milieu = substr($milieu, $n+strlen($id_boucle)+strlen(BALISE_BOUCLE));
+                       $debut = substr($texte, 0, $n);
+                       $milieu = substr($texte, $n);
+                       $k = strpos($milieu, '>');
+                       $id_boucle = substr($milieu,
+                               strlen(BALISE_PRE_BOUCLE),
+                               $k-strlen(BALISE_PRE_BOUCLE));
+
+                       if (!preg_match("," . BALISE_BOUCLE . $id_boucle . "[[:space:]]*\(,", $milieu, $r)){
+                               $err_b = array('zbug_erreur_boucle_syntaxe', array('id' => $id_boucle));
+                               erreur_squelette($err_b, $result);
+                               $texte = substr($texte, $n+1);
+                               continue;
+                       } else {
+                               $pos_boucle = $n;
+                               $n = strpos($milieu, $r[0]);
+                               $result->avant = substr($milieu, $k+1, $n-$k-1);
+                               $milieu = substr($milieu, $n+strlen($id_boucle)+strlen(BALISE_BOUCLE));
+                       }
                }
                $result->id_boucle = $id_boucle;
 
                preg_match(SPEC_BOUCLE, $milieu, $match);
                $result->type_requete = $match[0];
-                $milieu = substr($milieu, strlen($match[0]));
+               $milieu = substr($milieu, strlen($match[0]));
                $type = $match[1];
                $jointures = trim($match[2]);
                $table_optionnelle = ($match[3]);
-               if ($jointures) {
+               if ($jointures){
                        // on affecte pas ici les jointures explicites, mais dans la compilation
                        // ou elles seront completees des jointures declarees
                        $result->jointures_explicites = $jointures;
                }
-               
+
                if ($table_optionnelle){
                        $result->table_optionnelle = $type;
                }
-               
+
                // 1ere passe sur les criteres, vu comme des arguments sans fct
                // Resultat mis dans result->param
-               phraser_args($milieu,"/>","",$all_res,$result);
+               phraser_args($milieu, "/>", "", $all_res, $result);
 
                // En 2e passe result->criteres contiendra un tableau
                // pour l'instant on met le source (chaine) :
                // si elle reste ici au final, c'est qu'elle contient une erreur
-               $result->criteres =  substr($milieu,0,@strpos($milieu,$result->apres));
+               $result->criteres = substr($milieu, 0, @strpos($milieu, $result->apres));
                $milieu = $result->apres;
                $result->apres = "";
 
                //
                // Recuperer la fin :
                //
-               if ($milieu[0] === '/') {
-                       $suite = substr($milieu,2);
+               if ($milieu[0]==='/'){
+                       $suite = substr($milieu, 2);
                        $milieu = '';
                } else {
-                       $milieu = substr($milieu,1);
+                       $milieu = substr($milieu, 1);
                        $s = BALISE_FIN_BOUCLE . $id_boucle . ">";
                        $p = strpos($milieu, $s);
-                       if ($p === false) {
+                       if ($p===false){
                                $err_b = array('zbug_erreur_boucle_fermant',
                                        array('id' => $id_boucle));
                                erreur_squelette($err_b, $result);
                        }
 
-                       $suite = substr($milieu, $p + strlen($s));
+                       $suite = substr($milieu, $p+strlen($s));
                        $milieu = substr($milieu, 0, $p);
                }
 
@@ -729,9 +749,9 @@ function public_phraser_html_dist($texte, $id_parent, &$boucles, $descr, $ligne=
                //
                $s = BALISE_POST_BOUCLE . $id_boucle . ">";
                $p = strpos($suite, $s);
-               if ($p !== false) {
+               if ($p!==false){
                        $result->apres = substr($suite, 0, $p);
-                       $suite = substr($suite, $p + strlen($s));
+                       $suite = substr($suite, $p+strlen($s));
                }
 
                //
@@ -739,18 +759,18 @@ function public_phraser_html_dist($texte, $id_parent, &$boucles, $descr, $ligne=
                //
                $s = BALISE_ALT_BOUCLE . $id_boucle . ">";
                $p = strpos($suite, $s);
-               if ($p !== false) {
+               if ($p!==false){
                        $result->altern = substr($suite, 0, $p);
-                       $suite = substr($suite, $p + strlen($s));
+                       $suite = substr($suite, $p+strlen($s));
                }
-               $result->ligne = $ligne + substr_count($debut, "\n");
+               $result->ligne = $ligne+substr_count($debut, "\n");
                $m = substr_count($milieu, "\n");
                $b = substr_count($result->avant, "\n");
                $a = substr_count($result->apres, "\n");
 
-               if ($p = strpos($type, ':')) {
-                       $result->sql_serveur = substr($type,0,$p);
-                       $type = substr($type,$p+1);
+               if ($p = strpos($type, ':')){
+                       $result->sql_serveur = substr($type, 0, $p);
+                       $type = substr($type, $p+1);
                }
                $soustype = strtolower($type);
 
@@ -763,7 +783,7 @@ function public_phraser_html_dist($texte, $id_parent, &$boucles, $descr, $ligne=
                        $err_b = true;
                else {
                        phraser_criteres($result->param, $result);
-                       if (strncasecmp($soustype, TYPE_RECURSIF, strlen(TYPE_RECURSIF)) == 0) {
+                       if (strncasecmp($soustype, TYPE_RECURSIF, strlen(TYPE_RECURSIF))==0){
                                $result->type_requete = TYPE_RECURSIF;
                                $args = $result->param;
                                array_unshift($args,
@@ -772,31 +792,34 @@ function public_phraser_html_dist($texte, $id_parent, &$boucles, $descr, $ligne=
                        }
                }
 
-               $result->avant = public_phraser_html_dist($result->avant, $id_parent,$boucles, $descr, $result->ligne);
-               $result->apres = public_phraser_html_dist($result->apres, $id_parent,$boucles, $descr, $result->ligne+$b+$m);
-               $result->altern = public_phraser_html_dist($result->altern,$id_parent,$boucles, $descr, $result->ligne+$a+$m+$b);
-               $result->milieu = public_phraser_html_dist($milieu, $id_boucle,$boucles, $descr, $result->ligne+$b);
+               $result->avant = public_phraser_html_dist($result->avant, $id_parent, $boucles, $descr, $result->ligne);
+               $result->apres = public_phraser_html_dist($result->apres, $id_parent, $boucles, $descr, $result->ligne+$b+$m);
+               $result->altern = public_phraser_html_dist($result->altern, $id_parent, $boucles, $descr, $result->ligne+$a+$m+$b);
+               $result->milieu = public_phraser_html_dist($milieu, $id_boucle, $boucles, $descr, $result->ligne+$b);
 
                // Prevenir le generateur de code que le squelette est faux
                if ($err_b) $result->type_requete = false;
 
                // Verifier qu'il n'y a pas double definition
                // apres analyse des sous-parties (pas avant).
-               
-               if (isset($boucles[$id_boucle])) {
+
+               if (isset($boucles[$id_boucle])){
                        $err_b_d = array('zbug_erreur_boucle_double',
-                                       array('id'=>$id_boucle));
+                               array('id' => $id_boucle));
                        erreur_squelette($err_b_d, $result);
-               // Prevenir le generateur de code que le squelette est faux
+                       // Prevenir le generateur de code que le squelette est faux
                        $boucles[$id_boucle]->type_requete = false;
                } else
                        $boucles[$id_boucle] = $result;
                $all_res = phraser_champs_etendus($debut, $ligne, $all_res);
                $all_res[] = &$boucles[$id_boucle];
-               $ligne += substr_count(substr($texte, 0, strpos($texte, $suite)), "\n");
+               if (!empty($suite)){
+                       $ligne += substr_count(substr($texte, 0, strpos($texte, $suite)), "\n");
+               }
                $texte = $suite;
        }
 
        return phraser_champs_etendus($texte, $ligne, $all_res);
 }
+
 ?>
index a5a87c1..4f7eb40 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 39467c7..e5b1b40 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 3f615b0..d0cbd39 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 02846e6..0790313 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 22d55a7..1527f36 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index cf0fc9e..3140ec3 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 9a450aa..89d66fa 100644 (file)
@@ -3,7 +3,7 @@
 /* *************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -112,28 +112,29 @@ $GLOBALS['spip_mysql_functions_1'] = array(
 'utf-8'=>array('charset'=>'utf8','collation'=>'utf8_general_ci'))
                );
 
-// http://doc.spip.org/@spip_mysql_set_charset
+
 /**
- * @param $charset
- * @param string $serveur
- * @param bool $requeter
- * @param bool $requeter
- * @return resource
+ * Définit un charset pour la connexion avec Mysql
+ * 
+ * @param string $charset Charset Ã  appliquer
+ * @param string $serveur Nom de la connexion
+ * @param bool $requeter  inutilisé
+ * @return resource       Ressource de résultats pour fetch()
  */
-function spip_mysql_set_charset($charset, $serveur='',$requeter=true,$requeter=true){
+function spip_mysql_set_charset($charset, $serveur='',$requeter=true){
        $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
        spip_log("changement de charset sql : "."SET NAMES "._q($charset), _LOG_DEBUG);
        return mysql_query($connexion['last'] = "SET NAMES "._q($charset));
 }
 
-// http://doc.spip.org/@spip_mysql_get_charset
-/**
 
- * @param array $charset
- * @param string $serveur
- * @param bool $requeter
- * @return array
- *
+/**
+ * Teste si le charset indiqué est disponible sur le serveur SQL
+ * 
+ * @param array|string $charset Nom du charset Ã  tester.
+ * @param string $serveur       Nom de la connexion
+ * @param bool $requeter        inutilisé
+ * @return array                Description du charset (son nom est dans 'charset')
  */
 function spip_mysql_get_charset($charset=array(), $serveur='',$requeter=true){
        $connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
@@ -184,10 +185,10 @@ function spip_mysql_query($query, $serveur='',$requeter=true) {
        if (defined('_DEBUG_SLOW_QUERIES') AND _DEBUG_SLOW_QUERIES){
                if(isset($GLOBALS['debug']['aucasou'])){
                        list(,$id,, $infos) = $GLOBALS['debug']['aucasou'];
-                       $debug .= " BOUCLE$id @ ".$infos[0] ." | ";
+                       $debug .= "BOUCLE$id @ ".$infos[0] ." | ";
                }
-               $debug .= " " . $_SERVER['REQUEST_URI'].' + '.$GLOBALS['ip'];
-               $debug = ' /*'.str_replace('*/','@/',$debug).' */';
+               $debug .= $_SERVER['REQUEST_URI'].' + '.$GLOBALS['ip'];
+               $debug = ' /* '. mysql_real_escape_string(str_replace('*/','@/',$debug)). ' */';
        }
 
        $r = $link ? mysql_query($query.$debug, $link) : mysql_query($query.$debug);
index 1d62a8f..9ce37df 100644 (file)
@@ -3,7 +3,7 @@
 /* *************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 855476a..9d384c3 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 6eded16..a701dff 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 5afe581..d6dee23 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index cc5196b..e194bc7 100644 (file)
@@ -3,7 +3,7 @@
 /* *************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 6e99a2d..36ebd37 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 1243ea2..8de98d1 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 6747a1b..184b172 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 36e2e84..f0b432e 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 7b9b0b9..459fb8d 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index be65f87..28998a5 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index ceb97b7..16b940d 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 7cfc836..d2a02d1 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 1eb3153..4eb6b46 100644 (file)
@@ -122,6 +122,9 @@ RewriteRule ^favicon[.]ico$      spip.php?page=favicon.ico [QSA,L]
 RewriteRule ^sitemap[.]xml$      spip.php?page=sitemap.xml [QSA,L]
 ##
 
+# Favicon pour itrucs
+# Si vous avez le plugin filtres_images et qu'une méthode de retouche a Ã©té configurée, vous pouvez décommenter la ligne ci-dessous.
+#RewriteRule ^apple-touch-icon(-(\d+x\d+))?(-precomposed)?[.]png$      spip.php?page=apple-touch-icon.png&size=$2 [QSA,L]
 
 # expirer les images (pour contourner gros bug MSIE sur le cache)
 # note : a decommenter si vous voulez tester
index 42f1073..7d7589b 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 311848a..d8b4b20 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 529d748..b74be95 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index ddea288..cbd9515 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 0129b68..92b40d5 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index c6e8ea6..1ad5c0a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index c47a961..3621d21 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 86b571c..0fd5423 100644 (file)
@@ -2,7 +2,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 606900a..f8af513 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 11b16dc..d3e3d73 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index afbc2ba..9e76cf5 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 1629667..3f1ed51 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 0d4b9a9..37a0ee7 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index db1624a..1e13290 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index ec07bd0..fc1f70f 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 29b8479..ff380a9 100644 (file)
  */
 
 /**
- * Defines ctype functions if required
- * @todo make them methods of csstidy class
- * @version 1.0
+ * Defines ctype functions if required.
+ *
+ * @TODO: Make these methods of CSSTidy.
+ * @since 1.0.0
  */
-if (!function_exists('ctype_space')) {
-       /* ctype_space  Check for whitespace character(s) */
-       function ctype_space($text) {
-               return!preg_match("/[^\s\r\n\t\f]/", $text);
+if (!function_exists('ctype_space')){
+       /* ctype_space Check for whitespace character(s) */
+       function ctype_space($text){
+               return (1===preg_match("/^[ \r\n\t\f]+$/", $text));
        }
-
 }
-if (!function_exists('ctype_alpha')) {
-       /* ctype_alpha  Check for alphabetic character(s) */
-       function ctype_alpha($text) {
-               return preg_match("/[a-zA-Z]/", $text);
+if (!function_exists('ctype_alpha')){
+       /* ctype_alpha Check for alphabetic character(s) */
+       function ctype_alpha($text){
+               return (1===preg_match('/^[a-zA-Z]+$/', $text));
+       }
+}
+if (!function_exists('ctype_xdigit')){
+       /* ctype_xdigit Check for HEX character(s) */
+       function ctype_xdigit($text){
+               return (1===preg_match('/^[a-fA-F0-9]+$/', $text));
        }
-
 }
 
 /**
@@ -89,7 +94,7 @@ require('class.csstidy_optimise.php');
  * An online version should be available here: http://cdburnerxp.se/cssparse/css_optimiser.php
  * @package csstidy
  * @author Florian Schmitz (floele at gmail dot com) 2005-2006
- * @version 1.5.2
+ * @version 1.5.5
  */
 class csstidy {
 
@@ -142,7 +147,7 @@ class csstidy {
         * @var string
         * @access private
         */
-       public $version = '1.5.2';
+       public $version = '1.5.5';
        /**
         * Stores the settings
         * @var array
@@ -297,6 +302,7 @@ class csstidy {
                 */
                $this->settings['optimise_shorthands'] = 1;
                $this->settings['remove_last_;'] = true;
+               $this->settings['space_before_important'] = false;
                /* rewrite all properties with low case, better for later gzip OK, safe*/
                $this->settings['case_properties'] = 1;
                /* sort properties in alpabetic order, better for later gzip
@@ -616,7 +622,7 @@ class csstidy {
                                                        $this->at .= $this->_unicode($string, $i);
                                                }
                                                // fix for complicated media, i.e @media screen and (-webkit-min-device-pixel-ratio:1.5)
-                                               elseif (in_array($string{$i}, array('(', ')', ':', '.'))) {
+                                               elseif (in_array($string{$i}, array('(', ')', ':', '.', '/'))) {
                                                        $this->at .= $string{$i};
                                                }
                                        } else {
@@ -694,8 +700,8 @@ class csstidy {
                                                        $this->sel_separate[] = strlen($this->selector);
                                                } elseif ($string{$i} === '\\') {
                                                        $this->selector .= $this->_unicode($string, $i);
-                                               } elseif ($string{$i} === '*' && @in_array($string{$i + 1}, array('.', '#', '[', ':'))) {
-                                                       // remove unnecessary universal selector, FS#147
+                                               } elseif ($string{$i} === '*' && @in_array($string{$i + 1}, array('.', '#', '[', ':')) && ($i==0 OR $string{$i - 1}!=='/')) {
+                                                       // remove unnecessary universal selector, FS#147, but not comment in selector
                                                } else {
                                                        $this->selector .= $string{$i};
                                                }
index d42341c..1ceb21f 100644 (file)
@@ -269,7 +269,8 @@ class csstidy_optimise {
         */
        public function compress_important(&$string) {
                if ($this->parser->is_important($string)) {
-                       $string = $this->parser->gvw_important($string) . '!important';
+                       $important = $this->parser->get_cfg('space_before_important') ? ' !important' : '!important';
+                       $string = $this->parser->gvw_important($string) . $important;
                }
                return $string;
        }
@@ -899,7 +900,7 @@ class csstidy_optimise {
                $new_font_value = '';
                $important = '';
                // Skip if not font-family and font-size set
-               if (isset($input_css['font-family']) && isset($input_css['font-size'])) {
+               if (isset($input_css['font-family']) && isset($input_css['font-size']) && $input_css['font-family'] != 'inherit') {
                        // fix several words in font-family - add quotes
                        if (isset($input_css['font-family'])) {
                                $families = explode(',', $input_css['font-family']);
index 48aa897..5f4c2cd 100644 (file)
@@ -256,9 +256,11 @@ class csstidy_print {
 
                                case AT_END:
                                        $out = & $output;
-                                       $out .= $template[10] . str_replace("\n", "\n" . $template[10], $in_at_out);
+                                       $in_at_out = str_replace("\n\n", "\r\n", $in_at_out); // don't fill empty lines
+                                       $in_at_out = str_replace("\n", "\n" . $template[10], $in_at_out);
+                                       $in_at_out = str_replace("\r\n", "\n\n", $in_at_out);
+                                       $out .= $template[10] . $in_at_out . $template[9];
                                        $in_at_out = '';
-                                       $out .= $template[9];
                                        break;
 
                                case COMMENT:
index 74318be..e9eaed6 100644 (file)
@@ -1,9 +1,9 @@
 <paquet
        prefix="compresseur"
        categorie="performance"
-       version="1.8.11"
+       version="1.8.13"
        etat="stable"
-       compatibilite="[3.0.0;3.1.*]"
+       compatibilite="[3.0.0;3.0.*]"
        logo="images/compresseur-32.png"
 >      
 
index a6ffd49..e36a811 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 84c8d16..1e01ce9 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 1706b69..4220446 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index cf90553..bbc1626 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index c2e2505..c5b330a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 20821bb..ef229c2 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index d16bf49..4cc1460 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 6e04049..17c1320 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 08c1b73..01c5f2f 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 7fdf3b1..f947531 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index d007b0d..773a884 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 8d6ae83..261bf40 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 6618334..193fb72 100644 (file)
@@ -2,7 +2,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index bfe43eb..5b79164 100644 (file)
@@ -2,7 +2,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index d3233a7..c2a5acf 100644 (file)
@@ -2,7 +2,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 019a4c7..e764bdf 100644 (file)
@@ -2,7 +2,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -398,6 +398,7 @@ function rtl_visuel($texte, $rtl_global) {
 // http://code.spip.net/@printWordWrapped
 function printWordWrapped($image, $top, $left, $maxWidth, $font, $couleur, $text, $textSize, $align="left", $hauteur_ligne = 0) {
        static $memps = array();
+       $fontps = false;
 
        // imageftbbox exige un float, et settype aime le double pour php < 4.2.0
        settype($textSize, 'double');
@@ -453,6 +454,7 @@ function printWordWrapped($image, $top, $left, $maxWidth, $font, $couleur, $text
 
 
        $line = '';
+       $lines = array();
        while (count($words) > 0) {
                
                $mot = $words[0];
@@ -475,6 +477,7 @@ function printWordWrapped($image, $top, $left, $maxWidth, $font, $couleur, $text
 
        // Deux passes pour recuperer, d'abord, largeur_ligne
        // necessaire pour alignement right et center
+       $largeur_max = 0;
        foreach ($lines as $line) {
                if ($rtl_global) $line = rtl_visuel($line, $rtl_global);
                
index 0c376e4..5ebbf9f 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index de55df7..5b0b581 100644 (file)
@@ -2,7 +2,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 9daae63..19a83d1 100644 (file)
@@ -2,7 +2,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 4b23ce7..27f43db 100644 (file)
@@ -1,7 +1,7 @@
 <paquet
        prefix="images"
        categorie="multimedia"
-       version="1.1.10"
+       version="1.1.11"
        etat="stable"
        compatibilite="[3.0.0;3.0.*]"
        logo="images/image_filtre-32.png"
index 983cb11..2377dd2 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index c643bf3..3cb32e5 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index f8a40a7..640ec82 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 41f1c28..da01906 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 4c2a05a..8249d28 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 2a5950e..79d13ed 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 72c52fe..b972171 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 6f4979b..6efa293 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 6d45950..0f57c22 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index c09ed46..fa3f3aa 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 0446ead..09c96d3 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 6b461d7..792d512 100644 (file)
@@ -26,7 +26,7 @@
        <input type='hidden' name='nom_site' value="#ENV{nom_site}" />
        [<input type="hidden" name="id_forum" value="(#ENV*{id_forum})" />]
        [(#INCLURE{fond=formulaires/inc-forum_ajouter_mot, ajouter_mot})]
-       (#ENV*{erreurs}|table_valeur{previsu})
+       (#ENV**{erreurs}|table_valeur{previsu})
        </div>
 </form>]
 
index 405073b..f1b7ee5 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\\r
  *  SPIP, Systeme de publication pour l'internet                           *\r
  *                                                                         *\r
- *  Copyright (c) 2001-2014                                                *\r
+ *  Copyright (c) 2001-2016                                                *\r
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *\r
  *                                                                         *\r
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *\r
index 8522428..56948f7 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 1f3886f..b8daf20 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index df1572e..8f48744 100644 (file)
 <br class="clear" />
 <script type="text/javascript">/*<![CDATA[*/
 if (window.jQuery){ jQuery(function(){
-       jQuery(window).unload(function() { alert('<:forum:forum_attention_message_non_poste|texte_script:>');jQuery(window).unbind();});
-       jQuery(window).on('beforeunload', function(){           jQuery(window).unbind();return '<:forum:forum_attention_message_non_poste|texte_script:>';      });
+       var confirm_quit = true;
+       jQuery(window).unload(function() { if (confirm_quit) alert('<:forum:forum_attention_message_non_poste|texte_script:>');jQuery(window).unbind();});
+       jQuery(window).on('beforeunload', function(e){ jQuery(window).unbind();if (!confirm_quit) return;e.returnValue='<:forum:forum_attention_message_non_poste|texte_script:>';return e.returnValue; });
+       jQuery('fieldset.previsu').closest('form').next('form').bind('submit',function(){
+               confirm_quit=false;
+       });
 });}
 /*]]>*/</script>
\ No newline at end of file
index 45b7401..6d0b634 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 5522d43..0463630 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index f1e3d58..72e1558 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 1e080f8..721f044 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 464915f..d5253aa 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -42,7 +42,7 @@ function inc_email_notification_forum_dist ($t, $email, $contexte=array()) {
                }
                else if ($t['statut'] == 'publie') # forum publie
                {
-                       $url = generer_url_entite($id_forum, 'forum');
+                       $url = generer_url_entite($id_forum, 'forum', '', 'forum'.$id_forum, true);
                }
                else #  forum modere, spam, poubelle direct ....
                {
index ddc90b4..e4698d5 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index a4e1e89..5875c7c 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index e9c24bc..796c750 100644 (file)
@@ -1,7 +1,7 @@
 <paquet
        prefix="forum"
        categorie="communication"
-       version="1.8.40"
+       version="1.8.43"
        etat="stable"
        compatibilite="[3.0.0;3.0.*]"
        logo="prive/themes/spip/images/forum-32.png"
index b133265..86059f5 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index de76da9..2c96740 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 09015c3..524fdc4 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 79b4bd3..4ef8397 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 81336c9..e210416 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index bf203d0..c42752f 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -94,6 +94,7 @@ function action_ajouter_un_document_dist($id_document, $file, $objet, $id_objet,
 
        include_spip('inc/modifier');
        if (isset($file['distant']) AND $file['distant'] AND !in_array($mode,array('choix','auto','image','document'))) {
+               spip_log("document distant $source accepte sans verification, mode=$mode","medias"._LOG_INFO_IMPORTANTE);
                include_spip('inc/distant');
                $file['tmp_name'] = _DIR_RACINE . copie_locale($source);
                $source = $file['tmp_name'];
@@ -104,6 +105,9 @@ function action_ajouter_un_document_dist($id_document, $file, $objet, $id_objet,
        // via une requete HEAD pour savoir si la ressource existe (non 404), si le
        // content-type est connu, et si possible recuperer la taille, voire plus.
        if (isset($file['distant']) AND $file['distant']) {
+               if (!tester_url_absolue($source)){
+                       return _T('medias:erreur_chemin_distant', array('nom' => $source));
+               }
                include_spip('inc/distant');
                if (is_array($a = renseigner_source_distante($source))) {
 
index 9ae5c87..8cbadfa 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index c09e02a..b1bf543 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -54,26 +54,34 @@ function action_copier_local_post($id_document) {
        $row = sql_fetsel("mode,fichier, descriptif, credits", "spip_documents", "id_document=$id_document");
        $source = $row['fichier'];
 
-       include_spip('inc/distant'); // pour 'copie_locale'
-       $fichier = copie_locale($source);
-       if ($fichier) {
-               $fichier = _DIR_RACINE . $fichier;
-               $files[] = array('tmp_name'=>$fichier,'name'=>basename($fichier));
-               $ajouter_documents = charger_fonction('ajouter_documents','action');
-               spip_log("convertit doc $id_document en local: $source => $fichier");
-               $liste = array();
-               $ajouter_documents($id_document,$files,'',0,$row['mode'],$liste);
-
-               spip_unlink($fichier);
-               
-               // ajouter l'origine du document aux credits
-               include_spip('action/editer_document');
-               document_modifier($id_document,array('credits'=>($row['credits']?$row['credits'].', ':'').$source));
-               return true;
-               
+       // si la source est bien un fichier distant
+       // sinon c'est une donnee moisie, on ne fait rien
+       if (tester_url_absolue($source)){
+       
+               include_spip('inc/distant'); // pour 'copie_locale'
+               $fichier = copie_locale($source);
+               if ($fichier) {
+                       $fichier = _DIR_RACINE . $fichier;
+                       $files[] = array('tmp_name'=>$fichier,'name'=>basename($fichier));
+                       $ajouter_documents = charger_fonction('ajouter_documents','action');
+                       spip_log("convertit doc $id_document en local: $source => $fichier");
+                       $liste = array();
+                       $ajouter_documents($id_document,$files,'',0,$row['mode'],$liste);
+       
+                       spip_unlink($fichier);
+                       
+                       // ajouter l'origine du document aux credits
+                       include_spip('action/editer_document');
+                       document_modifier($id_document,array('credits'=>($row['credits']?$row['credits'].', ':'').$source));
+                       return true;
+                       
+               } else {
+                       spip_log("echec copie locale $source");
+               }
        } else {
-               spip_log("echec copie locale $source");
+               spip_log("echec copie locale $source n'est pas une URL distante", "medias" . _LOG_ERREUR);
        }
+               
        return _T('medias:erreur_copie_fichier',array('nom'=>$source));
 }
 
index c1b1c9d..dff2a17 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index e16a562..bdde33e 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -126,6 +126,7 @@ function document_modifier($id_document, $set=false) {
        if ($champs['fichier'] // un plugin a pu interdire la modif du fichier en virant le champ
         AND $ancien_fichier // on avait bien note le nom du fichier avant la modif
         AND $ancien_fichier!==$champs['fichier'] // et il a ete modifie
+        AND !tester_url_absolue($ancien_fichier)
         AND @file_exists($f = get_spip_doc($ancien_fichier)))
                spip_unlink($f);
 
@@ -257,10 +258,15 @@ function medias_revision_document_parents($id_document, $parents=null, $ajout=fa
                        else $deja_parents[$lien['objet']][] = $lien['id_objet'];
        }
 
-       // verifier les droits d'associer
-       foreach($objets_parents as $objet=>$ids){
-               foreach($ids as $k=>$id){
-                       if (!autoriser('associerdocuments',$objet,$id)){
+       // trier les objets Ã  traiter : ne pas prendre en compte ceux qui sont déjà associés ou qu'on n'a pas le droit d'associer
+       foreach ($objets_parents as $objet => $ids) {
+               foreach ($ids as $k => $id) {
+                       if ((
+                                       isset($deja_parents[$objet])
+                                       and in_array($id, $deja_parents[$objet])
+                               )
+                               or !autoriser('associerdocuments', $objet, $id)
+                       ) {
                                unset($objets_parents[$objet][$k]);
                        }
                }
index 97326a7..bdaaa47 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 93d80b4..e7ab4fd 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\\r
  *  SPIP, Systeme de publication pour l'internet                           *\r
  *                                                                         *\r
- *  Copyright (c) 2001-2014                                                *\r
+ *  Copyright (c) 2001-2016                                                *\r
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *\r
  *                                                                         *\r
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *\r
index 48836a9..bd805ed 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index f5868e6..a87751f 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index a286486..aa0eea7 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 1c6c811..e11322a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index e446b58..06c1cbc 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\\r
  *  SPIP, Systeme de publication pour l'internet                           *\r
  *                                                                         *\r
- *  Copyright (c) 2001-2014                                                *\r
+ *  Copyright (c) 2001-2016                                                *\r
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *\r
  *                                                                         *\r
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *\r
index a310638..6086a93 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 492de79..bd94e0d 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 044fd44..a6f7ce3 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -154,6 +154,7 @@ function formulaires_editer_document_traiter_dist($id_document='new', $id_parent
                else {
                        // liberer le nom de l'ancien fichier pour permettre le remplacement par un fichier du meme nom
                        if ($ancien_fichier = sql_getfetsel('fichier','spip_documents','id_document='.intval($id_document))
+                               AND !tester_url_absolue($ancien_fichier)
                                AND @file_exists($rename = get_spip_doc($ancien_fichier))){
                                @rename($rename,"$rename--.old");
 
index a67af45..d34d98b 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 38dfbe8..8869e1c 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\\r
  *  SPIP, Systeme de publication pour l'internet                           *\r
  *                                                                         *\r
- *  Copyright (c) 2001-2014                                                *\r
+ *  Copyright (c) 2001-2016                                                *\r
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *\r
  *                                                                         *\r
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *\r
@@ -122,8 +122,11 @@ function formulaires_joindre_document_verifier_dist($id_document='new',$id_objet
                                        AND !_request('joindre_zip')\r
                                        AND $contenu_zip = joindre_verifier_zip($files)){\r
                                        list($fichiers,$erreurs,$tmp_zip) = $contenu_zip;\r
-                                       if ($fichiers)\r
-                                               $erreurs['lister_contenu_archive'] = recuperer_fond("formulaires/inc-lister_archive_jointe",array('chemin_zip'=>$tmp_zip,'liste_fichiers_zip'=>$fichiers,'erreurs_fichier_zip'=>$erreurs));\r
+                                       if ($fichiers){\r
+                                               // on passe le md5 du fichier uniquement, on le retrouvera dans zip_to_clean de la session\r
+                                               $token_zip = md5($tmp_zip);\r
+                                               $erreurs['lister_contenu_archive'] = recuperer_fond("formulaires/inc-lister_archive_jointe",array('chemin_zip'=>$token_zip,'liste_fichiers_zip'=>$fichiers,'erreurs_fichier_zip'=>$erreurs));\r
+                                       }\r
                                        else\r
                                                $erreurs['message_erreur'] = _T('medias:erreur_aucun_fichier'); \r
                                }\r
index 3703a10..270ce40 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index fbbbb15..382fe07 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 354f14c..7d7aaf4 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -44,7 +44,7 @@ function contenu_document($arg, $charset='')
        $r = spip_file_get_contents($f);
 
        if ($charset) {
-               include_spip('inc/charset');
+               include_spip('inc/charsets');
                if ($charset !== 'auto') {
                        $r = importer_charset($r, $charset);
                } elseif ($GLOBALS['meta']['charset'] == 'utf-8' AND !is_utf8($r))
index fa10723..b326cfb 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 431cd01..3cca88c 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\\r
  *  SPIP, Systeme de publication pour l'internet                           *\r
  *                                                                         *\r
- *  Copyright (c) 2001-2014                                                *\r
+ *  Copyright (c) 2001-2016                                                *\r
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *\r
  *                                                                         *\r
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *\r
@@ -114,7 +114,13 @@ function joindre_trouver_fichier_envoye(){
                  return $files;\r
                }\r
        }\r
-       elseif (_request('joindre_zip') AND $path = _request('chemin_zip')){\r
+       elseif (_request('joindre_zip') and $token_zip = _request('chemin_zip')) {\r
+\r
+               $zip_to_clean = (isset($GLOBALS['visiteur_session']['zip_to_clean']) ? unserialize($GLOBALS['visiteur_session']['zip_to_clean']) : array());\r
+               if (!$zip_to_clean or !isset($zip_to_clean[$token_zip]) or !$path = $zip_to_clean[$token_zip]){\r
+                       return _T('avis_operation_impossible');\r
+               }\r
+\r
                include_spip('inc/documents'); //pour creer_repertoire_documents\r
                define('_tmp_zip', $path);\r
                define('_tmp_dir', creer_repertoire_documents(md5($path.$GLOBALS['visiteur_session']['id_auteur'])));\r
@@ -214,10 +220,14 @@ function joindre_verifier_zip($files){
                // Est-ce qu'on sait le lire ?\r
                include_spip('inc/pclzip');\r
                if ($zip\r
-                AND $archive = new PclZip($zip)\r
-                AND $contenu = joindre_decrire_contenu_zip($archive)\r
-                AND rename($zip, $tmp = _DIR_TMP.basename($zip))\r
-                ){\r
+                       AND $archive = new PclZip($zip)\r
+                 AND $contenu = joindre_decrire_contenu_zip($archive)\r
+                       AND $tmp = sous_repertoire(_DIR_TMP,"zip")\r
+                 AND rename($zip, $tmp = $tmp.basename($zip))\r
+                 ){\r
+                       $zip_to_clean = (isset($GLOBALS['visiteur_session']['zip_to_clean'])?unserialize($GLOBALS['visiteur_session']['zip_to_clean']):array());\r
+                       $zip_to_clean[md5($tmp)] = $tmp;\r
+                       session_set('zip_to_clean',serialize($zip_to_clean));\r
                        $contenu[] = $tmp;\r
                        return $contenu;\r
                 }\r
index 15952dd..3519880 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\\r
  *  SPIP, Systeme de publication pour l'internet                           *\r
  *                                                                         *\r
- *  Copyright (c) 2001-2014                                                *\r
+ *  Copyright (c) 2001-2016                                                *\r
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *\r
  *                                                                         *\r
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *\r
index 862d964..427abac 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 3fbd607..543eefb 100644 (file)
@@ -2,7 +2,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 9ef1e93..94d3373 100644 (file)
@@ -2,7 +2,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index bed8089..11f6d9e 100644 (file)
@@ -2,7 +2,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 9117bec..734cbc5 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 931dd02..c88ead7 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index bdd6b26..586dbc3 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
 
 if (!defined('_ECRIRE_INC_VERSION')) return;
 
+// nettoyer les zip abandonnes par l'utilisateur
+if (isset($GLOBALS['visiteur_session']['zip_to_clean'])
+  AND test_espace_prive()
+  AND $_SERVER['REQUEST_METHOD']!=='POST'){
+       $zip_to_clean = unserialize($GLOBALS['visiteur_session']['zip_to_clean']);
+       if ($zip_to_clean){
+               foreach ($zip_to_clean as $zip){
+                       if (@file_exists($zip))
+                               @unlink($zip);
+               }
+       }
+       session_set('zip_to_clean');
+}
 
 /**
  * Afficher la puce de statut pour les documents
index 0d4e6a8..829e7ed 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 3d69e3d..76ff3c9 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 92815e2..3b3ddce 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 92ad33d..517e828 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 983f0d3..728ea76 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 22d6765..9a6aa5a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 5f1523f..1a2846e 100644 (file)
@@ -1,7 +1,7 @@
 <paquet
        prefix="medias"
        categorie="multimedia"
-       version="2.7.66"
+       version="2.7.70"
        etat="stable"
        compatibilite="[3.0.0;3.0.*]"
        logo="prive/themes/spip/images/portfolio-32.png"
index ffa17b8..d38c374 100644 (file)
        <BOUCLE_liste_doc(DOCUMENTS){id_document?}{id_article?}{id_rubrique?}{id_mot?}{id_auteur?}{where?}{statut?}{recherche?}{tri #ENV{par,date},#GET{defaut_tri}}{par titre}{pagination #ENV{nb,10}}{!lang_select}>
                <tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
                        <td class='statut'>[(#STATUT|puce_statut{document,#ID_DOCUMENT,#ID_RUBRIQUE})]</td>
-                       <td class='titre principale'>[(#LOGO_ARTICLE|image_reduire{20,26})]<a href="[(#ID_DOCUMENT|generer_url_entite{document})]"
-                                                                                                                                                                       title="<:info_numero_abbreviation|attribut_html:> #ID_DOCUMENT">[(#RANG). ][(#TITRE|sinon{[(#FICHIER|basename)]})]</a></td>
+                       <td class='titre principale'>[(#LOGO_DOCUMENT|image_reduire{20,26})]
+                               <a href="[(#ID_DOCUMENT|generer_url_entite{document})]" title="<:info_numero_abbreviation|attribut_html:> #ID_DOCUMENT">
+                                       [(#RANG). ][(#TITRE|sinon{[(#FICHIER|basename)]})]
+                               </a>
+                       </td>
                        <td class='auteur'><BOUCLE_auteurs(AUTEURS){id_document}{', '}><a href="[(#ID_AUTEUR|generer_url_entite{auteur})]">#NOM</a></BOUCLE_auteurs></td>
                        <td class='date secondaire'>[(#DATE|affdate_jourcourt)]</td>
                        <td class='id'>[(#AUTORISER{modifier,document,#ID_DOCUMENT}|?{
index 5d710ae..528938d 100644 (file)
@@ -29,4 +29,5 @@ jQuery(function(){
                onAjaxLoad(reload_chemin);
 });
 </script>
-#PIPELINE{afficher_contenu_objet,#ARRAY{args,#ARRAY{type,document,id_objet,#ID_DOCUMENT},data,''}}
\ No newline at end of file
+<!--affiche_milieu-->
+#PIPELINE{afficher_contenu_objet,#ARRAY{args,#ARRAY{type,document,id_objet,#ID_DOCUMENT},data,''}}
index 2231bf1..ba8e49a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 886e86c..9e7c29a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 7bf3eb6..ca29e05 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 18e794f..0953cda 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 994af1d..ecab931 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index ebe0bd3..95c03b6 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index a16bb16..175648a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index e02fb95..b4036d6 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 2c922ab..5cb3a97 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 72bbd4b..bd38c00 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 9074526..0f20db5 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index e1d2e2c..57a622e 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index cfe52c2..bc0ea83 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -68,13 +68,17 @@ function formulaires_editer_mot_verifier_dist($id_mot='new', $id_groupe=0, $reto
        // verifier qu'un mot du meme groupe n'existe pas avec le meme titre
        // la comparaison accepte un numero absent ou different
        // sinon avertir
-       if (!count($erreurs) AND !_request('confirm_titre_mot')){
-               if (sql_countsel("spip_mots", 
-                                               "titre REGEXP ".sql_quote("^([0-9]+[.] )?".preg_quote(supprimer_numero(_request('titre')))."$")
-                                               ." AND id_mot<>".intval($id_mot)))
-                       $erreurs['titre'] =
-                                               _T('mots:avis_doublon_mot_cle')
-                                               ." <input type='hidden' name='confirm_titre_mot' value='1' />";
+       // on ne fait la verification que si c'est une creation de mot ou un retitrage
+       if (!intval($id_mot)
+         OR supprimer_numero(_request('titre'))!==supprimer_numero(sql_getfetsel('titre','spip_mots','id_mot='.intval($id_mot)))){
+               if (!count($erreurs) AND !_request('confirm_titre_mot')){
+                       if (sql_countsel("spip_mots",
+                                                       "titre REGEXP ".sql_quote("^([0-9]+[.] )?".preg_quote(supprimer_numero(_request('titre')))."$")
+                                                       ." AND id_mot<>".intval($id_mot)))
+                               $erreurs['titre'] =
+                                                       _T('mots:avis_doublon_mot_cle')
+                                                       ." <input type='hidden' name='confirm_titre_mot' value='1' />";
+               }
        }
        return $erreurs;
 }
index 56c359a..06028cc 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index a54537d..be8e11d 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 637eeae..9a5eca4 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index ee6949e..a0d1359 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index cc9cfef..3e651cc 100644 (file)
@@ -1,7 +1,7 @@
 <paquet
        prefix="mots"
        categorie="edition"
-       version="2.4.13"
+       version="2.4.16"
        etat="stable"
        compatibilite="[3.0.0;3.0.*]"
        logo="prive/themes/spip/images/mot-32.png"
index 5e47ba8..42b29de 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 5e47ba8..42b29de 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 8ea3830..a862788 100644 (file)
@@ -20,7 +20,7 @@
        [ | (#TOTAL_BOUCLE|>{200}|oui) [(#SELF|parametre_url{nb,1000}|lien_ou_expose{1000,#ENV{nb}|=={1000},ajax})]]
 </p>
 ]<//B_cpt_mot>
-<INCLURE{fond=prive/objets/liste/mots-admin,id_groupe,par=titre,ajax,env} />
+<INCLURE{fond=prive/objets/liste/mots-admin,id_groupe,par=multi titre,ajax,env} />
 [(#AUTORISER{creer,mot,'','',#ARRAY{id_groupe,#ID_GROUPE}})
        [(#URL_ECRIRE{mot_edit,new=oui&id_groupe=#ID_GROUPE}|parametre_url{redirect,#SELF}
                |icone_verticale{<:mots:icone_creation_mots_cles:>,mot-24.png,new,right})]
index 4a42642..c711e9c 100644 (file)
@@ -1,15 +1,15 @@
-[(#ID_MOT|oui)
+[(#ID_MOT|intval|oui)
        [(#AUTORISER{modifier,mot,#ID_MOT}|sinon_interdire_acces)]]
-[(#ID_MOT|non)
+[(#ID_MOT|intval|non)
        [(#AUTORISER{creer,mot,#ID_MOT,'','',#ARRAY{associer_objet,#ENV{associer_objet}}}|sinon_interdire_acces)]]
 
 #SET{retour,#ENV{redirect}|sinon{#ENV{id_mot}|?{#URL_ECRIRE{mot,id_mot=#ID_MOT},#URL_ECRIRE{mots}}}}
 <div class='cadre-formulaire-editer'>
 <div class="entete-formulaire">
-       [(#ID_MOT|oui)
+       [(#ID_MOT|intval|oui)
        [(#GET{retour}|icone_verticale{<:icone_retour:>,mot,'',left retour[(#ENV{retourajax,''}|oui)ajax preload]})]
        ]
-       [[(#ID_MOT|?{<:mots:info_modifier_mot:>,<:titre_ajouter_un_mot:>})]
+       [[(#ID_MOT|intval|?{<:mots:info_modifier_mot:>,<:titre_ajouter_un_mot:>})]
        <h1>(#ENV{titre,#INFO_TITRE{mot,#ID_MOT}|sinon{<:mots:texte_nouveau_mot:>}})</h1>]
 </div>
 
index ab9f852..bc681ee 100644 (file)
@@ -9,10 +9,12 @@
                                [(#URL_ECRIRE{groupe_mots_edit,id_groupe=#ID_GROUPE}|icone_verticale{<:mots:icone_modif_groupe_mots:>,groupe_mots-24.png,edit,right})]
                        ]
                        <div id="wysiwyg">
-                       <INCLURE{fond=prive/objets/contenu/groupe_mots,id=#ID_GROUPE} />
+                       [(#PIPELINE{afficher_contenu_objet,#ARRAY{
+                               args,#ARRAY{type,groupe_mots,id,#ID_GROUPE,id_objet,#ID_GROUPE},
+                               data,#INCLURE{fond=prive/objets/contenu/groupe_mots, id=#ID_GROUPE, id_groupe=#ID_GROUPE}}})]
                        </div>
                        <div class="nettoyeur"></div>
-                       <INCLURE{fond=prive/objets/liste/mots-admin,id_groupe,par=titre,ajax,env} />
+                       <INCLURE{fond=prive/objets/liste/mots-admin,id_groupe,par=multi titre,ajax,env} />
                        [(#AUTORISER{voir,groupemots,#ID_GROUPE})
                                [(#URL_ECRIRE{groupe_mots,id_groupe=#ID_GROUPE}
                                        |icone_verticale{<:mots:icone_voir_groupe_mots:>,groupe_mots-24.png,'',left})]
@@ -23,4 +25,4 @@
                        ]
                #BOITE_FERMER
        </div>
-]</BOUCLE_groupes>
\ No newline at end of file
+]</BOUCLE_groupes>
index d7ae686..6e5d52b 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 186ea7b..ce6ca09 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 2641f69..2798e33 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index b1cbfb8..8c4da61 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 857ca80..5fe1f91 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 4e1921f..144140b 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 98f93ad..b11d1e2 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 6f6f6e4..53e01c2 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index a2e9e9b..2464bc6 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 6c4313b..a192915 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 8823fd4..a3daa36 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 640f424..761ea6c 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 4c7bf89..ef1a3ca 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 03fd71c..a19d610 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index d61305e..dac0225 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 34ad4ee..50a1719 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 15eaeb6..0006deb 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index d44b438..0c07ed1 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 3185e38..afd97eb 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 02ceeb4..15d08e4 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 4e9f679..8036d5a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 81071bb..8822134 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 33eef76..996a0e3 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 96a3f61..ee57b05 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 59623b8..d9acb40 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index f38b8f6..20130b3 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index f753d5e..88f3654 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index b54d674..a7a3d25 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 014a6cb..e88bf51 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 0672680..6d94929 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index c0aacf1..94ba6b5 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index b18b37e..75e60b9 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index bc987a2..28c6540 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 5b29833..9fddcb8 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 7af4d05..8354489 100644 (file)
@@ -22,7 +22,7 @@
 .markItUp  {
        margin:5px 0 5px 0;
        clear:both;
-    position: relative;
+       position: relative;
 }
 .markItUp .markItUpContainer  {
        margin:0; padding:0;
@@ -86,7 +86,8 @@
        padding:1em;
        /* decaler de la hauteur de .markItUpTabs */
        position:relative;
-       top:2.2em; 
+       top:2.2em;
+       text-align:initial;
 }
 
 /* correction des styles spip_formulaires appliques par defaut (grr) */
index e8ef8c1..5e57baa 100644 (file)
                                        mark = $(this).parent().parent();\r
                                        objet = mark.parents('.formulaire_spip')[0].className.match(/formulaire_editer_(\w+)/);\r
                                        champ = mark.parents('li')[0].className.match(/editer_(\w+)/);\r
+                                       dir = mark.find('textarea').attr('dir');\r
                                        $(mark).find('.markItUpPreview').height(\r
                                                  $(mark).find('.markItUpHeader').height()\r
                                                + $(mark).find('.markItUpEditor').height()\r
                                                + $(mark).find('.markItUpFooter').height()\r
                                        );\r
 \r
-                                       $(mark).find('.markItUpHeader').hide();\r
-                                       $(mark).find('.markItUpEditor').hide();\r
-                                       $(mark).find('.markItUpFooter').hide();\r
+                                       $(mark).find('.markItUpHeader,.markItUpEditor,.markItUpFooter').hide();\r
                                        $(this).addClass('on').next().removeClass('on');\r
                                        $(mark).find('.markItUpPreview').show()\r
                                                .addClass('ajaxLoad')\r
@@ -50,7 +49,9 @@
                                                        (objet ? objet[1] : ''))\r
                                                )\r
                                                .removeClass('ajaxLoad');\r
-                                       \r
+                                       if(dir)\r
+                                               $(mark).find('.markItUpPreview').attr('dir',dir);\r
+\r
                                        //ouvre un nouvel onglet lorsqu'on clique sur un lien dans la prévisualisation\r
                                        $(".markItUpPreview a").attr("target","blank");\r
 \r
                                $('.previsuEditer').click(function(){\r
                                        mark = $(this).parent().parent();\r
                                        $(mark).find('.markItUpPreview').hide();\r
-                                       $(mark).find('.markItUpHeader').show();\r
-                                       $(mark).find('.markItUpEditor').show();\r
-                                       $(mark).find('.markItUpFooter').show();\r
+                                       $(mark).find('.markItUpHeader,.markItUpEditor,.markItUpFooter').show();\r
                                        $(this).addClass('on').prev().removeClass('on');\r
                                        return false;\r
                                });\r
                        }\r
 \r
-\r
                        function renderPreview(val, champ, objet) {\r
                                var phtml;\r
                                if (options.previewParserPath !== '') {\r
index 77b84cc..67eb828 100644 (file)
@@ -1,7 +1,7 @@
 <paquet
        prefix="porte_plume"
        categorie="edition"
-       version="1.12.4"
+       version="1.12.5"
        etat="stable"
        compatibilite="[3.0.0;3.0.*]"
        logo="images/porte-plume-32.png"
index 91a0522..5dea30b 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 6c0ba13..6eb47ef 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index ea20048..676d5a9 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 8336201..5d3854e 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index b449dcc..421aaaf 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index ccc5eb1..205b3a2 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index f22e703..9d75618 100644 (file)
@@ -2,7 +2,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 941d1d9..c669120 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index c4205e0..b3612a1 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -605,6 +605,9 @@ function propre_diff($texte) {
        $reg = end($regs);
        if (!$reg[1] AND $reg[2]) $texte.="</$reg[2]>";
 
+       // et interdire_scripts !
+       $texte = interdire_scripts($texte);
+
        return $texte;
 }
 
@@ -708,7 +711,7 @@ function verifier_premiere_revision($table,$objet,$id_objet,$champs=null, $id_au
 
                        $date_modif = "";
                        foreach(array('date_modif','maj') as $d){
-                               if (!$date_modif AND isset($originaux[$d]) AND $t=strtotime($d))
+                               if (!$date_modif AND isset($originaux[$d]) AND $t=strtotime($originaux[$d]))
                                        $date_modif = date("Y-m-d H:i:s", $t);
                        }
                        if (!$date_modif
index 22cf2b7..91ef056 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index b2fd1ac..7e94e7b 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 5fe0d59..3186367 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 4e3542c..8ea0499 100644 (file)
@@ -1,7 +1,7 @@
 <paquet
        prefix="revisions"
        categorie="edition"
-       version="1.7.9"
+       version="1.7.12"
        etat="stable"
        compatibilite="[3.0.0;3.0.*]"
        logo="prive/themes/spip/images/revision-32.png"
index c612950..d382ebe 100644 (file)
@@ -25,7 +25,7 @@
                        <tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
                                <td class='statut'>[(#INFO_STATUT{#OBJET,#ID_OBJET}|puce_statut{#OBJET})]</td>
                                <td class="type">[(#OBJET|objet_icone{16})]</td>
-                               <td class='diff'>#SET{diff,#ID_OBJET|revisions_diff{#OBJET,#ID_VERSION}}
+                               <td class='diff'>[(#REM) desactive/ perf issue #SET{diff,#ID_OBJET|revisions_diff{#OBJET,#ID_VERSION}} ]
                                [<a href="#" onclick="$(this).parent().next().find('.diff').toggle('fast');return false;" title="<:revisions:voir_differences|attribut_html:>">[(#CHEMIN_IMAGE{diff-16.png}|balise_img{<:revisions:voir_differences:>})]</a>
                                (#GET{diff}|oui)]
                                </td>
index a1751a8..13a005c 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 935e6bf..a59a716 100644 (file)
@@ -40,9 +40,9 @@
                ]
        ]
        [<div class='id_rubrique'>(#GET{textes}|table_valeur{id_rubrique})</div>]
-       [<h4 class='surtitre'>(#GET{textes}|table_valeur{surtitre})</h4>]
-       <h1>[(#INFO_STATUT{#OBJET,#ID_OBJET}|puce_statut{#OBJET}) ][(#GET{textes}|table_valeur{titre}|sinon{<:info_sans_titre:>})]</h1>
-       [<h2 class='soustitre'>(#GET{textes}|table_valeur{soustitre})</h2>]
+       [<h4 class='surtitre'>(#GET{textes}|table_valeur{surtitre}|interdire_scripts)</h4>]
+       <h1>[(#INFO_STATUT{#OBJET,#ID_OBJET}|puce_statut{#OBJET}) ][(#GET{textes}|table_valeur{titre}|sinon{<:info_sans_titre:>}|interdire_scripts)]</h1>
+       [<h2 class='soustitre'>(#GET{textes}|table_valeur{soustitre}|interdire_scripts)</h2>]
 
        <div class="nettoyeur"></div>
        <div id="wysiwyg" class="revision">
index a740db6..454ede5 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index c75575c..c2c71f9 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 8098114..3679770 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 6d8c635..c4418b2 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 2fd5464..8e6788f 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 364b54e..47fe722 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 66c23e6..417a4a9 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index fcaca81..6f906fd 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 71f9cf8..8aedc3a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index fe007de..29dfef8 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index d5bceb7..44fe874 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index baf63b2..2ee3e4a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index fce3588..0f995d8 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 38ff0ba..d07005e 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index be54831..302df4c 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 8c4d3c3..9d7d685 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 19f0574..df3d924 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 17f7789..ed8b5f1 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -37,6 +37,7 @@ function executer_une_syndication() {
        // On va tenter un site 'sus' ou 'off' de plus de 24h, et le passer en 'off'
        // s'il echoue
        $where = sql_in("syndication", array('sus','off')) . "
+       AND statut<>'refuse'
        AND NOT(" . sql_date_proche('date_syndic', (0 - _PERIODE_SYNDICATION_SUSPENDUE) , "MINUTE") . ')';
        $id_syndic = sql_getfetsel("id_syndic", "spip_syndic", $where, '', "date_syndic", "1");
        if ($id_syndic) {
@@ -46,6 +47,7 @@ function executer_une_syndication() {
 
        // Et un site 'oui' de plus de 2 heures, qui passe en 'sus' s'il echoue
        $where = "syndication='oui'
+       AND statut<>'refuse'
        AND NOT(" . sql_date_proche('date_syndic', (0 - _PERIODE_SYNDICATION) , "MINUTE") . ')';
        $id_syndic = sql_getfetsel("id_syndic", "spip_syndic", $where, '', "date_syndic", "1");
 
@@ -266,8 +268,9 @@ function inserer_article_syndique ($data, $now_id_syndic, $statut, $url_site, $u
        // Mettre a jour la date si lastbuilddate
        if ($data['lastbuilddate'])
                $vals['date']= date("Y-m-d H:i:s", $data['lastbuilddate']);
-                                   
-       sql_updateq('spip_syndic_articles', $vals, "id_syndic_article=$id_syndic_article");
+
+       include_spip('inc/modifier');
+       objet_modifier_champs('syndic_article',$id_syndic_article,array('data'=>$vals,'action'=>'syndiquer'),$vals);
 
        // Point d'entree post_syndication
        pipeline('post_syndication',
index 66775d3..2593d36 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -88,8 +88,15 @@ function analyser_site($url) {
                        $head = filtrer_entites($regs[1]);
                } else
                        $head = $texte;
-               if (preg_match(',<title[^>]*>(.*),i', $head, $regs))
-                       $result['nom_site'] = filtrer_entites(supprimer_tags(preg_replace(',</title>.*,i', '', $regs[1])));
+
+               if (preg_match(',<title[^>]*>(.*),ims', $head, $regs)){
+                       $titre = trim($regs[1]);
+                       if (!strlen($titre)){
+                               $titre = substr($head,strpos($head,$regs[0]));
+                       }
+                       $result['nom_site'] = filtrer_entites(supprimer_tags(preg_replace(',</title>.*$,ims', '', $titre)));
+               }
+
                if ($a = array_merge(
                        extraire_balises($head, 'meta'),
                        extraire_balises($head, 'http-equiv')
index 8b0ac69..e84886f 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -73,8 +73,13 @@ function analyser_backend($rss, $url_syndic='') {
 
        if (!count($items)) return _T('sites:avis_echec_syndication_01');
 
+       if (!defined('_SYNDICATION_MAX_ITEMS')) define('_SYNDICATION_MAX_ITEMS',1000);
+       $nb_items = 0;
        foreach ($items as $item) {
                $data = array();
+               if ($nb_items++>_SYNDICATION_MAX_ITEMS){
+                       break;
+               }
 
                // URL (semi-obligatoire, sert de cle)
 
@@ -264,6 +269,21 @@ function analyser_backend($rss, $url_syndic='') {
                // passer l'url en absolue
                $data['url'] = url_absolue(filtrer_entites($data['url']), $url_syndic);
 
+               // si on demande un dereferencement de l'URL, il faut verifier que ce n'est pas une redirection
+               if (_SYNDICATION_DEREFERENCER_URL){
+                       $target = $data['url'];
+                       include_spip("inc/distant");
+                       for ($i = 0; $i<10; $i++){
+                               // on fait un GET et pas un HEAD car les vieux SPIP ne repondent pas la redirection avec un HEAD (honte) sur un article virtuel
+                               $res = recuperer_lapage($target, false, "GET", 4096);
+                               if (!$res) break; // c'est pas bon signe car on a pas trouve l'URL...
+                               if (is_array($res))     break; // on a trouve la page, donc on a l'URL finale
+                               $target = $res; // c'est une redirection, on la suit pour voir ou elle mene
+                       }
+                       // ici $target est l'URL finale de la page
+                       $data['url'] = $target;
+               }
+
                // Trouver les microformats (ecrase les <category> et <dc:subject>)
                if (preg_match_all(
                ',<a[[:space:]]([^>]+[[:space:]])?rel=[^>]+>.*</a>,Uims',
@@ -326,7 +346,7 @@ function my_strtotime($la_date, $lang=null) {
        // par la version anglaise avant de faire strtotime
        if ($lang){
                // "fr-fr"
-               $lang = reset(explode("-",$lang));
+               list($lang) = explode("-", $lang);
                static $months = null;
                if (!isset($months[$lang])){
                        $prev_lang = $GLOBALS['spip_lang'];
@@ -436,9 +456,14 @@ function cdata_echappe(&$rss, &$echappe_cdata) {
        if (preg_match_all(',<!\[CDATA\[(.*)]]>,Uims', $rss,
        $regs, PREG_SET_ORDER)) {
                foreach ($regs as $n => $reg) {
-                       if (preg_match(',[<>],', $reg[1])) {
-                               $echappe_cdata[$n] = $reg[1];
-                               $rss = str_replace($reg[0], "@@@SPIP_CDATA$n@@@", $rss);
+                       if (strpos($reg[1],'<')!==false
+                         or strpos($reg[1],'>')!==false) {
+                               // verifier que la chaine est encore dans le flux, car on peut avoir X fois la meme
+                               // inutile de (sur)peupler le tableau avec des substitutions identiques
+                               if (strpos($rss,$reg[0])!==false){
+                                       $echappe_cdata["@@@SPIP_CDATA$n@@@"] = $reg[1];
+                                       $rss = str_replace($reg[0], "@@@SPIP_CDATA$n@@@", $rss);
+                               }
                        } else
                                $rss = str_replace($reg[0], $reg[1], $rss);
                }
@@ -449,11 +474,11 @@ function cdata_echappe(&$rss, &$echappe_cdata) {
 // http://code.spip.net/@cdata_echappe_retour
 function cdata_echappe_retour(&$x, &$echappe_cdata) {
        if (is_string($x)) {
-               if (strpos($x, '@@@SPIP_CDATA') !== false
-               OR strpos($x, '&lt;') !== false) {
+               if (strpos($x, '&lt;') !== false){
                        $x = filtrer_entites($x);
-                       foreach ($echappe_cdata as $n => $e)
-                               $x = str_replace("@@@SPIP_CDATA$n@@@", $e, $x);
+               }
+               if (strpos($x, '@@@SPIP_CDATA') !== false){
+                       $x = str_replace( array_keys($echappe_cdata), array_values($echappe_cdata), $x);
                }
        }
 
index 233a5c4..66dc720 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index c1a5ae0..e797ba4 100644 (file)
@@ -1,7 +1,7 @@
 <paquet
        prefix="sites"
        categorie="edition"
-       version="1.7.13"
+       version="1.7.20"
        etat="stable"
        compatibilite="[3.0.0;3.0.*]"
        logo="prive/themes/spip/images/site-32.png"
index 40ecc8d..2d685e8 100644 (file)
@@ -8,7 +8,7 @@
 #ANCRE_PAGINATION
 <div class="liste-objets syndic_articles">
 <table class='spip liste'>
-[<caption><span class="image_loading"></span><strong class="caption">(#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{info_1_article_syndique,info_nb_articles_syndiques}})</strong></caption>]
+[<caption><span class="image_loading"></span><strong class="caption">(#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{sites:info_1_article_syndique,sites:info_nb_articles_syndiques}})</strong></caption>]
        <thead>
                <tr class='first_row'>
                        <th class='statut' scope='col'>[(#TRI{statut,<span title="<:lien_trier_statut|attribut_html:>">#</span>,ajax})]</th>
@@ -25,7 +25,8 @@
                <tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
                        <td class='statut'>[(#STATUT|puce_statut{syndic_article})]</td>
                        <td class='titre principale'>[<a
-                                       href="(#URL_ARTICLE)"
+                                       href="(#URL_ARTICLE)"[
+                                       (#LANG|=={#ENV{lang}}|non)hreflang="#LANG"]
                                                title="<:info_numero_abbreviation|attribut_html:> #ID_SYNDIC_ARTICLE">#SET{a,'</a>'}]#TITRE[(#GET{a})]
                                <span class="auteurs">([(#LESAUTEURS), ][(#DATE|affdate_court)])</span>
                                [(#TAGS|afficher_enclosures)]
index 0098c76..0843b3c 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index f14defa..ba587fa 100644 (file)
@@ -58,6 +58,7 @@
 
 <BOUCLE_test(SYNDIC_ARTICLES){id_syndic=#ID_SYNDIC}{0,1}{si #SYNDICATION|=={non}}>
        [(#AUTORISER{purger,site,#ID_SITE}|oui)
+               <INCLURE{fond=prive/objets/liste/syndic_articles,id_syndic,titre=<:sites:titre_articles_syndiques:>,par=date,ajax} />
                <div class='purger_syndic'>
                        [(#BOUTON_ACTION{<:sites:lien_purger_syndication:>,#URL_ACTION_AUTEUR{purger_site,#ID_SYNDIC,#SELF},ajax,<:sites:confirmer_purger_syndication:>})]
                </div>
index b62a2d3..7c24ddf 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                 *
+ *  Copyright (c) 2001-2016                                                 *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 7186378..4082c6a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 83a775e..af068a8 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index e6ddbcb..3f49f09 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 700c2f6..4f9a24d 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index d7481c5..2cb1fdc 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index b27a19a..4466bf7 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index d0d86fc..cb52016 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index c4c5b1f..ae7d771 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 88b6226..163c050 100644 (file)
 rien=
 [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+
 
-[Google]
-(^q|\&q|as_q)=
-(www\.|ww\.|maps\.)?(google|gogole)\.(.*)
-(web|www).toile.com
-www\.cegetel\.net
-search\.conduit\.com
-search\.sweetim\.com
-chello\.fr
-isearch\.avg\.com
+# -----------------------------------------------------------------------------
+# Services de mail
+# -----------------------------------------------------------------------------
 
-[Voila]
-(kw|rdata)=
-(search|moteur)(.*)\.voila\.(fr|com)
+[(email)]
+rien=
+imp(.*)\.free\.fr
+fc\.kayenta\.com
+courrielweb\.cmaisonneuve\.qc\.ca
+(.*)mail\.(.*)\.([a-z]+)$
+webmail([0-9]*)\.wanadoo\.fr
+www\.laposte\.net
+mail([0-9]*)\.voila\.fr
+\/(web)?mail\/
 
-[Yahoo!]
-p=
-(.*)(m|search|ink|dir|google)\.yahoo\.([a-z]+)$
 
-[AltaVista]
+# -----------------------------------------------------------------------------
+# Les moteurs vivants - Engines List
+# -----------------------------------------------------------------------------
+
+[Accentice]
 q=
-(.*)altavista\.com
+(.*\.|)accentice\.com
 
-[Delicious]
-p=
-delicious\.com
+[Alice]
+qs=
+\.aliceadsl\.
 
-[Ask]
+[alOt]
 q=
+search\.alot\.com
+
+[AOLsearch]
+(query|q)=
+(.*)search\.aol\.(.*)
+
+[AOL France]
+(query|q|r)=
+(.*)recherchet?\.aol\.fr
+
+[Ask]
+(q|queryTerm|searchfor)=
 (.*)\.ask\.com
 
-[HotBot]
-query=
-www\.hotbot\.com
+[Babylon]
+q=
+search\.babylon\.com
 
-[Freeserve]
+[Baidu]
+(wd|d)=
+(.*\.|)baidu\.com
+
+[Bing]
 q=
-search\.freeserve\.com
+(.*)\.bing\.com
+bing\.com
+search\.live\.com
 
-[Skeech]
+[BlueWin]
 query=
-skeech\.com
+search\.bluewin\.ch
 
-[Dogpile]
+[Copernic]
 query=
-(.*)dogpile\.com
+find\.copernic\.com
 
-[Metacrawler]
-query=
-metacrawler\.com
+[Crawler]
+q=
+(www\.)crawler\.com
 
-[Mirago]
-qry=
-www.mirago\.([a-z]+)$
+[Delicious]
+p=
+delicious\.com
 
-[Nomade]
-s=
-(.*)\.nomade\.fr
-(.*)\.nomade\.tiscali\.fr
-(.*)\.nomade\.aliceadsl\.fr
+[Delta Search]
+q=
+(.*\.|)delta-search\.com
 
-[Alice]
-qs=
-\.aliceadsl\.
+#
+# Dmoz
+#
+[dmoz.org]
+rien=
+(.*\.)?dmoz\.org
 
-[Lycos]
+[EO]
+q=
+www\.eo\.st
+
+[Dogpile]
 query=
-search\.lycos\.com
-vachercher\.lycos\.fr
+(.*)dogpile\.com
 
-[Francite]
-name=
-recherche\.francite\.com
+[Dogpile]
+q=
+(.*\.|)dogpile\.co\.uk
 
-[MSN]
-(q|s)=
-search(.*)\.msn\.([a-z.]+)$
-leguide(.*)\.msn\.([a-z]+)$
-search\.ninemsn\.com\.au
+[EasySearch]
+s=
+(.*\.|)easysearch\.org\.uk
 
-[Bing]
+[Ecosia]
 q=
-(.*)\.bing\.com
-bing\.com
-search\.live\.com
+(.*\.|)ecosia\.org
+
+[Exalead]
+q=
+www\.exalead\.fr
+www\.exalead\.com
 
 [Excite]
 search=
 www\.excite\.fr
 (.*)\.excite\.co\.jp
 
-[AOL France]
-(query|q|r)=
-(.*)recherchet?\.aol\.fr
+[Facemoods]
+s=
+start\.facemoods\.com
 
-[AOLsearch]
-(query|q)=
-(.*)search\.aol\.(.*)
+[FoxRef]
+key=
+www\.foxref\.org
 
-[AllTheWeb]
+[francesurf]
 q=
-www\.alltheweb\.com
-
-[ixquick]
-query=
-ixquick\.com
+www\.francesurf\.net
 
-[Netscape]
-search=
-search-intl\.netscape\.com
-search\.netscape\.com
-www\.netscape\.fr
+[Francite]
+name=
+recherche\.francite\.com
 
 [Free]
 q=
 search(.*)\.free\.fr
 
-[9online]
-query=
-www\.9online\.fr
+[Freeserve]
+q=
+search\.freeserve\.com
 
-[Naver]
-query=
-search\.naver\.com
+[Google]
+(^q|\&q|as_q|qs)=
+(www\.|ww\.|maps\.)?(google|gogole)\.(.*)
+(web|www).toile.com
+www\.cegetel\.net
+search\.conduit\.com
+search\.sweetim\.com
+chello\.fr
+isearch\.avg\.com
 
-[Club Internet]
+[Govome]
 q=
-recherche\.club-internet\.fr
+(.*\.|)govome\.com
 
-[Sympatico]
+[Globososo]
+q=
+(.*\.|)globososo\.com
+
+[so]
+q=
+www\.so\.com
+
+[HolaSearch]
+q=
+(.*\.|)holasearch\.com
+
+[HelloSearch]
+q=
+(.*\.|)hellosearch\.fr
+
+[HooSeek]
+recherche=
+(www\.)?hooseek\.com
+
+[HotBot]
 query=
-search\.sli\.sympatico\.ca
+www\.hotbot\.com
 
-[Overture]
-Keywords=
-www\.overture\.com
+[Iadah]
+q=
+(www\.|)iadah\.com
 
-[moteur-recherche.net]
-keyword=
-www\.moteur-recherche\.net
+[Incredibar]
+q=
+(search\.)incredibar\.com
 
-[Reacteur.com]
-kw=
-www\.reacteur\.com
+[ixquick]
+query=
+ixquick\.com
 
-[francesurf]
+[LemmeFind]
+t=
+www\.lemmefind\.fr
+
+[Libero.it]
+query=
+arianna\.libero\.it
+
+[Lilo]
 q=
-www\.francesurf\.net
+(.*\.|)uselilo\.org
 
-[n9uf]
-((K|k)eywords|query)=
-(www\.)?neuf\.fr
+[Lost]
+x_query=
+(www\.)?lo\.st
+
+[Lycos]
+query=
+search\.lycos\.com
+vachercher\.lycos\.fr
+
+[Metacrawler]
+query=
+metacrawler\.com
+
+[Mirago]
+qry=
+www.mirago\.([a-z]+)$
+
+[MonGenie]
+Keywords=
+www\.mongenie\.com
 
 [MozBot]
 q=
 www\.mozbot\.([a-z]+)$
 
-[Cegetel]
+[moteur-recherche.net]
+keyword=
+www\.moteur-recherche\.net
+
+[MSN]
+(q|s)=
+search(.*)\.msn\.([a-z.]+)$
+leguide(.*)\.msn\.([a-z]+)$
+(.*)\.msn\.([a-z]+)$
+search\.ninemsn\.com\.au
+
+[mySearchDial]
 q=
-(www\.)?cegetel\.([a-z]+)$
+(.*\.|)mysearchdial\.com
 
 [MyWay]
 searchfor=
-kf\.mysearch\.myway\.com
+(.*)\.myway\.com
 www\.mywebsearch\.com
 (.*)\.mysearch\.com
 
-[MonGenie]
-Keywords=
-www\.mongenie\.com
+[MyWebSearch]
+searchfor=
+search\.mywebsearch\.com
+
+[Naver]
+query=
+search\.naver\.com
 
 [Need2Find]
 searchfor=
 kx\.search\.need2find\.com
 
-[Exalead]
-q=
-www\.exalead\.fr
-www\.exalead\.com
-
-[Virgilio.it]
-qs=
-search\.virgilio\.it
-
-[Libero.it]
-query=
-arianna\.libero\.it
-
-[LemmeFind]
-t=
-www\.lemmefind\.fr
+[Nomade]
+s=
+(.*)\.nomade\.fr
+(.*)\.nomade\.tiscali\.fr
+(.*)\.nomade\.aliceadsl\.fr
 
 [NovoNeo]
 q=
 www\.novoneo\.com
 
-[MyWebSearch]
-searchfor=
-search\.mywebsearch\.com
-
-[Copernic]
-query=
-find\.copernic\.com
-
-[Seek]
-qry_str=
-\.seek\.fr
-
 [Orange, le moteur]
 rdata=
 www\.lemoteur\.fr
 
-[alOt]
-q=
-search\.alot\.com
-
-#
-# Dmoz
-#
-[dmoz.org]
-rien=
-(.*\.)?dmoz\.org
-
-[FoxRef]
-key=
-www\.foxref\.org
-
-[OneBigWorld]
-Keywords=
-fr\.onebigworld\.com
+[Orange, le moteur]
+kw=
+lemoteur\.orange\.fr
 
-[BlueWin]
-query=
-search\.bluewin\.ch
+[ParallaxSearch]
+qs=
+(.*\.|)parallaxsearch\.com
 
-[EO]
+[Pesquisa]
 q=
-www\.eo\.st
-
-[HooSeek]
-recherche=
-(www\.)?hooseek\.com
+pesquisa\.sapo\.pt
 
-[Lost]
-x_query=
-(www\.)?lo\.st
+[Qone8]
+q=
+(.*\.|)qone8\.com
 
-[Babylon]
+[Qwant]
 q=
-search\.babylon\.com
+(.*\.|)qwant\.com
 
-[Crawler]
+[Search-Results]
 q=
-(www\.)crawler\.com
+(.*\.|)search-results\.com
 
 [Searchqu]
 q=
@@ -276,101 +319,105 @@ q=
 q=
 (www\.|)searchya\.com
 
-[Iadah]
+[Seek]
+qry_str=
+\.seek\.fr
+
+[Seznam]
 q=
-(www\.|)iadah\.com
+(.*\.|)seznam\.cz
 
-[Incredibar]
+[Skeech]
+query=
+skeech\.com
+
+[Sogou]
+query=
+www\.sogou\.com
+
+[Sympatico]
+query=
+search\.sli\.sympatico\.ca
+
+[Trouver]
 q=
-(search\.)incredibar\.com
+(.*\.|)trouver\.fr
 
-[Search-Results]
+[Vi-View]
 q=
-(.*\.|)search-results\.com
+(.*\.|)vi-view\.com
 
-[Facemoods]
-s=
-start\.facemoods\.com
+[Virgilio.it]
+qs=
+search\.virgilio\.it
+
+[Yahoo!]
+p=
+(.*)(m|search|ink|dir|google)\.yahoo\.([a-z]+)$
 
 [Yandex]
 text=
 (www\.)?yandex\.ru
 
+[Wow]
+q=
+(.*\.|)wow\.com
+
 [Xeoo]
 k=
 (www\.)?xeoo\.com
 
-[Delta Search]
-q=
-(.*\.|)delta-search\.com
-
-[HolaSearch]
-q=
-(.*\.|)holasearch\.com
-
-[Govome]
-q=
-(.*\.|)govome\.com
 
-[mySearchDial]
-q=
-(.*\.|)mysearchdial\.com
+# -----------------------------------------------------------------------------
+# Les moteurs morts - Engines List
+# -----------------------------------------------------------------------------
 
-[SOSO Globo]
-q=
-(.*\.|)globososo\.com
+[9online]
+query=
+www\.9online\.fr
 
-[Seznam]
+[AltaVista]
 q=
-(.*\.|)seznam\.cz
-
-[Baidu]
-wd=
-(.*\.|)baidu\.com
+(.*)altavista\.com
 
-[Dogpile]
+[AllTheWeb]
 q=
-(.*\.|)dogpile\.co\.uk
+www\.alltheweb\.com
 
-[Trouver]
+[Cegetel]
 q=
-(.*\.|)trouver\.fr
+(www\.)?cegetel\.([a-z]+)$
 
-[Pesquisa]
+[Club Internet]
 q=
-pesquisa\.sapo\.pt
+recherche\.club-internet\.fr
 
-[Qwant]
+[Haosou]
 q=
-(.*\.|)qwant\.com
+www\.haosou\.com
 
-[Qone8]
-q=
-(.*\.|)qone8\.com
+[n9uf]
+((K|k)eywords|query)=
+(www\.)?neuf\.fr
 
-[Ecosia]
-q=
-(.*\.|)ecosia\.org
+[Netscape]
+search=
+search-intl\.netscape\.com
+search\.netscape\.com
+www\.netscape\.fr
 
-[Wow]
-q=
-(.*\.|)wow\.com
+[OneBigWorld]
+Keywords=
+fr\.onebigworld\.com
 
-[Accentice]
-q=
-(.*\.|)accentice\.com
+[Overture]
+Keywords=
+www\.overture\.com
 
-#
-# Services de mail
-# 
+[Reacteur.com]
+kw=
+www\.reacteur\.com
 
-[(email)]
-rien=
-imp(.*)\.free\.fr
-fc\.kayenta\.com
-courrielweb\.cmaisonneuve\.qc\.ca
-(.*)mail\.(.*)\.([a-z]+)$
-webmail([0-9]*)\.wanadoo\.fr
-www\.laposte\.net
-mail([0-9]*)\.voila\.fr
-\/(web)?mail\/
+[Voila]
+(kw|rdata)=
+(search|moteur)(.*)\.voila\.(fr|com)
index d99d1fc..efd0215 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 703ca87..e698e8d 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 605bfb7..5cc0387 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 80b070b..7f1f1e0 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 8e789ab..36e3471 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index d9497e8..51a82ab 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index fab7ffa..c98e9f6 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 9f60f3a..92e6759 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index b7a8eee..8166001 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 16ed4fa..4664c60 100644 (file)
@@ -1,9 +1,9 @@
 <paquet
        prefix="stats"
        categorie="statistique"
-       version="0.4.28"
+       version="0.4.38"
        etat="stable"
-       compatibilite="[3.0.0;3.1.*]"
+       compatibilite="[3.0.0;3.0.*]"
        logo="prive/themes/spip/images/statistique-32.png"
        schema="1.0.0"
 >      
index ea7fda5..3917022 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 70effbe..99a6b4b 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index ed69458..b9b5bc8 100644 (file)
@@ -92,4 +92,7 @@ table#visites tr.c_recap th {background-color:#[(#GET{foncee}|couleur_foncer)];c
 .stats_repartition table table td {padding: 0;}
 .stats_lang .couleur_langue { background: #GET{foncee}; }
 .stats_lang table p {padding-left:10px;margin:2px 0;}
+
+.stats-articles .size1of2 {padding-#GET{right}:1%;}
+.stats-articles .lastUnit {padding-#GET{left}:1%;border-#GET{left}:1px solid;}
 [(#REM)        </style>]
index 4cb6d1a..27f3cd3 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 11a15c4..3aaa7ec 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index dbfdc39..b19ed87 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 07e2b8f..e1295e6 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 1bcc058..a2725fe 100644 (file)
@@ -46,7 +46,7 @@
                                <input type="submit" class="submit" name="appliquer" value="<:svp:bouton_appliquer:>" />
                        </fieldset>]
                        <script type="text/javascript">
-                       //<![CDATA[
+                       /*<![CDATA[*/
                                (function($){
                                        $("#select_tous").click(function(){
                                                jQuery("input.select_plugin").attr("checked",true);
@@ -80,7 +80,7 @@
                                        onAjaxLoad(cocher_plugins_up);
                                        onAjaxLoad(remonter_sur_erreurs);
                                })(jQuery);
-                       //]]>
+                       /*]]>*/
                        </script>
                </div>
        </form>
index 17ad64d..96d2206 100644 (file)
@@ -92,7 +92,7 @@
 </B_plugins>
 
 <script type="text/javascript">
-//<![CDATA[
+/*<![CDATA[*/
        (function($){
                $('.plugins li.item a[rel=info]').click(function(){
                        var li = $(this).parents('li').eq(0);
                        });
                }
        })(jQuery);
-//]]>
-</script>
+/*]]>*/
+</script>
\ No newline at end of file
index 16fb81b..88db73b 100644 (file)
@@ -19,7 +19,7 @@
                <input type="submit" name="annuler_actions" class="submit annuler_actions" value="<:bouton_annuler:>" />
                <input type="submit" name="valider_actions" class="submit valider_actions" value="<:bouton_valider:>" />
        </p>
-       <script type="text/javascript">
+       <script type="text/javascript">/*<!\[CDATA\[*/
                [(#REM)
                        Fonctionnement du JS.
                                - overlayClose // pas de click en dehors des Ã©léments prévus
@@ -35,7 +35,6 @@
                                - onClose          // apres la fermeture, on clique le bouton ayant 'fire'
                                                
                ]
-               <!--
                (function($){
                        $(function(){
                                if ($.modalbox !== 'undefined') {
@@ -57,6 +56,6 @@
                                }
                        });
                })(jQuery);
-               -->
+               /*\]\]>*/
        </script>
 </div>]
index 7c7d562..d50a3e4 100644 (file)
@@ -51,7 +51,7 @@
 </B_plugins_trouves>
 
 <script type="text/javascript">
-//<![CDATA[
+/*<![CDATA[*/
        jQuery(function(){
                jQuery('.plugins li.item a[rel=info]').click(function(){
                        var li = jQuery(this).parents('li').eq(0);
@@ -74,5 +74,5 @@
                        }
                }); 
        });
-//]]>
+/*]]>*/
 </script>
index a3dcc18..73770cb 100644 (file)
@@ -1006,7 +1006,7 @@ class Decideur {
                                                // absent ou erreur ou pas compatible
                                                $etat = $err ? 'erreur' : ($ninfo ? 'conflit' : 'absent');
                                                // conflit signifie qu'il existe le prefixe actif, mais pas a la version demandee
-                                               $this->log("Dedendance " . $p . " a resoudre ! ($etat)");
+                                               $this->log("Dependance " . $p . " a resoudre ! ($etat)");
 
                                                switch ($etat) {
                                                        // commencons par le plus simple :
index 2ce2688..d539741 100644 (file)
@@ -101,7 +101,7 @@ function svp_ajouter_depot($url, &$erreur='') {
        // On vide les paquets locaux pour mettre a jour leurs donnees relatives au depot
        // comme les mises a jour disponibles
        include_spip('inc/svp_depoter_local');
-       svp_base_supprimer_paquets_locaux();
+       svp_actualiser_paquets_locaux(true);
        
        return true;
 }
index cb72243..d1851cd 100644 (file)
@@ -1,7 +1,7 @@
 <paquet
        prefix="svp"
        categorie="maintenance"
-       version="0.80.26"
+       version="0.80.28"
        etat="stable"
        compatibilite="[3.0.0;3.0.*]"
        logo="svp-64.png"
index 77d617c..6bf2ebd 100644 (file)
@@ -30,8 +30,8 @@
        #FORMULAIRE_ADMIN_PLUGIN{#ENV{voir},#ENV{verrouille},#ENV{id_paquet}}
 </div>
 <script type="text/javascript">
-    //<![CDATA[
-    jQuery(function(){
+       /*<![CDATA[*/
+       jQuery(function(){
                jQuery('#contenu .svp_retour').on('hover',function(){
                        if (jQuery('.box .inner .hd h3 img.close', this).length == 0) {
                                jQuery('.box .inner .hd h3', this)
@@ -41,6 +41,6 @@
                                        });
                        }
                });
-    });
-    //]]>
+       });
+       /*]]>*/
 </script>
\ No newline at end of file
index 02fc3f6..3da9589 100644 (file)
@@ -108,8 +108,9 @@ function teleporter_http_recuperer_source($source,$dest_tmp){
 
        $dest_tmp = preg_replace(";\.[\w]{2,3}$;i","",$dest_tmp).".$extension";
 
+       if (!defined('_SVP_PAQUET_MAX_SIZE')) define('_SVP_PAQUET_MAX_SIZE', 67108864); // 64Mo
        include_spip('inc/distant');
-       $dest_tmp = copie_locale($source,'force',$dest_tmp);
+       $dest_tmp = copie_locale($source,'force',$dest_tmp,_SVP_PAQUET_MAX_SIZE);
        if (!$dest_tmp
          OR !file_exists($dest_tmp = _DIR_RACINE . $dest_tmp)) {
                spip_log("Chargement impossible de la source $source","teleport"._LOG_ERREUR);
index 3441c0c..d5a9804 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -507,7 +507,9 @@ function traiter_modeles($texte, $doublons=false, $echap='', $connect='', $liens
                                $lien = array(
                                        'href' => extraire_attribut($r[0],'href'),
                                        'class' => extraire_attribut($r[0],'class'),
-                                       'mime' => extraire_attribut($r[0],'type')
+                                       'mime' => extraire_attribut($r[0],'type'),
+                                       'title' => extraire_attribut($r[0],'title'),
+                                       'hreflang' => extraire_attribut($r[0],'hreflang')
                                );
                                $n = strlen($r[0]);
                                $a -= $n;
@@ -541,6 +543,8 @@ function traiter_modeles($texte, $doublons=false, $echap='', $connect='', $liens
                                                $contexte['lien'] = str_replace("&quot;",'"', $lien['href']);
                                                $contexte['lien_class'] = $lien['class'];
                                                $contexte['lien_mime'] = $lien['mime'];
+                                               $contexte['lien_title'] = $lien['title'];
+                                               $contexte['lien_hreflang'] = $lien['hreflang'];
                                        }
                                        $modele = recuperer_fond("modeles/dist", $contexte, array(), $connect);
                                }
diff --git a/www/plugins-dist/textwheel/inc/memoization-mini.php b/www/plugins-dist/textwheel/inc/memoization-mini.php
deleted file mode 100644 (file)
index 0b6852b..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-
-if (!defined('_ECRIRE_INC_VERSION')) return;
-
-# memoization minimale (preferer le plugin memoization)
-function cache_get($key) {
-       return @unserialize(file_get_contents(_DIR_CACHE."wheels/".$key.".txt"));
-}
-function cache_set($key, $value) {
-       $dir = sous_repertoire(_DIR_CACHE,"wheels/");
-       return ecrire_fichier($dir.$key.".txt", serialize($value));
-}
-
-?>
index cfafc56..83d03ed 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 3ec42c8..8f438e6 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 23acd7e..089d9dc 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -86,17 +86,15 @@ class SPIPTextWheelRuleset extends TextWheelRuleSet {
                $key = 'tw-'.md5(_WHEELS_VERSION."-".serialize($ruleset).$callback.$class._DIR_RACINE);
 
                # lecture du cache
-               include_spip('memoization_options');
-               if (!function_exists('cache_get')) include_spip('inc/memoization-mini');
                if ((!defined('_VAR_MODE') OR _VAR_MODE!='recalcul')
-                 AND $cacheruleset = cache_get($key))
+                 AND $cacheruleset = tw_cache_get($key))
                        return $cacheruleset;
 
                # calcul de la wheel
                $ruleset = parent::loader($ruleset, $callback, $class);
 
                # ecriture du cache
-               cache_set($key, $ruleset);
+               tw_cache_set($key, $ruleset);
 
                return $ruleset;
        }
@@ -109,4 +107,36 @@ function tw_trig_purger($quoi){
        return $quoi;
 }
 
-?>
+
+/**
+ * Lire une valeur en cache
+ * memoization minimale
+ * (utilise le plugin memoization si disponible)
+ *
+ * @param string $key
+ * @return mixed
+ */
+function tw_cache_get($key) {
+       if (function_exists('cache_get')){
+               return cache_get($key);
+       }
+       return @unserialize(file_get_contents(_DIR_CACHE."wheels/".$key.".txt"));
+}
+
+/**
+ * Ecrire une valeur en cache
+ * memoization minimale
+ * (utilise le plugin memoization si disponible)
+ *
+ * @param string $key
+ * @param mixed $value
+ * @param int|null $ttl
+ * @return bool
+ */
+function tw_cache_set($key, $value, $ttl=null) {
+       if (function_exists('cache_set')){
+               return cache_set($key, $value, $ttl);
+       }
+       $dir = sous_repertoire(_DIR_CACHE,"wheels/");
+       return ecrire_fichier($dir.$key.".txt", serialize($value));
+}
index 7a661be..e792fd9 100644 (file)
@@ -1,7 +1,7 @@
 <paquet
        prefix="tw"
        categorie="edition"
-       version="0.8.30"
+       version="0.8.31"
        etat="stable"
        compatibilite="[3.0.0;3.0.*]"
        logo="textwheel-32.png"
index ebed71b..1525ca6 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index ddf3f33..8ec2f98 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index ba4cc95..e07ac49 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 67a538e..ded6a83 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -19,14 +19,20 @@ function action_supprimer_url_dist($arg=null) {
                $securiser_action = charger_fonction('securiser_action', 'inc');
                $arg = $securiser_action();
        }
-       $arg = explode('-',$arg);
-       $id_parent = array_shift($arg);
-       $url = implode('-',$arg);
+       if (strncmp($arg,"-1-",3)==0){
+               $id_parent = -1;
+               $url = substr($arg,3);
+       }
+       else {
+               $arg = explode('-',$arg);
+               $id_parent = array_shift($arg);
+               $url = implode('-',$arg);
+       }
 
        $where = 'id_parent='.intval($id_parent)." AND url=".sql_quote($url);
        if($row = sql_fetsel('*','spip_urls',$where)){
 
-               if (autoriser('modifier',$row['type'],$row['id_objet'])){
+               if (autoriser('modifierurl',$row['type'],$row['id_objet'])){
                        sql_delete('spip_urls',$where);
                }
                else
index 8aa9634..8c350e5 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 42611db..93677fb 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -19,12 +19,11 @@ function action_urls_liberer_dist() {
        $arg = $securiser_action();
 
        include_spip('inc/autoriser');
-       if (autoriser('modifier',$type,$id)){
-               $arg = explode('-',$arg);
-               $type = array_shift($arg);
-               $id = array_shift($arg);
-               $url = implode('-',$arg);
-
+       $arg = explode('-',$arg);
+       $type = array_shift($arg);
+       $id = array_shift($arg);
+       $url = implode('-',$arg);
+       if (autoriser('modifierurl',$type,$id)){
                include_spip('action/editer_url');
                url_delete($type, $id, $url);
        }
index 44d5dc3..1bb406b 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -19,12 +19,11 @@ function action_urls_verrouiller_dist() {
        $arg = $securiser_action();
 
        include_spip('inc/autoriser');
-       if (autoriser('modifier',$type,$id)){
-               $arg = explode('-',$arg);
-               $type = array_shift($arg);
-               $id = array_shift($arg);
-               $url = implode('-',$arg);
-
+       $arg = explode('-',$arg);
+       $type = array_shift($arg);
+       $id = array_shift($arg);
+       $url = implode('-',$arg);
+       if (autoriser('modifierurl',$type,$id)){
                include_spip('action/editer_url');
                url_verrouiller($type, $id, $url);
        }
index c4245eb..e02ac55 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index e4030fa..f083978 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 3dbee8c..48e4170 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -19,13 +19,13 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
  * @param int $id
  * @return array
  */
-function formulaires_editer_url_objet_charger($type,$id){
+function formulaires_editer_url_objet_charger_dist($type, $id) {
        $valeurs = array('url'=>'','_objet'=>$type,'_id_objet'=>$id);
 
        return $valeurs;
 }
 
-function formulaires_editer_url_objet_verifier($type,$id){
+function formulaires_editer_url_objet_verifier_dist($type, $id) {
        $erreurs = array();
        include_spip('action/editer_url');
        if (!$url = _request('url')){
@@ -63,7 +63,7 @@ function formulaires_editer_url_objet_verifier($type,$id){
  * @param int $id
  * @return array
  */
-function formulaires_editer_url_objet_traiter($type,$id){
+function formulaires_editer_url_objet_traiter_dist($type, $id) {
        $valeurs = array('editable'=>true);
 
        include_spip('action/editer_url');
@@ -88,4 +88,4 @@ function formulaires_editer_url_objet_traiter($type,$id){
                $valeurs['message_erreur'] = _T("urls:url_ajout_impossible");
 
        return $valeurs;
-}
\ No newline at end of file
+}
index 3504bd4..9ca8f4b 100644 (file)
@@ -1,7 +1,7 @@
 <paquet
        prefix="urls"
        categorie="statistique"
-       version="1.4.26"
+       version="1.4.29"
        etat="stable"
        compatibilite="[3.0.0;3.0.*]"
        logo="prive/themes/spip/images/url-32.png"
index b92f3a9..0ab9ac1 100644 (file)
@@ -1,7 +1,7 @@
 [(#INFO_STATUT{#OBJET,#ID_OBJET}|!={prepa}|oui)
 <div class="editer_urls">
        [<span class='link'>
-               #SET{auth,#AUTORISER{modifier,#OBJET,#ID_OBJET}}
+               #SET{auth,#AUTORISER{modifierurl,#OBJET,#ID_OBJET}}
                [(#GET{auth})
                <a href="#"
                title="Modifier l'URL"
index df18e0e..c1c11be 100644 (file)
@@ -34,7 +34,7 @@
                        <td class='objet'><a href="[(#ID_OBJET|generer_url_entite{#TYPE})]">[(#TYPE|objet_info{texte_objet}|_T)]&nbsp;#ID_OBJET</a></td>
                        <td class='parent'>[(#ID_PARENT|?{#ID_PARENT})]</td>
                        <td class='date secondaire'>[(#DATE|affdate_jourcourt)]</td>
-                       <td class='action'>[(#AUTORISER{modifier,#TYPE,#ID_OBJET})[(#BOUTON_ACTION{[(#CHEMIN_IMAGE{supprimer-12}|balise_img{<:urls:bouton_supprimer_url:>})],[(#URL_ACTION_AUTEUR{supprimer_url,[(#ID_PARENT)-#URL],#SELF})],ajax})]]</td>
+                       <td class='action'>[(#AUTORISER{modifierurl,#TYPE,#ID_OBJET})[(#BOUTON_ACTION{[(#CHEMIN_IMAGE{supprimer-12}|balise_img{<:urls:bouton_supprimer_url:>})],[(#URL_ACTION_AUTEUR{supprimer_url,[(#ID_PARENT)-#URL],#SELF})],ajax})]]</td>
                </tr>
        </BOUCLE_liste_urls>
        </tbody>
index 63abdeb..a1f1484 100644 (file)
@@ -1,6 +1,6 @@
 [(#AUTORISER{administrer,url}|sinon_interdire_acces)]
 #BOITE_OUVRIR{'',raccourcis}
-[(#AUTORISER{modifier})
+[(#AUTORISER{modifierurl})
 [(#BOUTON_ACTION{[(#CHEMIN_IMAGE{url-edit-24.png}|balise_img)<:urls:actualiser_toutes:>],#URL_ACTION_AUTEUR{urls_actualiser,'',#SELF},icone horizontale})]
 ]
 #BOITE_FERMER
index ecd85ea..e5eea98 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -540,7 +540,7 @@ function urls_arbo_dist($i, $entite, $args='', $ancre='') {
                                                                                        // puis le bon parent avec 1 segment
                                                                                        // puis un parent indefini (le 0 de preference) et les deux segments
                                                                                        // puis un parent indefini (le 0 de preference) et 1 segment
-                                                                                       (intval($cp)?"id_parent=".intval($cp)." DESC, ":"")."segments DESC, id_parent"
+                                                                                       (intval($cp)?"id_parent=".intval($cp)." DESC, ":"id_parent>=0 DESC, ")."segments DESC, id_parent"
                        );
                        if ($row){
                                if (!is_null($type) AND $row['url']==$type){
@@ -643,7 +643,9 @@ function urls_arbo_dist($i, $entite, $args='', $ancre='') {
                        }
                }
        }
-       define('_SET_HTML_BASE',1);
+       if (!defined('_SET_HTML_BASE')){
+               define('_SET_HTML_BASE',1);
+       }
 
        return array($contexte, $entite, $url_redirect, null);
 }
index 1864338..ab1a565 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 693d74e..85d82df 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 3ce5d55..360b8f0 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index e32a5f5..f1254ae 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index b173fb4..07a8682 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 62b87df..7bfd202 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 5bb69c4..b9d519d 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 90d9357..024013d 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index eeb1b30..bf64ede 100644 (file)
@@ -2,7 +2,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -25,6 +25,24 @@ function autoriser_controlerurls_menu_dist($faire, $type='', $id=0, $qui = NULL,
        return autoriser('administrer','url');
 }
 
+function autoriser_modifierurl($faire, $type='', $id=0, $qui = NULL, $opt = NULL){
+       if (autoriser('modifier',$type,$id,$qui,$opt)){
+               return true;
+       }
+
+       // si pas le droit de 'modifier', regarder d'un peu plus pres pourquoi
+       if (!$type OR !intval($id)) {
+               return false;
+       }
+       // verifier si l'objet existe encore en base
+       $table_sql = table_objet_sql($type);
+       $primary = id_table_objet($type);
+       if (!sql_countsel($table_sql,"$primary=".intval($id))){
+               return autoriser('administrer','url');
+       }
+       return false;
+}
+
 function urls_afficher_fiche_objet($flux){
        if (isset($GLOBALS['meta']['urls_activer_controle'])
                AND $GLOBALS['meta']['urls_activer_controle']=='oui'
@@ -40,4 +58,4 @@ function urls_afficher_fiche_objet($flux){
        }
        return $flux;
 }
-?>
\ No newline at end of file
+?>
index fc713cc..ee7b17d 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 7f7e521..a39ead1 100644 (file)
@@ -1,7 +1,7 @@
 /**************************************************************************/
 /*  SPIP, Systeme de publication pour l'internet                          */
 /*                                                                        */
-/*  Copyright (c) 2001-2014                                               */
+/*  Copyright (c) 2001-2016                                               */
 /*  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James */
 /*                                                                        */
 /*  Ce programme est un logiciel libre distribue sous licence GNU/GPL.    */
index 48d5d3e..4bb2a52 100644 (file)
@@ -5,7 +5,7 @@
 /**************************************************************************/
 /*  SPIP, Systeme de publication pour l'internet                          */
 /*                                                                        */
-/*  Copyright (c) 2001-2014                                               */
+/*  Copyright (c) 2001-2016                                               */
 /*  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James */
 /*                                                                        */
 /*  Ce programme est un logiciel libre distribue sous licence GNU/GPL.    */
index bc98716..96a12f6 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index cd7a49b..c68b8c9 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index ca6d5b8..0ff47b3 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index b1d675e..68e8125 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 4c50131..90793b1 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index d6f084c..83e2ee9 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index a27c02f..6e37ee3 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 3190877..d00f70c 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 899ebee..6982337 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 5b13e91..86021a8 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index beede93..e492751 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index a15523a..4e703e0 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index ef6f3f3..15f680e 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 55a639d..1cc1d23 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index e29582d..560901f 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 11ebe7a..7120eb7 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 6b8f5bf..539f1dd 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index c986540..c73dbca 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 31c5cd1..346ed19 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 9eff5ea..b8438ff 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index b076b93..7bc99da 100644 (file)
                                <label for="#GET{name}">[(#ENV{_label_date})] #AIDER{artdate}</label>[
                                <span class='erreur_message'>(#GET{erreurs})</span>
                                ]
-                               <span class="affiche"[(#ENV{_saisie_en_cours}|oui)style="display:none;"]>[(#ENV*{afficher_#GET{name}}|affdate)]</span>
+                               <span class="affiche"[(#ENV{_saisie_en_cours}|et{#ENV{_editer_date}}|oui)style="display:none;"]>[(#ENV*{afficher_#GET{name}}|affdate)]</span>
        [(#ENV{editable})
                                <span class="toggle_box_link"[(#ENV{_saisie_en_cours}|oui)style="display:none;"]>&#91;<a href="#"
-                                               onclick="var f=jQuery(this).parents('form').eq(0);f.find('li .input').show('fast').siblings('span').hide('fast');f.find('.boutons').show('fast');f.find('input.date').eq(0).focus();return false;"
+                                               onclick="var f=jQuery(this).parents('form').eq(0);f.find('.editer .input.editable').show('fast').siblings('span').add(jQuery(this).parent()).hide('fast');f.find('.boutons').show('fast');f.find('input.date').eq(0).focus();return false;"
                                                ><:bouton_changer:><i class="over"> \(#ENV{_label_date}\)</i></a>&#93;</span>
-                               <span class="input"[(#ENV{_saisie_en_cours}|non)style="display:none;"]>
+                               <span class="input[(#ENV{_editer_date}|oui)editable]"[(#ENV{_saisie_en_cours}|et{#ENV{_editer_date}}|non)style="display:none;"]>
                                        <input type="text" class="text date" name="#GET{name}_jour" id="#GET{name}_jour" value="#ENV{#GET{name}_jour}" size="10"/>
                                        <input type="text" class="text heure time" name="#GET{name}_heure" id="#GET{name}_heure" value="#ENV{#GET{name}_heure}" size="5"/>
                                </span>
@@ -32,7 +32,7 @@
                                        ]
                                        <span class="affiche"[(#ENV{_saisie_en_cours}|oui)style="display:none;"]>[(#ENV*{afficher_#GET{name}}|affdate|sinon{<:jour_non_connu_nc:>})]</span>
        [(#ENV{editable})
-                                       <span class="input"[(#ENV{_saisie_en_cours}|non)style="display:none;"]>
+                                       <span class="input editable"[(#ENV{_saisie_en_cours}|non)style="display:none;"]>
                                                <span class="saisie_redac"[(#ENV{sans_redac}|oui)style="display:none;"]>
                                                        <input type="text" class="text date" name="#GET{name}_jour" id="#GET{name}_jour" value="#ENV{#GET{name}_jour}" size="10"/>
                                                        <input type="text" class="text heure time" name="#GET{name}_heure" id="#GET{name}_heure" value="#ENV{#GET{name}_heure}" size="5"/>
index 9b6d65d..f8aebcc 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -100,6 +100,12 @@ function formulaires_dater_charger_dist($objet, $id_objet, $retour='', $options=
        $valeurs['_label_date'] = (($statut == 'publie')? _T('texte_date_publication_objet'): _T('texte_date_creation_objet'));
        $valeurs['_saisie_en_cours'] = (_request('date_jour')!==null);
 
+       // cas ou l'on ne peut pas dater mais on peut modifier la date de redac anterieure
+       // https://core.spip.net/issues/3494
+       $valeurs['_editer_date'] = $valeurs['editable'];
+       if ($valeurs['_editer_date_anterieure'] AND !$valeurs['editable']){
+               $valeurs['editable'] = autoriser('modifier',$objet,$id_objet);
+       }
        return $valeurs;
 }
 
@@ -175,14 +181,19 @@ function formulaires_dater_traiter_dist($objet, $id_objet, $retour=''){
 
                $set = array();
 
-               if (!$d = dater_recuperer_date_saisie(_request('date_jour')))
-                       $d = array(date('Y'),date('m'),date('d'));
-               if (!$h = dater_recuperer_heure_saisie(_request('date_heure')))
-                       $h = array(0,0);
+               $charger = charger_fonction("charger","formulaires/dater/");
+               $v = $charger($objet, $id_objet, $retour, $options);
+
+               if ($v['_editer_date']){
+                       if (!$d = dater_recuperer_date_saisie(_request('date_jour')))
+                               $d = array(date('Y'),date('m'),date('d'));
+                       if (!$h = dater_recuperer_heure_saisie(_request('date_heure')))
+                               $h = array(0,0);
 
-               $set[$champ_date] = sql_format_date($d[0], $d[1], $d[2], $h[0], $h[1]);
+                       $set[$champ_date] = sql_format_date($d[0], $d[1], $d[2], $h[0], $h[1]);
+               }
 
-               if (isset($desc['field']['date_redac'])){
+               if (isset($desc['field']['date_redac']) AND $v['_editer_date_anterieure']){
                        if (!_request('date_redac_jour') OR _request('sans_redac'))
                                $set['date_redac'] = sql_format_date(0,0,0,0,0,0);
                        else {
@@ -193,8 +204,18 @@ function formulaires_dater_traiter_dist($objet, $id_objet, $retour=''){
                                $set['date_redac'] = sql_format_date($d[0], $d[1], $d[2], $h[0], $h[1]);
                        }
                }
-               include_spip('action/editer_objet');
-               objet_modifier($objet, $id_objet, $set);
+
+               if (count($set)){
+                       $publie_avant = objet_test_si_publie($objet,$id_objet);
+                       include_spip('action/editer_objet');
+                       objet_modifier($objet, $id_objet, $set);
+                       $publie_apres = objet_test_si_publie($objet,$id_objet);
+                       if ($publie_avant !== $publie_apres){
+                               // on refuse ajax pour forcer le rechargement de la page ici
+                               // on refera traiter une 2eme fois, mais c'est sans consequence
+                               refuser_traiter_formulaire_ajax();
+                       }
+               }
        }
 
        if ($retour)
index 405f72e..11683dc 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 794c27a..531ee33 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 321f2fc..69e6647 100644 (file)
@@ -98,7 +98,16 @@ function formulaires_editer_auteur_verifier_dist($id_auteur='new', $retour='', $
                }
        }
 
-       if (preg_match(",^\s*javascript,i", _request('url_site'))) {
+       // corriger un cas si frequent : www.example.org sans le http:// qui precede
+       if ($url = _request('url_site') and !tester_url_absolue($url)) {
+               if (strpos($url, ':') === false and strncasecmp($url, 'www.', 4) === 0) {
+                       $url = 'http://' . $url;
+                       set_request('url_site', $url);
+               }
+       }
+       // traiter les liens implicites avant de tester l'url
+       include_spip('inc/lien');
+       if ($url = calculer_url(_request('url_site')) and !tester_url_absolue($url)) {
                $erreurs['url_site'] = _T('info_url_site_pas_conforme');
        }
 
index d75c3e4..b027b99 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index d50ac64..0e5abaa 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 16ff865..0fcea52 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index e7fc0f8..20f03b6 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index fe914a5..ef2d6c8 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index f314484..596dfc4 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index a210408..29ede2c 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 822b270..d49e040 100644 (file)
@@ -1,7 +1,7 @@
 #SET{p,pr_#ID_RUBRIQUE}<B_enfants>
 [<p class='pagination'>(#PAGINATION)</p>]
 <ul class='items'>
-<BOUCLE_enfants(RUBRIQUES){id_parent=#ID_RUBRIQUE}{statut?}{pagination 100 #GET{p}}><li
+<BOUCLE_enfants(RUBRIQUES){id_parent=#ID_RUBRIQUE}{statut?}{pagination 100 #GET{p}}{par num titre, titre}><li
        class='rubrique'>[(#ENV{rubriques,0}|oui)<a
        href='#' onclick="jQuery(this).item_pick('rubrique|#ID_RUBRIQUE','#ENV{name,id_item}','[(#TITRE*|extraire_multi|attribut_html|texte_script|replace{'&#039;',#VAL{'\\'}|concat{#EVAL{chr(39)}}})]','rubrique');return false;"
 ><img
index d83adaf..fddf518 100644 (file)
@@ -11,7 +11,7 @@
                        title="<:bouton_choisir:> : [(#TITRE|attribut_html|couper{80})]"
                        class="choisir"
                        href="#"
-                       onclick="jQuery(this).item_pick('article|#ID_ARTICLE','#ENV{name,id_item}','#TITRE','article');return false;"
+                       onclick="jQuery(this).item_pick('article|#ID_ARTICLE','#ENV{name,id_item}','[(#TITRE|textebrut|texte_script)]','article');return false;"
                ><:bouton_choisir:></a>]
        </li>
 </BOUCLE_enfants>
index e204d6a..e606766 100644 (file)
@@ -11,7 +11,7 @@
                        title="<:bouton_choisir:> : [(#TITRE|attribut_html|couper{80})]"
                        class="choisir"
                        href="#"
-                       onclick="jQuery(this).item_pick('rubrique|#ID_RUBRIQUE','#ENV{name,id_item}','#TITRE','rubrique');return false;"
+                       onclick="jQuery(this).item_pick('rubrique|#ID_RUBRIQUE','#ENV{name,id_item}','[(#TITRE|textebrut|texte_script)]','rubrique');return false;"
                ><:bouton_choisir:></a>]
        </li>
 </BOUCLE_enfants>
index d92cc0d..f392b8b 100644 (file)
@@ -11,7 +11,7 @@
                        title="<:bouton_choisir:> : [(#TITRE|attribut_html|couper{80})]"
                        class="choisir"
                        href="#"
-                       onclick="jQuery(this).item_pick('article|#ID_ARTICLE','#ENV{name,id_item}','#TITRE','article');return false;"
+                       onclick="jQuery(this).item_pick('article|#ID_ARTICLE','#ENV{name,id_item}','[(#TITRE|textebrut|texte_script)]','article');return false;"
                ><:bouton_choisir:></a>]
        </li>
 </BOUCLE_enfants>
index 0f3666d..23c235a 100644 (file)
@@ -11,7 +11,7 @@
                        title="<:bouton_choisir:> : [(#TITRE|attribut_html|couper{80})]"
                        class="choisir"
                        href="#"
-                       onclick="jQuery(this).item_pick('rubrique|#ID_RUBRIQUE','#ENV{name,id_item}','#TITRE','rubrique');return false;"
+                       onclick="jQuery(this).item_pick('rubrique|#ID_RUBRIQUE','#ENV{name,id_item}','[(#TITRE|textebrut|texte_script)]','rubrique');return false;"
                ><:bouton_choisir:></a>]
        </li>
 </BOUCLE_enfants>
index 01929de..7c1d794 100644 (file)
@@ -12,8 +12,8 @@
        <a
                href="#"
                class="choisir_ici"
-               title="<:bouton_choisir:> : #GET{titre}"
-               onclick="jQuery(this).item_pick('[(#ENV{quoi}|objet_type)]|#ENV{id_objet}','#ENV{name,id_item}','#GET{titre}','#ENV{quoi}');return false;"
+               title="<:bouton_choisir:> : [(#GET{titre}|attribut_html)]"
+               onclick="jQuery(this).item_pick('[(#ENV{quoi}|objet_type)]|#ENV{id_objet}','#ENV{name,id_item}','[(#GET{titre}|textebrut|texte_script)]','#ENV{quoi}');return false;"
        ><span><:bouton_choisir:></span></a>
 ]
 
index cbf0473..998afaa 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index c5b2efa..c12d3ee 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -39,7 +39,7 @@ function informer_auteur($bof)
                $fauxalea2 = md5('fauxalea'.secret_du_site().$login.ceil(date('U')/86400));
 
                $row = array('login' => $login,
-                'cnx' => 0,
+                'cnx' => '0',
                 'logo' => "",
                 'alea_actuel' => substr_replace($fauxalea1,'.',24,0),
                 'alea_futur' => substr_replace($fauxalea2,'.',24,0)
index 3cece6e..3df5c88 100644 (file)
@@ -870,12 +870,13 @@ function parametre_url(url,c,v,sep,force_vide){
                if (p>0) a=url.substring(0,p);
                args = url.substring(p+1).split('&');
        }
-        else
-            a=url;
+       else
+               a=url;
        var regexp = new RegExp('^(' + c.replace('[]','\\[\\]') + '\\[?\\]?)(=.*)?$');
        var ajouts = [];
        var u = (typeof(v)!=='object')?encodeURIComponent(v):v;
        var na = [];
+       var v_read = null;
        // lire les variables et agir
        for(var n=0;n<args.length;n++){
                var val = args[n];
@@ -885,24 +886,34 @@ function parametre_url(url,c,v,sep,force_vide){
                var r=val.match(regexp);
                if (r && r.length){
                        if (v==null){
-                               return (r.length>2 && typeof r[2]!=='undefined')?r[2].substring(1):'';
+                               // c'est un tableau, on memorise les valeurs
+                               if (r[1].substr(-2) == '[]') {
+                                       if (!v_read) v_read = [];
+                                       v_read.push((r.length>2 && typeof r[2]!=='undefined')?r[2].substring(1):'');
+                               }
+                               // c'est un scalaire, on retourne direct
+                               else {
+                                       return (r.length>2 && typeof r[2]!=='undefined')?r[2].substring(1):'';
+                               }
                        }
                        // suppression
                        else if (!v.length) {
                        }
                        // Ajout. Pour une variable, remplacer au meme endroit,
                        // pour un tableau ce sera fait dans la prochaine boucle
-                       else if (r[1].substring(-2) != '[]') {
+                       else if (r[1].substr(-2) != '[]') {
                                na.push(r[1]+'='+u);
                                ajouts.push(r[1]);
                        }
-                       else na.push(args[n]);
+                       /* Pour les tableaux ont laisse tomber les valeurs de départ, on
+                       remplira Ã  l'étape suivante */
+                       // else na.push(args[n]);
                }
                else
                        na.push(args[n]);
        }
 
-       if (v==null) return v; // rien de trouve
+       if (v==null) return v_read; // rien de trouve ou un tableau
        // traiter les parametres pas encore trouves
        if (v || v.length || force_vide) {
                ajouts = "="+ajouts.join("=")+"=";
index e9619a8..70dddd6 100644 (file)
@@ -1,7 +1,7 @@
 /**
  * autosave plugin
  *
- * Copyright (c) 2009-2014 Fil (fil@rezo.net)
+ * Copyright (c) 2009-2016 Fil (fil@rezo.net)
  * Dual licensed under the MIT and GPL licenses:
  * http://www.opensource.org/licenses/mit-license.php
  * http://www.gnu.org/licenses/gpl.html
@@ -27,7 +27,7 @@
                                        var contenu = $(this).serialize();
                                        // ajoutons un timestamp
                                        var d=new Date();
-                                       contenu = contenu + "&__timestamp=" + d.getTime();
+                                       contenu = contenu + "&__timestamp=" + Math.round(d.getTime()/1000);
                                        $.post(opt.url, {
                                                'action': 'session',
                                                'var': 'autosave_' + $('input[name=autosave]', this).val(),
index c34d224..911b20d 100644 (file)
@@ -3,7 +3,7 @@
        num titre,1,
        id_article,1,
        points,-1
-}})
+}|defaut_tri_defined})
 ]<B_liste_art>
 #ANCRE_PAGINATION
 <div class="liste-objets articles">
                </tr>
        </thead>
        <tbody>
-       <BOUCLE_liste_art(ARTICLES){id_article?}{id_rubrique?}{id_mot?}{id_auteur?}{where?}{statut?}{recherche?}{tri #ENV{par,date},#GET{defaut_tri}}{par titre}{pagination #ENV{nb,10}}{!lang_select}>
+       <BOUCLE_liste_art(ARTICLES){id_article?}{id_rubrique?}{id_mot?}{id_auteur?}{where?}{statut?}{recherche?}{tri #ENV{par,date}|defaut_tri_par{#GET{defaut_tri}},#GET{defaut_tri}}{par titre}{pagination #ENV{nb,10}}{!lang_select}>
                [(#LANG|changer_typo)]
                <tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
                        <td class='statut'>[(#STATUT|puce_statut{article,#ID_ARTICLE,#ID_RUBRIQUE})]</td>
                        <td class='titre principale'>[(#LOGO_ARTICLE|image_reduire{20,26})]<a href="[(#ID_ARTICLE|generer_url_entite{article})]"
                                                                                                                                                                                                                                                                                                                title="<:info_numero_abbreviation|attribut_html:> #ID_ARTICLE">[(#RANG). ]#TITRE</a> [(#ENV{lang}|=={#LANG}|non) &#40;#LANG&#41;]</td>
                        <td class='auteur'><div class="inner"><BOUCLE_auteurs(AUTEURS){id_article}{', '}><a href="[(#ID_AUTEUR|generer_url_entite{auteur})]">#NOM</a></BOUCLE_auteurs></div></td>
-                       <td class='date secondaire'>[(#DATE|affdate_jourcourt)]</td>
+                       <td class='date secondaire'>[<span title="[(#DATE|heures_minutes)]">(#DATE|affdate_jourcourt)</span>]</td>
                        <td class='id'>[(#AUTORISER{modifier,article,#ID_ARTICLE}|?{
                                <a href="[(#URL_ECRIRE{article_edit,id_article=#ID_ARTICLE})]">#ID_ARTICLE</a>,
                                #ID_ARTICLE
diff --git a/www/prive/objets/liste/articles_fonctions.php b/www/prive/objets/liste/articles_fonctions.php
new file mode 100644 (file)
index 0000000..14f66dc
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+
+/***************************************************************************\
+ *  SPIP, Systeme de publication pour l'internet                           *
+ *                                                                         *
+ *  Copyright (c) 2001-2014                                                *
+ *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
+ *                                                                         *
+ *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
+ *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
+\***************************************************************************/
+
+if (!defined('_ECRIRE_INC_VERSION')) return;
+
+function defaut_tri_defined($defaut) {
+       if (!defined('_TRI_ARTICLES_RUBRIQUE')) {
+               return $defaut;
+       }
+
+       $sens = 1;
+       $tri = trim(_TRI_ARTICLES_RUBRIQUE);
+       $tri = explode(' ', $tri);
+       if (strncasecmp(end($tri), 'DESC', 4) == 0) {
+               $sens = -1;
+               array_pop($tri);
+       } elseif (strncasecmp(end($tri), 'ASC', 3) == 0) {
+               $sens = 1;
+               array_pop($tri);
+       }
+       $tri = implode(' ', $tri);
+       $tri = array($tri => $sens);
+       foreach ($defaut as $n => $s) {
+               if (!isset($tri[$n])) {
+                       $tri[$n] = $s;
+               }
+       }
+
+       return $tri;
+}
+
+function defaut_tri_par($par, $defaut){
+       if (!defined('_TRI_ARTICLES_RUBRIQUE'))
+               return $par;
+       $par = array_keys($defaut);
+       return reset($par);
+}
\ No newline at end of file
index ffe7af0..89bca2a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index cabf907..584608c 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index ffe7af0..89bca2a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 2a855c9..dcc68bc 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 832b52f..8bd75d7 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 6e5528e..c9822a2 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 1d8e1d2..a24afbf 100644 (file)
@@ -51,7 +51,7 @@ a:active.spip-admin-boutons,
        border-bottom:2px solid #FEFF7F !important;
        background:url(images/fond-inclure.png) repeat top left !important;
 }
-.inclure_blocs > h6 {background:#FEFF7F;margin:0;padding:2px;margin-bottom:2px;font-family: Courier, "Courier New", monospace;font-size: 0.8em;}
+.inclure_blocs > h6 {background:#FEFF7F;color:#000000;margin:0;padding:2px;margin-bottom:2px;font-family: Courier, "Courier New", monospace;font-size: 0.8em;}
 .inclure_blocs > h6:hover,
 .inclure_blocs.hover {
        background-color: #FDFF1F !important;
index dcd9319..b6bc56a 100644 (file)
@@ -4,4 +4,4 @@
 
 ]
 #SET{zajax,#VAL{var_zajax}|_request|replace{\W,''}}
-<INCLURE{fond=prive/squelettes/#GET{zajax}|concat{'/',#ENV{type-page}},ajax=#GET{zajax},env}>
\ No newline at end of file
+<INCLURE{fond=prive/squelettes/#GET{zajax}|concat{'/',#ENV{type-page}},ajax=#GET{zajax},espace_prive=1,env}>
\ No newline at end of file
index d770c45..9dc5b63 100644 (file)
@@ -8,4 +8,4 @@
 [(#REM) Si pas de title, celui ci sera mis automatiquement par f_title_auto
 en capturant le premier <h1> de la page]
 #SET{paramcss,#REM|parametres_css_prive}
-#PIPELINE{header_prive,#INCLURE{fond=prive/squelettes/inclure/head,titre,minipres,paramcss=#GET{paramcss}}}
\ No newline at end of file
+#PIPELINE{header_prive,#INCLURE{fond=prive/squelettes/inclure/head,titre,minipres,paramcss=#GET{paramcss},espace_prive}}
\ No newline at end of file
index 8892cc7..67316ab 100644 (file)
@@ -5,7 +5,7 @@
                <div class='largeur clearfix'>
                        <a href='#conteneur' onclick='return focus_zone("#conteneur")'>Aller au contenu</a> |
                        <a href='#bando_navigation' onclick='return focus_zone("#bando_navigation")'>Aller &agrave; la navigation</a> |
-                       <a href='#recherche' onclick='return focus_zone("#recherche")'>Aller &agrave; la recherche</a>
+                       <a href='#recherche' onclick='return focus_zone("#rapides .formulaire_recherche")'>Aller &agrave; la recherche</a>
                </div>
        </div>
 
index b9dd987..7520bd8 100644 (file)
@@ -8,7 +8,7 @@
 <!--[if IE 9 ]>    <html class="[(#LANG_DIR)][ (#LANG)] no-js ie ie9 lte9" xmlns="http://www.w3.org/1999/xhtml" xml:lang="#LANG" lang="#LANG" dir="#LANG_DIR"> <![endif]-->
 <!--[if (gt IE 9)|!(IE)]><!--> <html class="[(#LANG_DIR)][ (#LANG)] no-js" xmlns="http://www.w3.org/1999/xhtml" xml:lang="#LANG" lang="#LANG" dir="#LANG_DIR"> <!--<![endif]-->
 <head>
-<INCLURE{fond=prive/squelettes/head/#ENV{type-page},env}>
+<INCLURE{fond=prive/squelettes/head/#ENV{type-page},env,espace_prive=1}>
 </head>
-<INCLURE{fond=prive/squelettes/body,env}>
+<INCLURE{fond=prive/squelettes/body,env,espace_prive=1}>
 </html>
index 6198bc2..33ebde8 100644 (file)
@@ -70,7 +70,7 @@ h3.titrem {position:relative;}
 
 .formulaire_spip li label,
 .formulaire_spip li.gauche label {
-       color: #4444;
+       color: #444;
        width: 114px;
        float:#ENV{left};
        margin-#ENV{left}:-130px;
@@ -312,6 +312,7 @@ input[type="submit"],input[type="reset"] {font-size: inherit;}
 .formulaire_traduire .liste-objets {margin-top:0;margin-bottom:0;}
 .formulaire_traduire .liste-objets .first_row {display:none;}
 .formulaire_traduire .supprimer_trad {float:#ENV{right};}
+.formulaire_traduire .voir_traductions {overflow: visible;}
 
 /* les boutons action */
 form.bouton_action_post, form.bouton_action_post div {display:inline;}
@@ -322,4 +323,6 @@ form.bouton_action_post.link button.submit, .formulaire_spip .boutons input.link
 form.bouton_action_post.link button.submit:hover, .formulaire_spip .boutons input.link:hover,.formulaire_spip button.link:hover {border-bottom:1px solid;padding:0;}
 
 /* formulaire_editer_logo */
-.formulaire_editer_logo .titrem,.formulaire_editer_logo .ajouter_survol {text-transform: uppercase;}
\ No newline at end of file
+.formulaire_editer_logo .titrem,.formulaire_editer_logo .ajouter_survol {text-transform: uppercase;}
+/* Date picker : passer par dessus des icones et du menu haut */
+.ui-datepicker { z-index: 1001 !important;}
index cbddc50..c0d16c1 100644 (file)
 .onglets_simple ul {list-style:none;margin-#ENV{left}:1px;padding:0;}
 .onglets_simple ul li {float:#ENV{left};padding:0;margin:0;margin-bottom:-1px;}
 
-.onglets_simple ul li strong,.onglets_simple ul li a {display:block;float:#ENV{left};padding:4px 7px;border:1px solid #ENV{foncee};margin-#ENV{left}:5px;background-color:#eee;background-position:center left;background-repeat:no-repeat;}
+.onglets_simple ul li strong,.onglets_simple ul li a {display:block;float:#ENV{left};padding:4px 7px;border:1px solid #ENV{foncee};margin-#ENV{left}:5px;background-color:#eee;background-position:center #ENV{left};background-repeat:no-repeat;}
 .onglets_simple ul li strong,.onglets_simple ul li a:hover {background-color:#f8f7f3;}
 .onglets_simple ul li a:hover {cursor:hand;cursor:pointer;}
 .onglets_simple ul li strong {border-bottom:1px solid #f8f7f3;color:#555;}
index b1fc774..25cf164 100644 (file)
@@ -87,7 +87,7 @@ strong, b { font-weight: bold; }
 em, i { font-style: italic; }
 small, .small { font-size: 80%; }
 big, .big { font-size: 150%; }
-abbr[title], acronym[title] { border-bottom: .1em dotted; cursor: help; }
+abbr[title], acronym[title] { border-bottom: .1em dotted; text-decoration: none; cursor: help; }
 dfn { font-weight: bold; font-style: italic; }
 del { text-decoration: line-through; }
 ins { text-decoration: none; background-color: #FFC; }
index 20c2d5b..d22dd83 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index d3f563f..be26771 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 5fb3267..2f5908a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index c00b0b5..f5db8f8 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 48ba0ea..7cdf02a 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
@@ -28,10 +28,12 @@ function message_oubli($email, $param)
                include_spip('action/inscrire_auteur');
                $cookie = auteur_attribuer_jeton($r[1]['id_auteur']);
 
+               // l'url_reset doit etre une URL de confiance, on force donc un url_absolue sur adresse_site
+               include_spip('inc/filtres');
                $msg = recuperer_fond(
                        "modeles/mail_oubli",
                        array(
-                               'url_reset'=>generer_url_public('spip_pass',"$param=$cookie", true, false)
+                               'url_reset' => url_absolue(generer_url_public('spip_pass', "$param=$cookie"), $GLOBALS['meta']['adresse_site'] . '/')
                        )
                );
                include_spip("inc/notifications");
index 5d02a1e..c501605 100644 (file)
@@ -3,7 +3,7 @@
 /***************************************************************************\
  *  SPIP, Systeme de publication pour l'internet                           *
  *                                                                         *
- *  Copyright (c) 2001-2014                                                *
+ *  Copyright (c) 2001-2016                                                *
  *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
  *                                                                         *
  *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
index 6339881..f7dc407 100644 (file)
@@ -1,7 +1,7 @@
 <BOUCLE_un_article(ARTICLES){id_article}>
        <item[ xml:lang="(#LANG)"]>
                <title>[(#TITRE|supprimer_tags|texte_backend)]</title>
-               <link>[(#URL_ARTICLE|url_absolue|texte_backend)]</link>
+               <link>[(#URL_ARTICLE|url_absolue)]</link>
                [<guid isPermaLink="true">(#URL_ARTICLE|url_absolue|texte_backend)</guid>]
                [<dc:date>(#DATE|date_iso)</dc:date>]
                <dc:format>text/html</dc:format>
        sous forme de "microformats"
 
 ]<BOUCLE_rubrique_mf(RUBRIQUES){id_rubrique}>-
-[&lt;a href="[(#URL_RUBRIQUE|url_absolue|texte_backend)]" rel="directory"&gt;(#TITRE|supprimer_tags|texte_backend)&lt;/a&gt;]
+[&lt;a href="[(#URL_RUBRIQUE|url_absolue)]" rel="directory"&gt;(#TITRE|supprimer_tags|texte_backend)&lt;/a&gt;]
 </BOUCLE_rubrique_mf><B_mots_mf>
 / <BOUCLE_mots_mf(MOTS){id_article}{", "}>
-[&lt;a href="[(#URL_MOT|url_absolue|texte_backend)]" rel="tag"&gt;(#TITRE|texte_backend)&lt;/a&gt;]</BOUCLE_mots_mf>
+[&lt;a href="[(#URL_MOT|url_absolue)]" rel="tag"&gt;(#TITRE|texte_backend)&lt;/a&gt;]</BOUCLE_mots_mf>
 
                </description>
 
@@ -37,7 +37,7 @@
                ][&lt;div class='rss_chapo'&gt;(#CHAPO|texte_backend)&lt;/div&gt;
                ][&lt;div class='rss_texte'&gt;(#TEXTE|
                        image_reduire{500,0}|texte_backend)&lt;/div&gt;
-               ][&lt;div class="hyperlien"&gt;<:voir_en_ligne|html2unicode:> : &lt;a href="(#URL_SITE|texte_backend)" class="spip_out"&gt;[(#NOM_SITE|sinon{[(#URL_SITE|couper{80})]}|texte_backend)]&lt;/a&gt;&lt;/div&gt;
+               ][&lt;div class="hyperlien"&gt;<:voir_en_ligne|html2unicode:> : &lt;a href="(#URL_SITE)" class="spip_out"&gt;[(#NOM_SITE|sinon{[(#URL_SITE|couper{80})]}|texte_backend)]&lt;/a&gt;&lt;/div&gt;
                ][&lt;hr /&gt;
                &lt;div class='rss_notes'&gt;(#NOTES|texte_backend)&lt;/div&gt;
                ][&lt;div class='rss_ps'&gt;(#PS|texte_backend)&lt;/div&gt;]
@@ -48,7 +48,7 @@
        Le bloc qui suit diffuse l'adresse des documents associes aux articles ;
        ajouter par ex. {extension=mp3} pour limiter a un certain type de document.
 ]              <BOUCLE_documents(DOCUMENTS){id_article}{mode=document}{doublons}>[
-               <enclosure url="(#URL_DOCUMENT|url_absolue|texte_backend|unique)"[ length="(#TAILLE)"][ type="(#MIME_TYPE)"] />]
+               <enclosure url="(#URL_DOCUMENT|url_absolue|unique)"[ length="(#TAILLE)"][ type="(#MIME_TYPE)"] />]
                </BOUCLE_documents>
 
        </item>
index b637143..8a90474 100644 (file)
@@ -7,6 +7,7 @@
 
 User-agent: *
 Allow:    /local/cache-css/
+Allow:    /local/cache-js/
 Disallow: /local/
 Disallow: /ecrire/
 Disallow: /plugins-dist/
@@ -17,4 +18,4 @@ Disallow: /squelettes-dist/
 Disallow: /squelettes/
 Crawl-delay: 1
 
-Sitemap: #URL_SITE_SPIP/sitemap.xml
\ No newline at end of file
+Sitemap: #URL_SITE_SPIP/sitemap.xml
index 0111995..363566e 100644 (file)
@@ -1,10 +1,10 @@
 <svn_revision>
 <text_version>
-Origine: svn://trac.rezo.net/spip/tags/spip-3.0.20
-Revision: 22255
-Dernier commit: 2015-06-23 14:49:44 +0200 
+Origine: svn://trac.rezo.net/spip/tags/spip-3.0.25
+Revision: 23448
+Dernier commit: 2017-03-06 11:38:50 +0100 
 </text_version>
-<origine>svn://trac.rezo.net/spip/tags/spip-3.0.20</origine>
-<revision>22255</revision>
-<commit>2015-06-23 14:49:44 +0200 </commit>
+<origine>svn://trac.rezo.net/spip/tags/spip-3.0.25</origine>
+<revision>23448</revision>
+<commit>2017-03-06 11:38:50 +0100 </commit>
 </svn_revision>
\ No newline at end of file