aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/phpCS.yml22
-rw-r--r--_test/core/phpQuery-onefile.php4
-rw-r--r--_test/phpcs.xml24
-rw-r--r--_test/phpcs_MigrationAdjustments.xml103
-rw-r--r--_test/tests/general/general_html.test.php118
-rw-r--r--_test/tests/inc/Extension/Event.test.php43
-rw-r--r--_test/tests/inc/PluginUtils.test.php23
-rw-r--r--_test/tests/inc/XmlRpcServer.test.php69
-rw-r--r--_test/tests/inc/common_basicinfo.test.php17
-rw-r--r--_test/tests/inc/common_clientip.test.php95
-rw-r--r--_test/tests/inc/common_getGoogleQuery.test.php38
-rw-r--r--_test/tests/inc/indexer_rename.test.php2
-rw-r--r--_test/tests/lib/exe/css_css_compress.test.php15
-rw-r--r--composer.lock101
-rw-r--r--conf/dokuwiki.php8
-rw-r--r--conf/license.php14
-rw-r--r--data/pages/wiki/dokuwiki.txt14
-rw-r--r--data/pages/wiki/syntax.txt2
-rw-r--r--data/pages/wiki/welcome.txt2
-rw-r--r--inc/Action/Resendpwd.php4
-rw-r--r--inc/Ajax.php6
-rw-r--r--inc/Cache/Cache.php15
-rw-r--r--inc/Cache/CacheInstructions.php2
-rw-r--r--inc/Debug/DebugHelper.php42
-rw-r--r--inc/Extension/Event.php7
-rw-r--r--inc/Extension/SyntaxPlugin.php4
-rw-r--r--inc/Form/LegacyForm.php2
-rw-r--r--inc/IXR_Library.php3
-rw-r--r--inc/JpegMeta.php76
-rw-r--r--inc/Mailer.class.php14
-rw-r--r--inc/Menu/Item/AbstractItem.php2
-rw-r--r--inc/Parsing/Parser.php16
-rw-r--r--inc/PassHash.php44
-rw-r--r--inc/Remote/ApiCore.php2
-rw-r--r--inc/Remote/XmlRpcServer.php4
-rw-r--r--inc/Search/Indexer.php1214
-rw-r--r--inc/Subscriptions/MediaSubscriptionSender.php5
-rw-r--r--inc/Subscriptions/PageSubscriptionSender.php5
-rw-r--r--inc/Utf8/Clean.php4
-rw-r--r--inc/Utf8/Unicode.php2
-rw-r--r--inc/auth.php22
-rw-r--r--inc/changelog.php12
-rw-r--r--inc/cli.php4
-rw-r--r--inc/common.php76
-rw-r--r--inc/deprecated.php5
-rw-r--r--inc/fulltext.php12
-rw-r--r--inc/html.php12
-rw-r--r--inc/indexer.php1214
-rw-r--r--inc/init.php6
-rw-r--r--inc/io.php2
-rw-r--r--inc/lang/cs/lang.php1
-rw-r--r--inc/lang/de/lang.php2
-rw-r--r--inc/lang/en/mailtext.txt19
-rw-r--r--inc/lang/en/subscr_single.txt10
-rw-r--r--inc/lang/es/lang.php2
-rw-r--r--inc/lang/fi/lang.php79
-rw-r--r--inc/lang/fr/lang.php6
-rw-r--r--inc/lang/id/lang.php77
-rw-r--r--inc/lang/ja/lang.php14
-rw-r--r--inc/lang/ja/locked.txt2
-rw-r--r--inc/lang/ja/mailtext.txt18
-rw-r--r--inc/lang/ja/preview.txt2
-rw-r--r--inc/lang/ja/registermail.txt14
-rw-r--r--inc/lang/ja/resetpwd.txt2
-rw-r--r--inc/lang/ja/subscr_digest.txt5
-rw-r--r--inc/lang/ja/subscr_list.txt6
-rw-r--r--inc/lang/ja/subscr_single.txt15
-rw-r--r--inc/lang/ja/updateprofile.txt2
-rw-r--r--inc/lang/ja/uploadmail.txt17
-rw-r--r--inc/lang/nl/lang.php1
-rw-r--r--inc/lang/no/lang.php3
-rw-r--r--inc/lang/pt-br/lang.php1
-rw-r--r--inc/lang/pt/lang.php2
-rw-r--r--inc/lang/ru/lang.php6
-rw-r--r--inc/lang/ru/uploadmail.txt2
-rw-r--r--inc/lang/sk/lang.php1
-rw-r--r--inc/lang/sr/admin.txt2
-rw-r--r--inc/mail.php4
-rw-r--r--inc/media.php10
-rw-r--r--inc/pageutils.php4
-rw-r--r--inc/parser/handler.php10
-rw-r--r--inc/parser/metadata.php2
-rw-r--r--inc/parser/parser.php44
-rw-r--r--inc/parser/renderer.php4
-rw-r--r--inc/parser/xhtml.php4
-rw-r--r--inc/pluginutils.php28
-rw-r--r--inc/template.php23
-rw-r--r--install.php4
-rw-r--r--lib/exe/css.php41
-rw-r--r--lib/exe/js.php26
-rw-r--r--lib/images/fileicons/index.php2
-rw-r--r--lib/images/smileys/index.php2
-rw-r--r--lib/plugins/acl/admin.php12
-rw-r--r--lib/plugins/acl/lang/fi/lang.php5
-rw-r--r--lib/plugins/acl/lang/id/lang.php2
-rw-r--r--lib/plugins/acl/script.js4
-rw-r--r--lib/plugins/authad/lang/de/settings.php2
-rw-r--r--lib/plugins/authad/lang/fi/lang.php2
-rw-r--r--lib/plugins/authad/lang/fi/settings.php2
-rw-r--r--lib/plugins/authad/lang/ja/settings.php1
-rw-r--r--lib/plugins/authldap/lang/cs/settings.php2
-rw-r--r--lib/plugins/authldap/lang/de/settings.php2
-rw-r--r--lib/plugins/authldap/lang/es/settings.php3
-rw-r--r--lib/plugins/authldap/lang/fi/settings.php2
-rw-r--r--lib/plugins/authldap/lang/ja/settings.php1
-rw-r--r--lib/plugins/authldap/lang/nl/settings.php2
-rw-r--r--lib/plugins/authldap/lang/pt-br/settings.php2
-rw-r--r--lib/plugins/authplain/lang/fi/lang.php2
-rw-r--r--lib/plugins/authplain/lang/id/lang.php3
-rw-r--r--lib/plugins/config/core/Setting/SettingSepchar.php2
-rw-r--r--lib/plugins/config/lang/cs/lang.php5
-rw-r--r--lib/plugins/config/lang/de/lang.php6
-rw-r--r--lib/plugins/config/lang/en/lang.php4
-rw-r--r--lib/plugins/config/lang/es/lang.php2
-rw-r--r--lib/plugins/config/lang/fi/lang.php8
-rw-r--r--lib/plugins/config/lang/fr/lang.php4
-rw-r--r--lib/plugins/config/lang/id/intro.txt6
-rw-r--r--lib/plugins/config/lang/ja/lang.php2
-rw-r--r--lib/plugins/config/lang/nl/lang.php3
-rw-r--r--lib/plugins/config/lang/no/lang.php2
-rw-r--r--lib/plugins/config/lang/pt-br/lang.php3
-rw-r--r--lib/plugins/config/lang/pt/lang.php4
-rw-r--r--lib/plugins/config/lang/ru/lang.php3
-rw-r--r--lib/plugins/config/lang/sk/lang.php5
-rw-r--r--lib/plugins/config/settings/config.metadata.php8
-rw-r--r--lib/plugins/extension/action.php5
-rw-r--r--lib/plugins/extension/admin.php69
-rw-r--r--lib/plugins/extension/helper/extension.php55
-rw-r--r--lib/plugins/extension/helper/gui.php78
-rw-r--r--lib/plugins/extension/helper/list.php298
-rw-r--r--lib/plugins/extension/lang/de-informal/lang.php10
-rw-r--r--lib/plugins/extension/lang/de/lang.php10
-rw-r--r--lib/plugins/extension/lang/fi/lang.php2
-rw-r--r--lib/plugins/extension/lang/pt/lang.php2
-rw-r--r--lib/plugins/extension/script.js14
-rw-r--r--lib/plugins/info/syntax.php2
-rw-r--r--lib/plugins/popularity/lang/fi/lang.php2
-rw-r--r--lib/plugins/revert/lang/cs/lang.php1
-rw-r--r--lib/plugins/revert/lang/fi/lang.php5
-rw-r--r--lib/plugins/revert/lang/no/lang.php2
-rw-r--r--lib/plugins/styling/lang/sk/lang.php5
-rw-r--r--lib/plugins/styling/script.js2
-rw-r--r--lib/plugins/usermanager/_test/csv_import.test.php45
-rw-r--r--lib/plugins/usermanager/lang/cs/lang.php3
-rw-r--r--lib/plugins/usermanager/lang/fi/lang.php5
-rw-r--r--lib/plugins/usermanager/lang/id/lang.php2
-rw-r--r--lib/plugins/usermanager/lang/pt/lang.php2
-rw-r--r--lib/plugins/usermanager/lang/sk/lang.php2
-rw-r--r--lib/plugins/usermanager/script.js2
-rw-r--r--lib/scripts/behaviour.js24
-rw-r--r--lib/scripts/edit.js9
-rw-r--r--lib/scripts/editor.js4
-rw-r--r--lib/scripts/fileuploaderextended.js2
-rw-r--r--lib/scripts/linkwiz.js2
-rw-r--r--lib/scripts/media.js8
-rw-r--r--lib/scripts/page.js10
-rw-r--r--lib/scripts/qsearch.js4
-rw-r--r--lib/scripts/script.js2
-rw-r--r--lib/scripts/search.js2
-rw-r--r--lib/tpl/dokuwiki/lang/sk/lang.php2
-rw-r--r--lib/tpl/dokuwiki/main.php1
-rw-r--r--lib/tpl/dokuwiki/script.js11
-rw-r--r--lib/tpl/index.php2
-rw-r--r--vendor/composer/ClassLoader.php8
-rw-r--r--vendor/composer/autoload_files.php1
-rw-r--r--vendor/composer/autoload_static.php1
-rw-r--r--vendor/composer/installed.json435
-rw-r--r--vendor/geshi/geshi/.gitignore6
-rw-r--r--vendor/geshi/geshi/CHANGELOG20
-rw-r--r--vendor/geshi/geshi/README.md2
-rw-r--r--vendor/geshi/geshi/THANKS3
-rw-r--r--vendor/geshi/geshi/build.xml4
-rw-r--r--vendor/geshi/geshi/composer.json2
-rw-r--r--vendor/geshi/geshi/src/geshi.php45
-rw-r--r--vendor/geshi/geshi/src/geshi/4cs.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/6502acme.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/6502kickass.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/6502tasm.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/68000devpac.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/abap.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/actionscript.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/actionscript3.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/ada.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/aimms.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/algol68.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/apache.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/applescript.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/apt_sources.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/arm.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/asm.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/asp.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/asymptote.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/autoconf.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/autohotkey.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/autoit.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/avisynth.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/awk.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/bascomavr.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/bash.php25
-rw-r--r--vendor/geshi/geshi/src/geshi/basic4gl.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/batch.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/bf.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/biblatex.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/bibtex.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/blitzbasic.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/bnf.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/boo.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/c.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/c_loadrunner.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/c_mac.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/c_winapi.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/caddcl.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/cadlisp.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/ceylon.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/cfdg.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/cfm.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/chaiscript.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/chapel.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/cil.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/clojure.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/cmake.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/cobol.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/coffeescript.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/cpp-qt.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/cpp-winapi.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/cpp.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/csharp.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/css.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/cuesheet.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/d.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/dart.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/dcl.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/dcpu16.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/dcs.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/delphi.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/diff.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/div.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/dos.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/dot.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/e.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/ecmascript.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/eiffel.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/email.php60
-rw-r--r--vendor/geshi/geshi/src/geshi/epc.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/erlang.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/euphoria.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/ezt.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/f1.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/falcon.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/fo.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/fortran.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/freebasic.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/freeswitch.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/fsharp.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/gambas.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/gdb.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/genero.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/genie.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/gettext.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/glsl.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/gml.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/gnuplot.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/go.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/groovy.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/gwbasic.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/haskell.php16
-rw-r--r--vendor/geshi/geshi/src/geshi/haxe.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/hicest.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/hq9plus.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/html4strict.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/html5.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/icon.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/idl.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/ini.php4
-rw-r--r--vendor/geshi/geshi/src/geshi/inno.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/intercal.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/io.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/ispfpanel.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/j.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/java.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/java5.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/javascript.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/jcl.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/jquery.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/julia.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/kixtart.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/klonec.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/klonecpp.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/kotlin.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/latex.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/lb.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/ldif.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/lisp.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/llvm.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/locobasic.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/logtalk.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/lolcode.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/lotusformulas.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/lotusscript.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/lscript.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/lsl2.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/lua.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/m68k.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/magiksf.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/make.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/mapbasic.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/mathematica.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/matlab.php45
-rw-r--r--vendor/geshi/geshi/src/geshi/mercury.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/metapost.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/mirc.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/mk-61.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/mmix.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/modula2.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/modula3.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/mpasm.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/mxml.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/mysql.php20
-rw-r--r--vendor/geshi/geshi/src/geshi/nagios.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/netrexx.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/newlisp.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/nginx.php9
-rw-r--r--vendor/geshi/geshi/src/geshi/nimrod.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/nsis.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/oberon2.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/objc.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/objeck.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/ocaml-brief.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/ocaml.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/octave.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/oobas.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/oorexx.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/oracle11.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/oracle8.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/oxygene.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/oz.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/parasail.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/parigp.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/pascal.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/pcre.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/per.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/perl.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/perl6.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/pf.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/phix.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/php-brief.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/php.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/pic16.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/pike.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/pixelbender.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/pli.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/plsql.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/postgresql.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/postscript.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/povray.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/powerbuilder.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/powershell.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/proftpd.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/progress.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/prolog.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/properties.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/providex.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/purebasic.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/pycon.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/pys60.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/python.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/q.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/qbasic.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/qml.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/racket.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/rails.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/rbs.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/rebol.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/reg.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/rexx.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/robots.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/roff.php510
-rw-r--r--vendor/geshi/geshi/src/geshi/rpmspec.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/rsplus.php4
-rw-r--r--vendor/geshi/geshi/src/geshi/ruby.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/rust.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/sas.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/sass.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/scala.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/scheme.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/scilab.php4
-rw-r--r--vendor/geshi/geshi/src/geshi/scl.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/sdlbasic.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/smalltalk.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/smarty.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/spark.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/sparql.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/sql.php6
-rw-r--r--vendor/geshi/geshi/src/geshi/sshconfig.php165
-rw-r--r--vendor/geshi/geshi/src/geshi/standardml.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/stonescript.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/swift.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/systemverilog.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/tcl.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/tclegg.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/teraterm.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/texgraph.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/text.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/thinbasic.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/tsql.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/twig.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/typoscript.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/unicon.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/upc.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/urbi.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/uscript.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/vala.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/vb.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/vbnet.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/vbscript.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/vedit.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/verilog.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/vhdl.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/vim.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/visualfoxpro.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/visualprolog.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/whitespace.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/whois.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/winbatch.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/wolfram.php967
-rw-r--r--vendor/geshi/geshi/src/geshi/xbasic.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/xml.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/xojo.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/xorg_conf.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/xpp.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/yaml.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/z80.php2
-rw-r--r--vendor/geshi/geshi/src/geshi/zxbasic.php2
-rw-r--r--vendor/marcusschwarz/lesserphp/lessc.inc.php8
-rw-r--r--vendor/openpsa/universalfeedcreator/composer.json5
-rw-r--r--vendor/openpsa/universalfeedcreator/lib/Creator/AtomCreator03.php1
-rw-r--r--vendor/openpsa/universalfeedcreator/lib/Creator/AtomCreator10.php15
-rw-r--r--vendor/openpsa/universalfeedcreator/lib/Creator/FeedCreator.php1
-rw-r--r--vendor/openpsa/universalfeedcreator/lib/Creator/GPXCreator.php1
-rw-r--r--vendor/openpsa/universalfeedcreator/lib/Creator/HTMLCreator.php1
-rw-r--r--vendor/openpsa/universalfeedcreator/lib/Creator/JSCreator.php1
-rw-r--r--vendor/openpsa/universalfeedcreator/lib/Creator/KMLCreator.php1
-rw-r--r--vendor/openpsa/universalfeedcreator/lib/Creator/MBOXCreator.php1
-rw-r--r--vendor/openpsa/universalfeedcreator/lib/Creator/OPMLCreator.php1
-rw-r--r--vendor/openpsa/universalfeedcreator/lib/Creator/PHPCreator.php1
-rw-r--r--vendor/openpsa/universalfeedcreator/lib/Creator/PIECreator01.php1
-rw-r--r--vendor/openpsa/universalfeedcreator/lib/Creator/RSSCreator091.php1
-rw-r--r--vendor/openpsa/universalfeedcreator/lib/Creator/RSSCreator10.php1
-rw-r--r--vendor/openpsa/universalfeedcreator/lib/Creator/RSSCreator20.php1
-rw-r--r--vendor/openpsa/universalfeedcreator/lib/Element/FeedDate.php8
-rw-r--r--vendor/openpsa/universalfeedcreator/lib/Element/FeedHtmlField.php1
-rw-r--r--vendor/openpsa/universalfeedcreator/lib/Element/FeedImage.php1
-rw-r--r--vendor/openpsa/universalfeedcreator/lib/Element/FeedItem.php1
-rw-r--r--vendor/openpsa/universalfeedcreator/lib/Element/HtmlDescribable.php2
-rw-r--r--vendor/openpsa/universalfeedcreator/lib/UniversalFeedCreator.php11
-rw-r--r--vendor/openpsa/universalfeedcreator/lib/constants.php10
-rw-r--r--vendor/paragonie/random_compat/composer.json1
-rw-r--r--vendor/paragonie/random_compat/lib/byte_safe_strings.php34
-rw-r--r--vendor/paragonie/random_compat/lib/cast_to_int.php16
-rw-r--r--vendor/paragonie/random_compat/lib/error_polyfill.php14
-rw-r--r--vendor/paragonie/random_compat/lib/random.php26
-rw-r--r--vendor/paragonie/random_compat/lib/random_bytes_com_dotnet.php23
-rw-r--r--vendor/paragonie/random_compat/lib/random_bytes_dev_urandom.php79
-rw-r--r--vendor/paragonie/random_compat/lib/random_bytes_libsodium.php17
-rw-r--r--vendor/paragonie/random_compat/lib/random_bytes_libsodium_legacy.php13
-rw-r--r--vendor/paragonie/random_compat/lib/random_bytes_mcrypt.php20
-rw-r--r--vendor/paragonie/random_compat/lib/random_int.php16
-rw-r--r--vendor/paragonie/random_compat/psalm-autoload.php9
-rw-r--r--vendor/paragonie/random_compat/psalm.xml18
-rw-r--r--vendor/phpseclib/phpseclib/BACKERS.md7
-rw-r--r--vendor/phpseclib/phpseclib/LICENSE5
-rw-r--r--vendor/phpseclib/phpseclib/README.md19
-rw-r--r--vendor/phpseclib/phpseclib/appveyor.yml27
-rw-r--r--vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php18
-rw-r--r--vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php121
-rw-r--r--vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php174
-rw-r--r--vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php171
-rw-r--r--vendor/phpseclib/phpseclib/phpseclib/File/X509.php58
-rw-r--r--vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php30
-rw-r--r--vendor/phpseclib/phpseclib/phpseclib/Net/SCP.php5
-rw-r--r--vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php95
-rw-r--r--vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php788
-rw-r--r--vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent.php28
-rw-r--r--vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent/Identity.php80
-rw-r--r--vendor/simplepie/simplepie/composer.json19
-rw-r--r--vendor/simplepie/simplepie/idn/idna_convert.class.php36
-rwxr-xr-xvendor/simplepie/simplepie/library/SimplePie.php168
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Author.php19
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Cache/File.php2
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Cache/MySQL.php28
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Cache/Redis.php6
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Caption.php31
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Content/Type/Sniffer.php37
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Copyright.php13
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Credit.php19
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Decode/HTML/Entities.php13
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Enclosure.php223
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/File.php2
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php16
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/IRI.php151
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Item.php137
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Locator.php31
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Misc.php55
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Net/IPv6.php18
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Parse/Date.php73
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Parser.php112
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Rating.php12
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Restriction.php18
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Sanitize.php2
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/Source.php97
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php12
-rw-r--r--vendor/simplepie/simplepie/library/SimplePie/gzdecode.php12
-rw-r--r--vendor/splitbrain/php-archive/src/Archive.php29
-rw-r--r--vendor/splitbrain/php-archive/src/ArchiveCorruptedException.php10
-rw-r--r--vendor/splitbrain/php-archive/src/ArchiveIOException.php10
-rw-r--r--vendor/splitbrain/php-archive/src/ArchiveIllegalCompressionException.php10
-rw-r--r--vendor/splitbrain/php-archive/src/FileInfo.php4
-rw-r--r--vendor/splitbrain/php-archive/src/FileInfoException.php10
-rw-r--r--vendor/splitbrain/php-archive/src/Tar.php53
-rw-r--r--vendor/splitbrain/php-archive/src/Zip.php22
-rw-r--r--vendor/splitbrain/php-cli/src/CLI.php66
-rw-r--r--vendor/splitbrain/php-cli/src/Exception.php2
-rw-r--r--vendor/splitbrain/php-cli/src/TableFormatter.php31
523 files changed, 7384 insertions, 3959 deletions
diff --git a/.github/workflows/phpCS.yml b/.github/workflows/phpCS.yml
new file mode 100644
index 000000000..fd46c4682
--- /dev/null
+++ b/.github/workflows/phpCS.yml
@@ -0,0 +1,22 @@
+name: PHP Code Style
+
+on: [push, pull_request]
+
+jobs:
+ phpcs:
+ name: PHP CodeSniffer
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v1
+
+ - name: Setup PHP
+ uses: shivammathur/setup-php@7b8bf7af6a42e028cbcccf623bb8499b4d6edf02
+ with:
+ php-version: '7.4'
+ coverage: none
+
+ - name: Download PHPCS
+ run: wget https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar
+
+ - name: run PHP codesniffer
+ run: php phpcs.phar -v --standard=_test/phpcs_MigrationAdjustments.xml
diff --git a/_test/core/phpQuery-onefile.php b/_test/core/phpQuery-onefile.php
index 115724853..96083f9c2 100644
--- a/_test/core/phpQuery-onefile.php
+++ b/_test/core/phpQuery-onefile.php
@@ -2153,7 +2153,7 @@ class phpQueryObject
if (! $param)
break;
// nth-child(n+b) to nth-child(1n+b)
- if ($param{0} == 'n')
+ if ($param[0] == 'n')
$param = '1'.$param;
// :nth-child(index/even/odd/equation)
if ($param == 'even' || $param == 'odd')
@@ -2168,7 +2168,7 @@ class phpQueryObject
return null;'),
new CallbackParam(), $param
);
- else if (mb_strlen($param) > 1 && $param{1} == 'n')
+ else if (mb_strlen($param) > 1 && $param[1] == 'n')
// an+b
$mapped = $this->map(
create_function('$node, $param',
diff --git a/_test/phpcs.xml b/_test/phpcs.xml
index 4f38195a3..8f0d4dd24 100644
--- a/_test/phpcs.xml
+++ b/_test/phpcs.xml
@@ -34,9 +34,9 @@
<exclude-pattern>*/inc/cli.php</exclude-pattern>
<exclude-pattern>*/inc/parser/*</exclude-pattern>
- <!-- rules on top of PSR-2 -->
- <rule ref="PSR2">
- <!-- the following rule is not in PSR-2 and breaks the guardian pattern -->
+ <!-- rules on top of PSR-12 -->
+ <rule ref="PSR12">
+ <!-- This rule breaks the single line guard pattern that we prefer to keep using -->
<exclude name="Generic.ControlStructures.InlineControlStructure.NotAllowed"/>
<!-- we have lots of legacy classes without name spaces -->
@@ -77,22 +77,4 @@
<exclude-pattern>*/inc/Extension/PluginInterface.php</exclude-pattern>
<exclude-pattern>*/inc/Extension/PluginTrait.php</exclude-pattern>
</rule>
-
- <!-- for now we mix declarations and execution here (mostly for defines) -->
- <rule ref="PSR1.Files.SideEffects">
- <exclude-pattern>*/index.php</exclude-pattern>
- <exclude-pattern>*/inc/parserutils.php</exclude-pattern>
- <exclude-pattern>*/inc/mail.php</exclude-pattern>
- <exclude-pattern>*/inc/init.php</exclude-pattern>
- <exclude-pattern>*/inc/fulltext.php</exclude-pattern>
- <exclude-pattern>*/inc/Mailer.class.php</exclude-pattern>
- <exclude-pattern>*/doku.php</exclude-pattern>
- <exclude-pattern>*/install.php</exclude-pattern>
- <exclude-pattern>*/inc/utf8.php</exclude-pattern>
- <exclude-pattern>*/feed.php</exclude-pattern>
- <exclude-pattern>*/inc/load.php</exclude-pattern>
- <exclude-pattern>*/bin/*.php</exclude-pattern>
- <exclude-pattern>*/lib/exe/*.php</exclude-pattern>
- </rule>
-
</ruleset>
diff --git a/_test/phpcs_MigrationAdjustments.xml b/_test/phpcs_MigrationAdjustments.xml
new file mode 100644
index 000000000..d9d11832b
--- /dev/null
+++ b/_test/phpcs_MigrationAdjustments.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0"?>
+<ruleset name="Migration Adjustments for the DokuWiki Coding Standard Standard" namespace="DokuWiki\CS\Standard">
+ <description>These are exceptions to the Coding Standard used for DokuWiki that are intended to be removed over time.</description>
+
+ <!-- rules on top of PSR-12 -->
+ <rule ref="./phpcs.xml">
+ <!-- Rules with automatic fixes that we want to adhere to, but currently don't -->
+ <exclude name="Generic.Formatting.DisallowMultipleStatements.SameLine"/>
+ <exclude name="Generic.Functions.FunctionCallArgumentSpacing.NoSpaceAfterComma"/>
+ <exclude name="Generic.Functions.FunctionCallArgumentSpacing.SpaceBeforeComma"/>
+ <exclude name="Generic.Functions.FunctionCallArgumentSpacing.TooMuchSpaceAfterComma"/>
+ <exclude name="Generic.PHP.LowerCaseKeyword.Found"/>
+ <exclude name="Generic.PHP.LowerCaseConstant.Found"/>
+ <exclude name="Generic.WhiteSpace.ScopeIndent.IncorrectExact"/>
+ <exclude name="Generic.WhiteSpace.ScopeIndent.Incorrect"/>
+ <exclude name="Generic.WhiteSpace.IncrementDecrementSpacing.SpaceAfterDecrement"/>
+ <exclude name="Generic.WhiteSpace.IncrementDecrementSpacing.SpaceAfterIncrement"/>
+
+ <exclude name="Squiz.ControlStructures.ControlSignature.SpaceAfterCloseParenthesis"/>
+ <exclude name="Squiz.ControlStructures.ControlSignature.SpaceAfterKeyword"/>
+ <exclude name="Squiz.ControlStructures.ControlSignature.SpaceAfterCloseBrace"/>
+ <exclude name="Squiz.ControlStructures.ControlSignature.NewlineAfterOpenBrace"/>
+ <exclude name="Squiz.ControlStructures.ForEachLoopDeclaration.NoSpaceBeforeArrow"/>
+ <exclude name="Squiz.ControlStructures.ForEachLoopDeclaration.NoSpaceAfterArrow"/>
+ <exclude name="Squiz.ControlStructures.ForEachLoopDeclaration.SpacingBeforeAs"/>
+ <exclude name="Squiz.ControlStructures.ForLoopDeclaration.SpacingAfterSecond"/>
+ <exclude name="Squiz.ControlStructures.ForLoopDeclaration.NoSpaceAfterSecond"/>
+ <exclude name="Squiz.ControlStructures.ForLoopDeclaration.NoSpaceAfterFirst"/>
+ <exclude name="Squiz.Functions.FunctionDeclarationArgumentSpacing.NoSpaceBeforeArg"/>
+ <exclude name="Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceAfterEquals"/>
+ <exclude name="Squiz.Functions.FunctionDeclarationArgumentSpacing.SpacingAfterReference"/>
+ <exclude name="Squiz.Functions.FunctionDeclarationArgumentSpacing.SpacingBeforeClose"/>
+ <exclude name="Squiz.Functions.FunctionDeclarationArgumentSpacing.SpaceBeforeEquals"/>
+ <exclude name="Squiz.Functions.MultiLineFunctionDeclaration.BraceOnSameLine"/>
+ <exclude name="Squiz.Functions.MultiLineFunctionDeclaration.NewlineBeforeOpenBrace"/>
+ <exclude name="Squiz.Functions.MultiLineFunctionDeclaration.CloseBracketLine"/>
+ <exclude name="Squiz.WhiteSpace.ControlStructureSpacing.SpacingAfterOpen"/>
+ <exclude name="Squiz.WhiteSpace.ControlStructureSpacing.SpacingBeforeClose"/>
+ <exclude name="Squiz.WhiteSpace.ScopeClosingBrace.ContentBefore"/>
+ <exclude name="Squiz.WhiteSpace.ScopeClosingBrace.Indent"/>
+ <exclude name="Squiz.WhiteSpace.SuperfluousWhitespace.EndLine"/>
+
+ <exclude name="PSR2.Classes.ClassDeclaration.CloseBraceAfterBody"/>
+ <exclude name="PSR2.Classes.ClassDeclaration.OpenBraceNewLine"/>
+ <exclude name="PSR2.Classes.PropertyDeclaration.StaticBeforeVisibility"/>
+ <exclude name="PSR2.ControlStructures.ControlStructureSpacing.SpacingAfterOpenBrace"/>
+ <exclude name="PSR2.ControlStructures.ControlStructureSpacing.SpaceBeforeCloseBrace"/>
+ <exclude name="PSR2.ControlStructures.ElseIfDeclaration.NotAllowed"/>
+ <exclude name="PSR2.ControlStructures.SwitchDeclaration.BreakIndent"/>
+ <exclude name="PSR2.ControlStructures.SwitchDeclaration.BreakNotNewLine"/>
+ <exclude name="PSR2.ControlStructures.SwitchDeclaration.BodyOnNextLineCASE"/>
+ <exclude name="PSR2.ControlStructures.SwitchDeclaration.SpaceBeforeColonDEFAULT"/>
+ <exclude name="PSR2.ControlStructures.SwitchDeclaration.SpaceBeforeColonCASE"/>
+ <exclude name="PSR2.Files.EndFileNewline.TooMany"/>
+ <exclude name="PSR2.Files.EndFileNewline.NoneFound"/>
+ <exclude name="PSR2.Methods.FunctionCallSignature.Indent"/>
+ <exclude name="PSR2.Methods.FunctionCallSignature.EmptyLine"/>
+ <exclude name="PSR2.Methods.FunctionCallSignature.ContentAfterOpenBracket"/>
+ <exclude name="PSR2.Methods.FunctionCallSignature.SpaceBeforeOpenBracket"/>
+ <exclude name="PSR2.Methods.FunctionCallSignature.CloseBracketLine"/>
+ <exclude name="PSR2.Methods.FunctionCallSignature.SpaceBeforeCloseBracket"/>
+ <exclude name="PSR2.Methods.FunctionCallSignature.SpaceAfterOpenBracket"/>
+ <exclude name="PSR2.Methods.FunctionCallSignature.MultipleArguments"/>
+ <exclude name="PSR2.Methods.FunctionClosingBrace.SpacingBeforeClose"/>
+ <exclude name="PSR2.Methods.MethodDeclaration.StaticBeforeVisibility"/>
+ <exclude name="PSR2.Namespaces.NamespaceDeclaration.BlankLineAfter"/>
+ <exclude name="PSR2.Namespaces.UseDeclaration.SpaceAfterLastUse"/>
+
+ <exclude name="PSR12.Classes.ClassInstantiation.MissingParentheses"/>
+ <exclude name="PSR12.ControlStructures.BooleanOperatorPlacement.FoundMixed"/>
+ <exclude name="PSR12.ControlStructures.ControlStructureSpacing.FirstExpressionLine"/>
+ <exclude name="PSR12.ControlStructures.ControlStructureSpacing.CloseParenthesisLine"/>
+ <exclude name="PSR12.ControlStructures.ControlStructureSpacing.LineIndent"/>
+ <exclude name="PSR12.ControlStructures.ControlStructureSpacing.SpacingAfterOpenBrace"/>
+ <exclude name="PSR12.ControlStructures.ControlStructureSpacing.SpaceBeforeCloseBrace"/>
+ <exclude name="PSR12.Files.FileHeader.SpacingAfterBlock"/>
+ <exclude name="PSR12.Operators.OperatorSpacing.NoSpaceBefore"/>
+ <exclude name="PSR12.Operators.OperatorSpacing.NoSpaceAfter"/>
+
+ <exclude name="PSR12.Properties.ConstantVisibility.NotFound"/>
+ </rule>
+
+ <!-- for now we mix declarations and execution here (mostly for defines) -->
+ <rule ref="PSR1.Files.SideEffects">
+ <exclude-pattern>*/index.php</exclude-pattern>
+ <exclude-pattern>*/inc/parserutils.php</exclude-pattern>
+ <exclude-pattern>*/inc/mail.php</exclude-pattern>
+ <exclude-pattern>*/inc/init.php</exclude-pattern>
+ <exclude-pattern>*/inc/farm.php</exclude-pattern>
+ <exclude-pattern>*/inc/fulltext.php</exclude-pattern>
+ <exclude-pattern>*/inc/pluginutils.php</exclude-pattern>
+ <exclude-pattern>*/inc/indexer.php</exclude-pattern>
+ <exclude-pattern>*/inc/Mailer.class.php</exclude-pattern>
+ <exclude-pattern>*/doku.php</exclude-pattern>
+ <exclude-pattern>*/install.php</exclude-pattern>
+ <exclude-pattern>*/inc/utf8.php</exclude-pattern>
+ <exclude-pattern>*/feed.php</exclude-pattern>
+ <exclude-pattern>*/inc/load.php</exclude-pattern>
+ <exclude-pattern>*/bin/*.php</exclude-pattern>
+ <exclude-pattern>*/lib/exe/*.php</exclude-pattern>
+ </rule>
+
+</ruleset>
diff --git a/_test/tests/general/general_html.test.php b/_test/tests/general/general_html.test.php
new file mode 100644
index 000000000..8e6dd77c0
--- /dev/null
+++ b/_test/tests/general/general_html.test.php
@@ -0,0 +1,118 @@
+<?php
+
+/**
+ * Check some page output for validity
+ *
+ * @group internet
+ */
+class general_html_test extends DokuWikiTest
+{
+ /** @var string[] we consider these hits shortcomings in the validator and not errors */
+ protected $allowedErrors = [
+ 'The string “ugc†is not a registered keyword.',
+ ];
+
+ /**
+ * List of requests to check for validity
+ *
+ * @return array
+ */
+ public function requestProvider()
+ {
+ return [
+ ['/doku.php', 'GET', []],
+ ['/doku.php', 'GET', ['do' => 'recent']],
+ ['/doku.php', 'GET', ['do' => 'index']],
+ ['/doku.php', 'GET', ['do' => 'login']],
+ ['/doku.php', 'GET', ['do' => 'search', 'q' => 'wiki']],
+ ['/doku.php', 'GET', ['id' => 'wiki:syntax']],
+ ['/doku.php', 'GET', ['id' => 'wiki:syntax', 'ns' => 'wiki', 'image' => 'wiki:dokuwiki-128.png', 'do' => 'media']],
+ ['/lib/exe/detail.php', 'GET', ['id' => 'wiki:syntax', 'media' => 'wiki:dokuwiki-128.png']],
+ ];
+ }
+
+ /**
+ * Sends the given HTML to the validator and returns the result
+ *
+ * @param string $html
+ * @return array
+ * @throws Exception when communication failed
+ */
+ protected function validate($html)
+ {
+ $http = new \dokuwiki\HTTP\DokuHTTPClient();
+ $http->headers['Content-Type'] = 'text/html; charset=utf-8';
+ $result = $http->post('https://validator.w3.org/nu/?out=json&level=error', $html);
+
+ if ($result === false) {
+ throw new \Exception($http->error);
+ }
+
+ $result = json_decode($result, true);
+ if ($result === null) {
+ throw new \Exception('could not decode JSON');
+ }
+
+ return $result;
+ }
+
+ /**
+ * Reformat the errors for nicer display in output
+ *
+ * @param array $result
+ * @return string[]
+ */
+ protected function listErrors($result)
+ {
+ $errors = [];
+ foreach ($result['messages'] as $msg) {
+ if ($this->isAllowedError($msg['message'])) continue;
+ $errors[] = "☛ " . $msg['message'] . "\n" . $msg['extract'] . "\n";
+ }
+ return $errors;
+ }
+
+ /**
+ * Is the given string an allowed error that should be skipped?
+ *
+ * @param string $string
+ * @return bool
+ */
+ protected function isAllowedError($string)
+ {
+ $re = join('|', array_map('preg_quote_cb', $this->allowedErrors));
+ return (bool)preg_match("/$re/", $string);
+ }
+
+ /**
+ * @dataProvider requestProvider
+ * @param string $url
+ * @param string $method
+ * @param array $data
+ * @group internet
+ */
+ public function test_Validity($url, $method, $data)
+ {
+ $request = new TestRequest();
+ if ($method == 'GET') {
+ $response = $request->get($data, $url);
+ } elseif ($method == 'POST') {
+ $response = $request->post($data, $url);
+ } else {
+ throw new \RuntimeException("unknown method given: $method");
+ }
+
+ $html = $response->getContent();
+ try {
+ $result = $this->validate($html);
+ } catch (\Exception $e) {
+ $this->markTestSkipped($e->getMessage());
+ return;
+ }
+
+ $errors = $this->listErrors($result);
+ $info = "Invalid HTML found:\n" . join("\n", $errors);
+
+ $this->assertEquals(0, count($errors), $info);
+ }
+}
diff --git a/_test/tests/inc/Extension/Event.test.php b/_test/tests/inc/Extension/Event.test.php
new file mode 100644
index 000000000..bc2268295
--- /dev/null
+++ b/_test/tests/inc/Extension/Event.test.php
@@ -0,0 +1,43 @@
+<?php
+
+namespace tests\inc\Extension;
+
+use dokuwiki\Extension\Event;
+
+class EventTest extends \DokuWikiTest
+{
+ static public function staticFunc(&$data)
+ {
+ $data['test'] = strtoupper($data['test']);
+ }
+
+ public function dynamicFunc(&$data)
+ {
+ $data['test'] = strtoupper($data['test']);
+ }
+
+ public function testGlobal()
+ {
+ $data = 'test';
+ $result = Event::createAndTrigger('TESTTRIGGER', $data, 'strtoupper');
+ $this->assertEquals('TEST', $result);
+ }
+
+ public function testDynamic()
+ {
+ $data = ['test' => 'test'];
+ Event::createAndTrigger('TESTTRIGGER', $data, [$this, 'dynamicFunc']);
+ $this->assertEquals(['test' => 'TEST'], $data);
+ }
+
+ public function testStatic()
+ {
+ $data = ['test' => 'test'];
+ Event::createAndTrigger('TESTTRIGGER', $data, 'tests\inc\Extension\EventTest::staticFunc');
+ $this->assertEquals(['test' => 'TEST'], $data);
+
+ $data = ['test' => 'test'];
+ Event::createAndTrigger('TESTTRIGGER', $data, ['tests\inc\Extension\EventTest', 'staticFunc']);
+ $this->assertEquals(['test' => 'TEST'], $data);
+ }
+}
diff --git a/_test/tests/inc/PluginUtils.test.php b/_test/tests/inc/PluginUtils.test.php
new file mode 100644
index 000000000..7ddad3af7
--- /dev/null
+++ b/_test/tests/inc/PluginUtils.test.php
@@ -0,0 +1,23 @@
+<?php
+
+class PluginUtilsTest extends DokuWikiTest
+{
+ /**
+ * @covers ::plugin_list()
+ */
+ public function test_cache_cleaning_cleanToUnclean()
+ {
+ $expectedListOfPlugins = [
+ 'acl',
+ 'authplain',
+ 'config',
+ 'info',
+ 'popularity',
+ 'revert',
+ 'safefnrecode',
+ 'usermanager',
+ ];
+
+ $this->assertEquals($expectedListOfPlugins, plugin_list());
+ }
+}
diff --git a/_test/tests/inc/XmlRpcServer.test.php b/_test/tests/inc/XmlRpcServer.test.php
new file mode 100644
index 000000000..47d2f8cfc
--- /dev/null
+++ b/_test/tests/inc/XmlRpcServer.test.php
@@ -0,0 +1,69 @@
+<?php
+
+use dokuwiki\Remote\XmlRpcServer;
+
+class XmlRpcServerTestWrapper extends XmlRpcServer
+{
+ public $output;
+
+ public function output($xml) {
+ $this->output = $xml;
+ }
+}
+
+class XmlRpcServerTest extends DokuWikiTest
+{
+ protected $server;
+
+ function setUp()
+ {
+ parent::setUp();
+ global $conf;
+
+ $conf['remote'] = 1;
+ $conf['remoteuser'] = '';
+ $conf['useacl'] = 0;
+
+ $this->server = new XmlRpcServerTestWrapper(true);
+ }
+
+
+ function testDateFormat()
+ {
+ $pageName = ":wiki:dokuwiki";
+ $file = wikiFN($pageName);
+ $timestamp = filemtime($file);
+ $ixrModifiedTime = (new DateTime('@' . $timestamp))->format(IXR_Date::XMLRPC_ISO8601);
+
+ $request = <<<EOD
+<?xml version="1.0"?>
+ <methodCall>
+ <methodName>wiki.getPageInfo</methodName>
+ <param>
+ <value>
+ <string>$pageName</string>
+ </value>
+ </param>
+ </methodCall>
+EOD;
+ $expected = <<<EOD
+<methodResponse>
+ <params>
+ <param>
+ <value>
+ <struct>
+ <member><name>name</name><value><string>wiki:dokuwiki</string></value></member>
+ <member><name>lastModified</name><value><dateTime.iso8601>$ixrModifiedTime</dateTime.iso8601></value></member>
+ <member><name>author</name><value><string></string></value></member>
+ <member><name>version</name><value><int>$timestamp</int></value></member>
+</struct>
+ </value>
+ </param>
+ </params>
+</methodResponse>
+EOD;
+
+ $this->server->serve($request);
+ $this->assertEquals(trim($expected), trim($this->server->output));
+ }
+}
diff --git a/_test/tests/inc/common_basicinfo.test.php b/_test/tests/inc/common_basicinfo.test.php
index 8359c0877..1bcc1a0d5 100644
--- a/_test/tests/inc/common_basicinfo.test.php
+++ b/_test/tests/inc/common_basicinfo.test.php
@@ -1,11 +1,11 @@
<?php
class common_infofunctions_test extends DokuWikiTest {
-
+
function setup(){
parent::setup();
- global $USERINFO;
+ global $USERINFO;
$USERINFO = array(
'pass' => '179ad45c6ce2cb97cf1029e212046e81',
'name' => 'Arthur Dent',
@@ -15,7 +15,7 @@ class common_infofunctions_test extends DokuWikiTest {
$_SERVER['REMOTE_USER'] = 'testuser';
$_SERVER['REMOTE_ADDR'] = '1.2.3.4';
}
-
+
function _get_info() {
global $USERINFO;
$info = array (
@@ -27,7 +27,7 @@ class common_infofunctions_test extends DokuWikiTest {
'ismobile' => false,
'client' => 'testuser',
);
-
+
return $info;
}
@@ -36,14 +36,15 @@ class common_infofunctions_test extends DokuWikiTest {
* Other functions provide the values
*/
function test_basicinfo(){
+ global $ID;
// test with REMOTE_USER set and the user an admin user
$info = $this->_get_info();
$this->assertEquals(basicinfo($ID,true),$info);
-
- // with $httpclient parameter set to false
+
+ // with $httpclient parameter set to false
unset($info['ismobile']);
$this->assertEquals(basicinfo($ID,false),$info);
-
+
// with anonymous user
unset($_SERVER['REMOTE_USER']);
global $USERINFO; $USERINFO = array();
@@ -58,7 +59,7 @@ class common_infofunctions_test extends DokuWikiTest {
);
$this->assertEquals(basicinfo($ID,true),$info);
}
-
+
}
//Setup VIM: ex: et ts=4 :
diff --git a/_test/tests/inc/common_clientip.test.php b/_test/tests/inc/common_clientip.test.php
index 5b569cd98..b06390ee4 100644
--- a/_test/tests/inc/common_clientip.test.php
+++ b/_test/tests/inc/common_clientip.test.php
@@ -2,12 +2,19 @@
class common_clientIP_test extends DokuWikiTest {
+ function setup(){
+ parent::setup();
+
+ global $conf;
+ $conf['trustedproxy'] = '^(::1|[fF][eE]80:|127\.|10\.|192\.168\.|172\.((1[6-9])|(2[0-9])|(3[0-1]))\.)';
+ }
+
function test_simple_all(){
$_SERVER['REMOTE_ADDR'] = '123.123.123.123';
$_SERVER['HTTP_X_REAL_IP'] = '';
$_SERVER['HTTP_X_FORWARDED_FOR'] = '';
$out = '123.123.123.123';
- $this->assertEquals(clientIP(),$out);
+ $this->assertEquals($out, clientIP());
}
function test_proxy1_all(){
@@ -15,7 +22,7 @@ class common_clientIP_test extends DokuWikiTest {
$_SERVER['HTTP_X_REAL_IP'] = '77.77.77.77';
$_SERVER['HTTP_X_FORWARDED_FOR'] = '';
$out = '123.123.123.123,77.77.77.77';
- $this->assertEquals(clientIP(),$out);
+ $this->assertEquals($out, clientIP());
}
function test_proxy2_all(){
@@ -23,7 +30,7 @@ class common_clientIP_test extends DokuWikiTest {
$_SERVER['HTTP_X_REAL_IP'] = '';
$_SERVER['HTTP_X_FORWARDED_FOR'] = '77.77.77.77';
$out = '123.123.123.123,77.77.77.77';
- $this->assertEquals(clientIP(),$out);
+ $this->assertEquals($out, clientIP());
}
function test_proxyhops_all(){
@@ -31,7 +38,7 @@ class common_clientIP_test extends DokuWikiTest {
$_SERVER['HTTP_X_REAL_IP'] = '';
$_SERVER['HTTP_X_FORWARDED_FOR'] = '77.77.77.77,66.66.66.66';
$out = '123.123.123.123,77.77.77.77,66.66.66.66';
- $this->assertEquals(clientIP(),$out);
+ $this->assertEquals($out, clientIP());
}
function test_simple_single(){
@@ -39,31 +46,63 @@ class common_clientIP_test extends DokuWikiTest {
$_SERVER['HTTP_X_REAL_IP'] = '';
$_SERVER['HTTP_X_FORWARDED_FOR'] = '';
$out = '123.123.123.123';
- $this->assertEquals(clientIP(true),$out);
+ $this->assertEquals($out, clientIP(true));
}
function test_proxy1_single(){
$_SERVER['REMOTE_ADDR'] = '123.123.123.123';
$_SERVER['HTTP_X_REAL_IP'] = '77.77.77.77';
$_SERVER['HTTP_X_FORWARDED_FOR'] = '';
- $out = '77.77.77.77';
- $this->assertEquals(clientIP(true),$out);
+ $out = '123.123.123.123';
+ $this->assertEquals($out, clientIP(true));
}
function test_proxy2_single(){
$_SERVER['REMOTE_ADDR'] = '123.123.123.123';
$_SERVER['HTTP_X_REAL_IP'] = '';
$_SERVER['HTTP_X_FORWARDED_FOR'] = '77.77.77.77';
- $out = '77.77.77.77';
- $this->assertEquals(clientIP(true),$out);
+ $out = '123.123.123.123';
+ $this->assertEquals($out, clientIP(true));
}
function test_proxyhops_single(){
$_SERVER['REMOTE_ADDR'] = '123.123.123.123';
$_SERVER['HTTP_X_REAL_IP'] = '';
$_SERVER['HTTP_X_FORWARDED_FOR'] = '77.77.77.77,66.66.66.66';
+ $out = '123.123.123.123';
+ $this->assertEquals($out, clientIP(true));
+ }
+
+ function test_proxy1_local_single(){
+ $_SERVER['REMOTE_ADDR'] = '127.0.0.1';
+ $_SERVER['HTTP_X_REAL_IP'] = '77.77.77.77';
+ $_SERVER['HTTP_X_FORWARDED_FOR'] = '';
+ $out = '77.77.77.77';
+ $this->assertEquals($out, clientIP(true));
+ }
+
+ function test_proxy2_local_single(){
+ $_SERVER['REMOTE_ADDR'] = '127.0.0.1';
+ $_SERVER['HTTP_X_REAL_IP'] = '';
+ $_SERVER['HTTP_X_FORWARDED_FOR'] = '77.77.77.77';
+ $out = '77.77.77.77';
+ $this->assertEquals($out, clientIP(true));
+ }
+
+ function test_proxyhops1_local_single(){
+ $_SERVER['REMOTE_ADDR'] = '127.0.0.1';
+ $_SERVER['HTTP_X_REAL_IP'] = '';
+ $_SERVER['HTTP_X_FORWARDED_FOR'] = '77.77.77.77,66.66.66.66';
+ $out = '77.77.77.77';
+ $this->assertEquals($out, clientIP(true));
+ }
+
+ function test_proxyhops2_local_single(){
+ $_SERVER['REMOTE_ADDR'] = '127.0.0.1';
+ $_SERVER['HTTP_X_REAL_IP'] = '';
+ $_SERVER['HTTP_X_FORWARDED_FOR'] = '10.0.0.1,66.66.66.66';
$out = '66.66.66.66';
- $this->assertEquals(clientIP(true),$out);
+ $this->assertEquals($out, clientIP(true));
}
function test_local_all(){
@@ -71,7 +110,7 @@ class common_clientIP_test extends DokuWikiTest {
$_SERVER['HTTP_X_REAL_IP'] = '';
$_SERVER['HTTP_X_FORWARDED_FOR'] = '127.0.0.1';
$out = '123.123.123.123,127.0.0.1';
- $this->assertEquals(clientIP(),$out);
+ $this->assertEquals($out, clientIP());
}
function test_local1_single(){
@@ -79,7 +118,7 @@ class common_clientIP_test extends DokuWikiTest {
$_SERVER['HTTP_X_REAL_IP'] = '';
$_SERVER['HTTP_X_FORWARDED_FOR'] = '127.0.0.1';
$out = '123.123.123.123';
- $this->assertEquals(clientIP(true),$out);
+ $this->assertEquals($out, clientIP(true));
}
function test_local2_single(){
@@ -87,7 +126,7 @@ class common_clientIP_test extends DokuWikiTest {
$_SERVER['HTTP_X_REAL_IP'] = '';
$_SERVER['HTTP_X_FORWARDED_FOR'] = '123.123.123.123';
$out = '123.123.123.123';
- $this->assertEquals(clientIP(true),$out);
+ $this->assertEquals($out, clientIP(true));
}
function test_local3_single(){
@@ -95,7 +134,7 @@ class common_clientIP_test extends DokuWikiTest {
$_SERVER['HTTP_X_REAL_IP'] = '';
$_SERVER['HTTP_X_FORWARDED_FOR'] = '127.0.0.1,10.0.0.1,192.168.0.2,172.17.1.1,172.21.1.1,172.31.1.1';
$out = '123.123.123.123';
- $this->assertEquals(clientIP(true),$out);
+ $this->assertEquals($out, clientIP(true));
}
function test_local4_single(){
@@ -103,7 +142,7 @@ class common_clientIP_test extends DokuWikiTest {
$_SERVER['HTTP_X_REAL_IP'] = '';
$_SERVER['HTTP_X_FORWARDED_FOR'] = '192.168.0.5';
$out = '192.168.0.5';
- $this->assertEquals(clientIP(true),$out);
+ $this->assertEquals($out, clientIP(true));
}
function test_garbage_all(){
@@ -111,7 +150,7 @@ class common_clientIP_test extends DokuWikiTest {
$_SERVER['HTTP_X_REAL_IP'] = '';
$_SERVER['HTTP_X_FORWARDED_FOR'] = 'some garbage, or something, 222';
$out = '123.123.123.123';
- $this->assertEquals(clientIP(),$out);
+ $this->assertEquals($out, clientIP());
}
function test_garbage_single(){
@@ -119,7 +158,7 @@ class common_clientIP_test extends DokuWikiTest {
$_SERVER['HTTP_X_REAL_IP'] = '';
$_SERVER['HTTP_X_FORWARDED_FOR'] = 'some garbage, or something, 222';
$out = '123.123.123.123';
- $this->assertEquals(clientIP(true),$out);
+ $this->assertEquals($out, clientIP(true));
}
function test_garbageonly_all(){
@@ -127,7 +166,7 @@ class common_clientIP_test extends DokuWikiTest {
$_SERVER['HTTP_X_REAL_IP'] = '';
$_SERVER['HTTP_X_FORWARDED_FOR'] = 'some garbage, or something, 222';
$out = '0.0.0.0';
- $this->assertEquals(clientIP(),$out);
+ $this->assertEquals($out, clientIP());
}
function test_garbageonly_single(){
@@ -135,7 +174,7 @@ class common_clientIP_test extends DokuWikiTest {
$_SERVER['HTTP_X_REAL_IP'] = '';
$_SERVER['HTTP_X_FORWARDED_FOR'] = 'some garbage, or something, 222';
$out = '0.0.0.0';
- $this->assertEquals(clientIP(true),$out);
+ $this->assertEquals($out, clientIP(true));
}
function test_malicious(){
@@ -143,7 +182,23 @@ class common_clientIP_test extends DokuWikiTest {
$_SERVER['HTTP_X_REAL_IP'] = '';
$_SERVER['HTTP_X_FORWARDED_FOR'] = '<?php set_time_limit(0);echo \'my_delim\';passthru(123.123.123.123);die;?>';
$out = '0.0.0.0';
- $this->assertEquals(clientIP(),$out);
+ $this->assertEquals($out, clientIP());
+ }
+
+ function test_malicious_with_remote_addr(){
+ $_SERVER['REMOTE_ADDR'] = '8.8.8.8';
+ $_SERVER['HTTP_X_REAL_IP'] = '';
+ $_SERVER['HTTP_X_FORWARDED_FOR'] = '<?php set_time_limit(0);echo \'my_delim\';passthru(\',123.123.123.123,\');die;?>';
+ $out = '8.8.8.8';
+ $this->assertEquals($out, clientIP(true));
+ }
+
+ function test_proxied_malicious_with_remote_addr(){
+ $_SERVER['REMOTE_ADDR'] = '127.0.0.1';
+ $_SERVER['HTTP_X_REAL_IP'] = '';
+ $_SERVER['HTTP_X_FORWARDED_FOR'] = '8.8.8.8,<?php set_time_limit(0);echo \'my_delim\';passthru(\',123.123.123.123,\');die;?>';
+ $out = '127.0.0.1,8.8.8.8,123.123.123.123';
+ $this->assertEquals($out, clientIP());
}
}
diff --git a/_test/tests/inc/common_getGoogleQuery.test.php b/_test/tests/inc/common_getGoogleQuery.test.php
new file mode 100644
index 000000000..8563832bf
--- /dev/null
+++ b/_test/tests/inc/common_getGoogleQuery.test.php
@@ -0,0 +1,38 @@
+<?php
+
+class common_getGoogleQuery_test extends DokuWikiTest {
+
+ /**
+ * https://github.com/splitbrain/dokuwiki/issues/2848
+ */
+ function test_google_form(){
+ global $INPUT;
+ $_SERVER['HTTP_REFERER'] = 'https://www.google.com/url?q=https://www.dokuwiki.org/&sa=D&ust=a&usg=b';
+ $INPUT = new Input();
+ $this->assertEquals('', getGoogleQuery());
+ }
+
+ function test_google_url(){
+ global $INPUT;
+ $_SERVER['HTTP_REFERER'] = 'https://www.google.com/url?sa=t&source=web&rct=j&url=https://www.dokuwiki.org/&ved=a';
+ $INPUT = new Input();
+ $this->assertEquals('', getGoogleQuery());
+ }
+
+ function test_uncommon_url(){
+ global $INPUT;
+ $_SERVER['HTTP_REFERER'] = 'http://search.example.com/search?q=DokuWiki';
+ $INPUT = new Input();
+ $this->assertEquals('', getGoogleQuery());
+ }
+
+ function test_old_google(){
+ global $INPUT;
+ $_SERVER['HTTP_REFERER'] = 'https://www.google.com/search?newwindow=1&q=what%27s+my+referer';
+ $INPUT = new Input();
+ $this->assertEquals(array('what', 's', 'my', 'referer'), getGoogleQuery());
+ }
+
+}
+
+//Setup VIM: ex: et ts=4 :
diff --git a/_test/tests/inc/indexer_rename.test.php b/_test/tests/inc/indexer_rename.test.php
index d8c456f8e..2dbe6dcad 100644
--- a/_test/tests/inc/indexer_rename.test.php
+++ b/_test/tests/inc/indexer_rename.test.php
@@ -3,7 +3,7 @@
* Test cases for the Doku_Indexer::renamePage and Doku_Indexer::renameMetaValue methods
*/
class indexer_rename_test extends DokuWikiTest {
- /** @var Doku_Indexer $indexer */
+ /** @var \dokuwiki\Search\Indexer $indexer */
private $indexer;
private $old_id = 'old_testid';
diff --git a/_test/tests/lib/exe/css_css_compress.test.php b/_test/tests/lib/exe/css_css_compress.test.php
index 807317ca6..35654ec0c 100644
--- a/_test/tests/lib/exe/css_css_compress.test.php
+++ b/_test/tests/lib/exe/css_css_compress.test.php
@@ -71,7 +71,7 @@ class css_css_compress_test extends DokuWikiTest {
function test_hack(){
$text = '/* Mac IE will not see this and continue with inline-block */
/* \\*/
- display: inline;
+ display: inline;
/* */';
$this->assertEquals('/* \\*/display:inline;/* */', css_compress($text));
}
@@ -138,6 +138,19 @@ class css_css_compress_test extends DokuWikiTest {
$this->assertEquals($expect, css_compress($input));
}
+ function test_quotes() {
+ $input = '/* "blockcomment" */ content: "/* STR2 : STR1 */ thisis : inquote"; STR1: 10px; STR2:"STR1"; STR3:\'STR1\';';
+ $expect = 'content:"/* STR2 : STR1 */ thisis : inquote";STR1:10px;STR2:"STR1";STR3:\'STR1\';';
+
+ $this->assertEquals($expect, css_compress($input));
+ }
+
+ function test_escapedQuotes() {
+ $inputEscapedQuote = 'content:"one quote visible: \\" "; foo: bar;//"';
+ $expectedOutput = 'content:"one quote visible: \\" ";foo:bar;';
+
+ $this->assertEquals($expectedOutput, css_compress($inputEscapedQuote));
+ }
}
//Setup VIM: ex: et ts=4 :
diff --git a/composer.lock b/composer.lock
index 7ab0304fe..79254dea4 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1,7 +1,7 @@
{
"_readme": [
"This file locks the dependencies of your project to a known state",
- "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "d5c15248668d2dd749de47b106049b77",
@@ -49,20 +49,20 @@
},
{
"name": "geshi/geshi",
- "version": "v1.0.9.0",
+ "version": "v1.0.9.1",
"source": {
"type": "git",
"url": "https://github.com/GeSHi/geshi-1.0.git",
- "reference": "5a7b461338d322d941986a656d4d1651452e73dd"
+ "reference": "fd22ab78481bf90337862b590e6f7517863926b8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/GeSHi/geshi-1.0/zipball/5a7b461338d322d941986a656d4d1651452e73dd",
- "reference": "5a7b461338d322d941986a656d4d1651452e73dd",
+ "url": "https://api.github.com/repos/GeSHi/geshi-1.0/zipball/fd22ab78481bf90337862b590e6f7517863926b8",
+ "reference": "fd22ab78481bf90337862b590e6f7517863926b8",
"shasum": ""
},
"require-dev": {
- "phpunit/phpunit": "^5.7"
+ "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.2"
},
"type": "library",
"autoload": {
@@ -85,20 +85,20 @@
],
"description": "Generic Syntax Highlighter",
"homepage": "http://qbnz.com/highlighter/",
- "time": "2017-05-05T05:51:25+00:00"
+ "time": "2019-10-20T20:54:46+00:00"
},
{
"name": "marcusschwarz/lesserphp",
- "version": "v0.5.1",
+ "version": "v0.5.2",
"source": {
"type": "git",
"url": "https://github.com/MarcusSchwarz/lesserphp.git",
- "reference": "e9e3d53980c0e486b07c75e12f2bae5e10bdee44"
+ "reference": "b02ee973ee1fff3237f7feaf44885596fb5ee323"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/MarcusSchwarz/lesserphp/zipball/e9e3d53980c0e486b07c75e12f2bae5e10bdee44",
- "reference": "e9e3d53980c0e486b07c75e12f2bae5e10bdee44",
+ "url": "https://api.github.com/repos/MarcusSchwarz/lesserphp/zipball/b02ee973ee1fff3237f7feaf44885596fb5ee323",
+ "reference": "b02ee973ee1fff3237f7feaf44885596fb5ee323",
"shasum": ""
},
"require-dev": {
@@ -137,20 +137,20 @@
],
"description": "lesserphp is a compiler for LESS written in PHP based on leafo's lessphp.",
"homepage": "http://leafo.net/lessphp/",
- "time": "2016-09-30T11:13:18+00:00"
+ "time": "2018-05-28T12:54:01+00:00"
},
{
"name": "openpsa/universalfeedcreator",
- "version": "v1.8.3",
+ "version": "v1.8.3.2",
"source": {
"type": "git",
"url": "https://github.com/flack/UniversalFeedCreator.git",
- "reference": "6261e130446d8f787bbfd229a602fb11e6816a4e"
+ "reference": "906745196469b13ceefa6523ef04851a78ad10f4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/flack/UniversalFeedCreator/zipball/6261e130446d8f787bbfd229a602fb11e6816a4e",
- "reference": "6261e130446d8f787bbfd229a602fb11e6816a4e",
+ "url": "https://api.github.com/repos/flack/UniversalFeedCreator/zipball/906745196469b13ceefa6523ef04851a78ad10f4",
+ "reference": "906745196469b13ceefa6523ef04851a78ad10f4",
"shasum": ""
},
"require": {
@@ -163,11 +163,14 @@
"autoload": {
"classmap": [
"lib"
+ ],
+ "files": [
+ "lib/constants.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "LGPL"
+ "LGPL-2.1-or-later"
],
"authors": [
{
@@ -185,20 +188,20 @@
"pie",
"rss"
],
- "time": "2017-05-18T08:28:48+00:00"
+ "time": "2019-09-01T17:49:46+00:00"
},
{
"name": "paragonie/random_compat",
- "version": "v2.0.12",
+ "version": "v2.0.18",
"source": {
"type": "git",
"url": "https://github.com/paragonie/random_compat.git",
- "reference": "258c89a6b97de7dfaf5b8c7607d0478e236b04fb"
+ "reference": "0a58ef6e3146256cc3dc7cc393927bcc7d1b72db"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/paragonie/random_compat/zipball/258c89a6b97de7dfaf5b8c7607d0478e236b04fb",
- "reference": "258c89a6b97de7dfaf5b8c7607d0478e236b04fb",
+ "url": "https://api.github.com/repos/paragonie/random_compat/zipball/0a58ef6e3146256cc3dc7cc393927bcc7d1b72db",
+ "reference": "0a58ef6e3146256cc3dc7cc393927bcc7d1b72db",
"shasum": ""
},
"require": {
@@ -230,23 +233,24 @@
"description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
"keywords": [
"csprng",
+ "polyfill",
"pseudorandom",
"random"
],
- "time": "2018-04-04T21:24:14+00:00"
+ "time": "2019-01-03T20:59:08+00:00"
},
{
"name": "phpseclib/phpseclib",
- "version": "2.0.11",
+ "version": "2.0.23",
"source": {
"type": "git",
"url": "https://github.com/phpseclib/phpseclib.git",
- "reference": "7053f06f91b3de78e143d430e55a8f7889efc08b"
+ "reference": "c78eb5058d5bb1a183133c36d4ba5b6675dfa099"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/7053f06f91b3de78e143d430e55a8f7889efc08b",
- "reference": "7053f06f91b3de78e143d430e55a8f7889efc08b",
+ "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/c78eb5058d5bb1a183133c36d4ba5b6675dfa099",
+ "reference": "c78eb5058d5bb1a183133c36d4ba5b6675dfa099",
"shasum": ""
},
"require": {
@@ -325,29 +329,36 @@
"x.509",
"x509"
],
- "time": "2018-04-15T16:55:05+00:00"
+ "time": "2019-09-17T03:41:22+00:00"
},
{
"name": "simplepie/simplepie",
- "version": "1.5.1",
+ "version": "1.5.3",
"source": {
"type": "git",
"url": "https://github.com/simplepie/simplepie.git",
- "reference": "db9fff27b6d49eed3d4047cd3211ec8dba2f5d6e"
+ "reference": "173663382a9346acd53df60c7ffb20689c9cf1f6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/simplepie/simplepie/zipball/db9fff27b6d49eed3d4047cd3211ec8dba2f5d6e",
- "reference": "db9fff27b6d49eed3d4047cd3211ec8dba2f5d6e",
+ "url": "https://api.github.com/repos/simplepie/simplepie/zipball/173663382a9346acd53df60c7ffb20689c9cf1f6",
+ "reference": "173663382a9346acd53df60c7ffb20689c9cf1f6",
"shasum": ""
},
"require": {
- "php": ">=5.3.0"
+ "ext-pcre": "*",
+ "ext-xml": "*",
+ "ext-xmlreader": "*",
+ "php": ">=5.6.0"
},
"require-dev": {
- "phpunit/phpunit": "~4 || ~5"
+ "phpunit/phpunit": "~5.4.3 || ~6.5"
},
"suggest": {
+ "ext-curl": "",
+ "ext-iconv": "",
+ "ext-intl": "",
+ "ext-mbstring": "",
"mf2/mf2": "Microformat module that allows for parsing HTML for microformats"
},
"type": "library",
@@ -385,20 +396,20 @@
"feeds",
"rss"
],
- "time": "2017-11-12T02:03:34+00:00"
+ "time": "2019-09-22T23:21:30+00:00"
},
{
"name": "splitbrain/php-archive",
- "version": "1.0.10",
+ "version": "1.1.1",
"source": {
"type": "git",
"url": "https://github.com/splitbrain/php-archive.git",
- "reference": "a46f3aaeb9f123fdb7db4e192b0600feebf7f773"
+ "reference": "10d89013572ba1f4d4ad7fcb74860242f4c3860b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/splitbrain/php-archive/zipball/a46f3aaeb9f123fdb7db4e192b0600feebf7f773",
- "reference": "a46f3aaeb9f123fdb7db4e192b0600feebf7f773",
+ "url": "https://api.github.com/repos/splitbrain/php-archive/zipball/10d89013572ba1f4d4ad7fcb74860242f4c3860b",
+ "reference": "10d89013572ba1f4d4ad7fcb74860242f4c3860b",
"shasum": ""
},
"require": {
@@ -439,20 +450,20 @@
"unzip",
"zip"
],
- "time": "2018-05-01T08:03:56+00:00"
+ "time": "2018-09-09T12:13:53+00:00"
},
{
"name": "splitbrain/php-cli",
- "version": "1.1.2",
+ "version": "1.1.5",
"source": {
"type": "git",
"url": "https://github.com/splitbrain/php-cli.git",
- "reference": "1d6f0bf9eccbfd79d1f4d185ef27573601185c23"
+ "reference": "e982d40d074ab9f2669c3c0a2e40559b098cd894"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/splitbrain/php-cli/zipball/1d6f0bf9eccbfd79d1f4d185ef27573601185c23",
- "reference": "1d6f0bf9eccbfd79d1f4d185ef27573601185c23",
+ "url": "https://api.github.com/repos/splitbrain/php-cli/zipball/e982d40d074ab9f2669c3c0a2e40559b098cd894",
+ "reference": "e982d40d074ab9f2669c3c0a2e40559b098cd894",
"shasum": ""
},
"require": {
@@ -490,7 +501,7 @@
"optparse",
"terminal"
],
- "time": "2018-02-02T08:46:12+00:00"
+ "time": "2018-09-29T07:51:34+00:00"
}
],
"packages-dev": [],
diff --git a/conf/dokuwiki.php b/conf/dokuwiki.php
index 5b3a437a3..9b576f4cf 100644
--- a/conf/dokuwiki.php
+++ b/conf/dokuwiki.php
@@ -55,7 +55,7 @@ $conf['hidepages'] = ''; //Regexp for pages to be skipped from
$conf['useacl'] = 0; //Use Access Control Lists to restrict access?
$conf['autopasswd'] = 1; //autogenerate passwords and email them to user
$conf['authtype'] = 'authplain'; //which authentication backend should be used
-$conf['passcrypt'] = 'smd5'; //Used crypt method (smd5,md5,sha1,ssha,crypt,mysql,my411)
+$conf['passcrypt'] = 'bcrypt'; //Used crypt method (smd5,md5,sha1,ssha,crypt,mysql,my411,bcrypt)
$conf['defaultgroup']= 'user'; //Default groups new Users are added to
$conf['superuser'] = '!!not set!!'; //The admin can be user or @group or comma separated list user1,@group1,user2
$conf['manager'] = '!!not set!!'; //The manager can be user or @group or comma separated list user1,@group1,user2
@@ -158,6 +158,12 @@ $conf['renderer_xhtml'] = 'xhtml'; //renderer to use for main page generat
$conf['readdircache'] = 0; //time cache in second for the readdir operation, 0 to deactivate.
$conf['search_nslimit'] = 0; //limit the search to the current X namespaces
$conf['search_fragment'] = 'exact'; //specify the default fragment search behavior
+$conf['trustedproxy'] = '^(::1|[fF][eE]80:|127\.|10\.|192\.168\.|172\.((1[6-9])|(2[0-9])|(3[0-1]))\.)';
+ //Regexp of trusted proxy address when reading IP using HTTP header
+ // if blank, do not trust any proxy (including local IP)
+
+/* Feature Flags */
+$conf['defer_js'] = 1; // Defer javascript to be executed after the page's HTML has been parsed. Setting will be removed in the next release.
/* Network Settings */
$conf['dnslookups'] = 1; //disable to disallow IP to hostname lookups
diff --git a/conf/license.php b/conf/license.php
index 30d409e2e..3abdd9b27 100644
--- a/conf/license.php
+++ b/conf/license.php
@@ -7,30 +7,30 @@
$license['cc-zero'] = array(
'name' => 'CC0 1.0 Universal',
- 'url' => 'http://creativecommons.org/publicdomain/zero/1.0/',
+ 'url' => 'https://creativecommons.org/publicdomain/zero/1.0/deed.'.$conf['lang'],
);
$license['publicdomain'] = array(
'name' => 'Public Domain',
- 'url' => 'http://creativecommons.org/licenses/publicdomain/',
+ 'url' => 'https://creativecommons.org/licenses/publicdomain/deed.'.$conf['lang'],
);
$license['cc-by'] = array(
'name' => 'CC Attribution 4.0 International',
- 'url' => 'http://creativecommons.org/licenses/by/4.0/',
+ 'url' => 'https://creativecommons.org/licenses/by/4.0/deed.'.$conf['lang'],
);
$license['cc-by-sa'] = array(
'name' => 'CC Attribution-Share Alike 4.0 International',
- 'url' => 'http://creativecommons.org/licenses/by-sa/4.0/',
+ 'url' => 'https://creativecommons.org/licenses/by-sa/4.0/deed.'.$conf['lang'],
);
$license['gnufdl'] = array(
'name' => 'GNU Free Documentation License 1.3',
- 'url' => 'http://www.gnu.org/licenses/fdl-1.3.html',
+ 'url' => 'https://www.gnu.org/licenses/fdl-1.3.html',
);
$license['cc-by-nc'] = array(
'name' => 'CC Attribution-Noncommercial 4.0 International',
- 'url' => 'http://creativecommons.org/licenses/by-nc/4.0/',
+ 'url' => 'https://creativecommons.org/licenses/by-nc/4.0/deed.'.$conf['lang'],
);
$license['cc-by-nc-sa'] = array(
'name' => 'CC Attribution-Noncommercial-Share Alike 4.0 International',
- 'url' => 'http://creativecommons.org/licenses/by-nc-sa/4.0/',
+ 'url' => 'https://creativecommons.org/licenses/by-nc-sa/4.0/deed.'.$conf['lang'],
);
diff --git a/data/pages/wiki/dokuwiki.txt b/data/pages/wiki/dokuwiki.txt
index 29843e5c6..1e5a19826 100644
--- a/data/pages/wiki/dokuwiki.txt
+++ b/data/pages/wiki/dokuwiki.txt
@@ -6,7 +6,7 @@ Read the [[doku>manual|DokuWiki Manual]] to unleash the full power of DokuWiki.
===== Download =====
-DokuWiki is available at http://download.dokuwiki.org/
+DokuWiki is available at https://download.dokuwiki.org/
===== Read More =====
@@ -19,12 +19,12 @@ All documentation and additional information besides the [[syntax|syntax descrip
* [[doku>users|Happy Users]]
* [[doku>press|Who wrote about it]]
* [[doku>blogroll|What Bloggers think]]
- * [[http://www.wikimatrix.org/show/DokuWiki|Compare it with other wiki software]]
+ * [[https://www.wikimatrix.org/show/DokuWiki|Compare it with other wiki software]]
**Installing DokuWiki**
* [[doku>requirements|System Requirements]]
- * [[http://download.dokuwiki.org/|Download DokuWiki]] :!:
+ * [[https://download.dokuwiki.org/|Download DokuWiki]] :!:
* [[doku>changes|Change Log]]
* [[doku>Install|How to install or upgrade]] :!:
* [[doku>config|Configuration]]
@@ -35,7 +35,6 @@ All documentation and additional information besides the [[syntax|syntax descrip
* [[doku>manual|The manual]] :!:
* [[doku>FAQ|Frequently Asked Questions (FAQ)]]
* [[doku>glossary|Glossary]]
- * [[http://search.dokuwiki.org|Search for DokuWiki help and documentation]]
**Customizing DokuWiki**
@@ -48,17 +47,16 @@ All documentation and additional information besides the [[syntax|syntax descrip
* [[doku>newsletter|Subscribe to the newsletter]] :!:
* [[doku>mailinglist|Join the mailing list]]
- * [[http://forum.dokuwiki.org|Check out the user forum]]
+ * [[https://forum.dokuwiki.org|Check out the user forum]]
* [[doku>irc|Talk to other users in the IRC channel]]
* [[https://github.com/splitbrain/dokuwiki/issues|Submit bugs and feature wishes]]
- * [[http://www.wikimatrix.org/forum/viewforum.php?id=10|Share your experiences in the WikiMatrix forum]]
* [[doku>thanks|Some humble thanks]]
===== Copyright =====
-2004-2015 (c) Andreas Gohr <andi@splitbrain.org>((Please do not contact me for help and support -- use the [[doku>mailinglist]] or [[http://forum.dokuwiki.org|forum]] instead)) and the DokuWiki Community
+2004-2020 (c) Andreas Gohr <andi@splitbrain.org>((Please do not contact me for help and support -- use the [[doku>mailinglist]] or [[https://forum.dokuwiki.org|forum]] instead)) and the DokuWiki Community
-The DokuWiki engine is licensed under [[http://www.gnu.org/licenses/gpl.html|GNU General Public License]] Version 2. If you use DokuWiki in your company, consider [[doku>donate|donating]] a few bucks ;-).
+The DokuWiki engine is licensed under [[https://www.gnu.org/licenses/gpl.html|GNU General Public License]] Version 2. If you use DokuWiki in your company, consider [[doku>donate|donating]] a few bucks ;-).
Not sure what this means? See the [[doku>faq:license|FAQ on the Licenses]].
diff --git a/data/pages/wiki/syntax.txt b/data/pages/wiki/syntax.txt
index 8b44beaa3..bf36c0822 100644
--- a/data/pages/wiki/syntax.txt
+++ b/data/pages/wiki/syntax.txt
@@ -416,7 +416,7 @@ class HelloWorldApp {
}
</code>
-The following language strings are currently recognized: //4cs 6502acme 6502kickass 6502tasm 68000devpac abap actionscript3 actionscript ada aimms algol68 apache applescript apt_sources arm asm asp asymptote autoconf autohotkey autoit avisynth awk bascomavr bash basic4gl batch bf biblatex bibtex blitzbasic bnf boo caddcl cadlisp ceylon cfdg cfm chaiscript chapel cil c_loadrunner clojure c_mac cmake cobol coffeescript c cpp cpp-qt cpp-winapi csharp css cuesheet c_winapi dart dcl dcpu16 dcs delphi diff div dos dot d ecmascript eiffel email epc e erlang euphoria ezt f1 falcon fo fortran freebasic freeswitch fsharp gambas gdb genero genie gettext glsl gml gnuplot go groovy gwbasic haskell haxe hicest hq9plus html html4strict html5 icon idl ini inno intercal io ispfpanel java5 java javascript jcl j jquery julia kixtart klonec klonecpp kotlin latex lb ldif lisp llvm locobasic logtalk lolcode lotusformulas lotusscript lscript lsl2 lua m68k magiksf make mapbasic mathematica matlab mercury metapost mirc mk-61 mmix modula2 modula3 mpasm mxml mysql nagios netrexx newlisp nginx nimrod nsis oberon2 objc objeck ocaml-brief ocaml octave oobas oorexx oracle11 oracle8 oxygene oz parasail parigp pascal pcre perl6 perl per pf phix php-brief php pic16 pike pixelbender pli plsql postgresql postscript povray powerbuilder powershell proftpd progress prolog properties providex purebasic pycon pys60 python qbasic qml q racket rails rbs rebol reg rexx robots rpmspec rsplus ruby rust sas sass scala scheme scilab scl sdlbasic smalltalk smarty spark sparql sql standardml stonescript swift systemverilog tclegg tcl teraterm texgraph text thinbasic tsql twig typoscript unicon upc urbi uscript vala vbnet vb vbscript vedit verilog vhdl vim visualfoxpro visualprolog whitespace whois winbatch xbasic xml xojo xorg_conf xpp yaml z80 zxbasic//
+The following language strings are currently recognized: //4cs 6502acme 6502kickass 6502tasm 68000devpac abap actionscript3 actionscript ada aimms algol68 apache applescript apt_sources arm asm asp asymptote autoconf autohotkey autoit avisynth awk bascomavr bash basic4gl batch bf biblatex bibtex blitzbasic bnf boo caddcl cadlisp ceylon cfdg cfm chaiscript chapel cil c_loadrunner clojure c_mac cmake cobol coffeescript c cpp cpp-qt cpp-winapi csharp css cuesheet c_winapi dart dcl dcpu16 dcs delphi diff div dos dot d ecmascript eiffel email epc e erlang euphoria ezt f1 falcon fo fortran freebasic freeswitch fsharp gambas gdb genero genie gettext glsl gml gnuplot go groovy gwbasic haskell haxe hicest hq9plus html html4strict html5 icon idl ini inno intercal io ispfpanel java5 java javascript jcl j jquery julia kixtart klonec klonecpp kotlin latex lb ldif lisp llvm locobasic logtalk lolcode lotusformulas lotusscript lscript lsl2 lua m68k magiksf make mapbasic mathematica matlab mercury metapost mirc mk-61 mmix modula2 modula3 mpasm mxml mysql nagios netrexx newlisp nginx nimrod nsis oberon2 objc objeck ocaml-brief ocaml octave oobas oorexx oracle11 oracle8 oxygene oz parasail parigp pascal pcre perl6 perl per pf phix php-brief php pic16 pike pixelbender pli plsql postgresql postscript povray powerbuilder powershell proftpd progress prolog properties providex purebasic pycon pys60 python qbasic qml q racket rails rbs rebol reg rexx robots roff rpmspec rsplus ruby rust sas sass scala scheme scilab scl sdlbasic smalltalk smarty spark sparql sql sshconfig standardml stonescript swift systemverilog tclegg tcl teraterm texgraph text thinbasic tsql twig typoscript unicon upc urbi uscript vala vbnet vb vbscript vedit verilog vhdl vim visualfoxpro visualprolog whitespace whois winbatch wolfram xbasic xml xojo xorg_conf xpp yaml z80 zxbasic//
There are additional [[doku>syntax_highlighting|advanced options]] available for syntax highlighting, such as highlighting lines or adding line numbers.
diff --git a/data/pages/wiki/welcome.txt b/data/pages/wiki/welcome.txt
index 6978f1b14..10caa7c45 100644
--- a/data/pages/wiki/welcome.txt
+++ b/data/pages/wiki/welcome.txt
@@ -25,6 +25,6 @@ You may also want to see what [[doku>plugins|plugins]] and [[doku>templates|temp
DokuWiki is an Open Source project that thrives through user contributions. A good way to stay informed on what's going on and to get useful tips in using DokuWiki is subscribing to the [[doku>newsletter]].
-The [[http://forum.dokuwiki.org|DokuWiki User Forum]] is an excellent way to get in contact with other DokuWiki users and is just one of the many ways to get [[doku>faq:support|support]].
+The [[https://forum.dokuwiki.org|DokuWiki User Forum]] is an excellent way to get in contact with other DokuWiki users and is just one of the many ways to get [[doku>faq:support|support]].
Of course we'd be more than happy to have you [[doku>teams:getting_involved|getting involved]] with DokuWiki.
diff --git a/inc/Action/Resendpwd.php b/inc/Action/Resendpwd.php
index f3f8d3bad..dfa4a99d0 100644
--- a/inc/Action/Resendpwd.php
+++ b/inc/Action/Resendpwd.php
@@ -73,7 +73,7 @@ class Resendpwd extends AbstractAclAction {
if($token) {
// we're in token phase - get user info from token
- $tfile = $conf['cachedir'] . '/' . $token{0} . '/' . $token . '.pwauth';
+ $tfile = $conf['cachedir'] . '/' . $token[0] . '/' . $token . '.pwauth';
if(!file_exists($tfile)) {
msg($lang['resendpwdbadauth'], -1);
$INPUT->remove('pwauth');
@@ -148,7 +148,7 @@ class Resendpwd extends AbstractAclAction {
// generate auth token
$token = md5(auth_randombytes(16)); // random secret
- $tfile = $conf['cachedir'] . '/' . $token{0} . '/' . $token . '.pwauth';
+ $tfile = $conf['cachedir'] . '/' . $token[0] . '/' . $token . '.pwauth';
$url = wl('', array('do' => 'resendpwd', 'pwauth' => $token), true, '&');
io_saveFile($tfile, $user);
diff --git a/inc/Ajax.php b/inc/Ajax.php
index e8cbc84d5..9f4b31668 100644
--- a/inc/Ajax.php
+++ b/inc/Ajax.php
@@ -257,7 +257,7 @@ class Ajax {
global $NS, $MSG, $INPUT;
$id = '';
- if($_FILES['qqfile']['tmp_name']) {
+ if(isset($_FILES['qqfile']['tmp_name'])) {
$id = $INPUT->post->str('mediaid', $_FILES['qqfile']['name']);
} elseif($INPUT->get->has('qqfile')) {
$id = $INPUT->get->str('qqfile');
@@ -273,10 +273,10 @@ class Ajax {
io_createNamespace("$ns:xxx", 'media');
}
- if($_FILES['qqfile']['error']) unset($_FILES['qqfile']);
+ if(isset($_FILES['qqfile']['error']) && $_FILES['qqfile']['error']) unset($_FILES['qqfile']);
$res = false;
- if($_FILES['qqfile']['tmp_name']) $res = media_upload($NS, $AUTH, $_FILES['qqfile']);
+ if(isset($_FILES['qqfile']['tmp_name'])) $res = media_upload($NS, $AUTH, $_FILES['qqfile']);
if($INPUT->get->has('qqfile')) $res = media_upload_xhr($NS, $AUTH);
if($res) {
diff --git a/inc/Cache/Cache.php b/inc/Cache/Cache.php
index 599dc5f59..af82e6bf6 100644
--- a/inc/Cache/Cache.php
+++ b/inc/Cache/Cache.php
@@ -2,7 +2,7 @@
namespace dokuwiki\Cache;
-use \dokuwiki\Debug\PropertyDeprecationHelper;
+use dokuwiki\Debug\PropertyDeprecationHelper;
use dokuwiki\Extension\Event;
/**
@@ -78,9 +78,13 @@ class Cache
$this->depends = $depends;
$this->addDependencies();
- if ($this->_event) {
- return $this->stats(Event::createAndTrigger(
- $this->_event, $this, array($this, 'makeDefaultCacheDecision'))
+ if ($this->getEvent()) {
+ return $this->stats(
+ Event::createAndTrigger(
+ $this->getEvent(),
+ $this,
+ array($this, 'makeDefaultCacheDecision')
+ )
);
}
@@ -105,7 +109,6 @@ class Cache
*/
public function makeDefaultCacheDecision()
{
-
if ($this->_nocache) {
return false;
} // caching turned off
@@ -170,7 +173,7 @@ class Cache
return false;
}
- return io_savefile($this->cache, $data);
+ return io_saveFile($this->cache, $data);
}
/**
diff --git a/inc/Cache/CacheInstructions.php b/inc/Cache/CacheInstructions.php
index 3c4786105..acd02abae 100644
--- a/inc/Cache/CacheInstructions.php
+++ b/inc/Cache/CacheInstructions.php
@@ -41,6 +41,6 @@ class CacheInstructions extends \dokuwiki\Cache\CacheParser
return false;
}
- return io_savefile($this->cache, serialize($instructions));
+ return io_saveFile($this->cache, serialize($instructions));
}
}
diff --git a/inc/Debug/DebugHelper.php b/inc/Debug/DebugHelper.php
index 3d4b20d62..74dfa9420 100644
--- a/inc/Debug/DebugHelper.php
+++ b/inc/Debug/DebugHelper.php
@@ -84,6 +84,48 @@ class DebugHelper
}
/**
+ * Trigger a custom deprecation event
+ *
+ * Usually dbgDeprecatedFunction() or dbgDeprecatedProperty() should be used instead.
+ * This method is intended only for those situation where they are not applicable.
+ *
+ * @param string $alternative
+ * @param string $deprecatedThing
+ * @param string $caller
+ * @param string $file
+ * @param int $line
+ * @param int $callerOffset How many lines should be removed from the beginning of the backtrace
+ */
+ public static function dbgCustomDeprecationEvent(
+ $alternative,
+ $deprecatedThing,
+ $caller,
+ $file,
+ $line,
+ $callerOffset = 1
+ ) {
+ global $conf;
+ /** @var EventHandler $EVENT_HANDLER */
+ global $EVENT_HANDLER;
+ if (!$conf['allowdebug'] && !$EVENT_HANDLER->hasHandlerForEvent(self::INFO_DEPRECATION_LOG_EVENT)) {
+ // avoid any work if no one cares
+ return;
+ }
+
+ $backtrace = array_slice(debug_backtrace(), $callerOffset);
+
+ self::triggerDeprecationEvent(
+ $backtrace,
+ $alternative,
+ $deprecatedThing,
+ $caller,
+ $file,
+ $line
+ );
+
+ }
+
+ /**
* @param array $backtrace
* @param string $alternative
* @param string $deprecatedThing
diff --git a/inc/Extension/Event.php b/inc/Extension/Event.php
index bbaa52e55..32f346c72 100644
--- a/inc/Extension/Event.php
+++ b/inc/Extension/Event.php
@@ -126,12 +126,7 @@ class Event
}
if ($this->advise_before($enablePrevent) && is_callable($action)) {
- if (is_array($action)) {
- list($obj, $method) = $action;
- $this->result = $obj->$method($this->data);
- } else {
- $this->result = $action($this->data);
- }
+ $this->result = call_user_func_array($action, [&$this->data]);
}
$this->advise_after();
diff --git a/inc/Extension/SyntaxPlugin.php b/inc/Extension/SyntaxPlugin.php
index e5dda9bdc..ea8f51b4d 100644
--- a/inc/Extension/SyntaxPlugin.php
+++ b/inc/Extension/SyntaxPlugin.php
@@ -2,8 +2,8 @@
namespace dokuwiki\Extension;
-use \Doku_Handler;
-use \Doku_Renderer;
+use Doku_Handler;
+use Doku_Renderer;
/**
* Syntax Plugin Prototype
diff --git a/inc/Form/LegacyForm.php b/inc/Form/LegacyForm.php
index 1b47ba204..b30c8df9a 100644
--- a/inc/Form/LegacyForm.php
+++ b/inc/Form/LegacyForm.php
@@ -116,7 +116,7 @@ class LegacyForm extends Form {
$control = array();
foreach($legacy as $key => $val) {
- if($key{0} == '_') {
+ if($key[0] == '_') {
$control[substr($key, 1)] = $val;
} elseif($key == 'name') {
$control[$key] = $val;
diff --git a/inc/IXR_Library.php b/inc/IXR_Library.php
index e671b6880..bb1655f10 100644
--- a/inc/IXR_Library.php
+++ b/inc/IXR_Library.php
@@ -822,6 +822,7 @@ EOD;
*/
class IXR_Date {
+ const XMLRPC_ISO8601 = "Ymd\TH:i:sO" ;
/** @var DateTime */
protected $date;
@@ -861,7 +862,7 @@ class IXR_Date {
* @return string
*/
public function getIso() {
- return $this->date->format(DateTime::ISO8601);
+ return $this->date->format(self::XMLRPC_ISO8601);
}
/**
diff --git a/inc/JpegMeta.php b/inc/JpegMeta.php
index b11f07145..9ed1e2db4 100644
--- a/inc/JpegMeta.php
+++ b/inc/JpegMeta.php
@@ -414,7 +414,7 @@ class JpegMeta {
// make sure datetimes are in correct format
if(strlen($field) >= 8 && strtolower(substr($field, 0, 8)) == 'datetime') {
- if(strlen($value) < 8 || $value{4} != ':' || $value{7} != ':') {
+ if(strlen($value) < 8 || $value[4] != ':' || $value[7] != ':') {
$value = date('Y:m:d H:i:s', strtotime($value));
}
}
@@ -649,8 +649,8 @@ class JpegMeta {
$dates['ExifDateTime'] = $this->_info['exif']['DateTime'];
$aux = $this->_info['exif']['DateTime'];
- $aux{4} = "-";
- $aux{7} = "-";
+ $aux[4] = "-";
+ $aux[7] = "-";
$t = strtotime($aux);
if ($t && $t > $latestTime) {
@@ -668,8 +668,8 @@ class JpegMeta {
$dates['ExifDateTimeOriginal'] = $this->_info['exif']['DateTime'];
$aux = $this->_info['exif']['DateTimeOriginal'];
- $aux{4} = "-";
- $aux{7} = "-";
+ $aux[4] = "-";
+ $aux[7] = "-";
$t = strtotime($aux);
if ($t && $t > $latestTime) {
@@ -687,8 +687,8 @@ class JpegMeta {
$dates['ExifDateTimeDigitized'] = $this->_info['exif']['DateTime'];
$aux = $this->_info['exif']['DateTimeDigitized'];
- $aux{4} = "-";
- $aux{7} = "-";
+ $aux[4] = "-";
+ $aux[7] = "-";
$t = strtotime($aux);
if ($t && $t > $latestTime) {
@@ -2402,7 +2402,7 @@ class JpegMeta {
$pos += 1;
$header = '';
for ($i = 0; $i < $strlen; $i++) {
- $header .= $data{$pos + $i};
+ $header .= $data[$pos + $i];
}
$pos += $strlen + 1 - ($strlen % 2); // The string is padded to even length, counting the length byte itself
@@ -2983,7 +2983,7 @@ class JpegMeta {
* @return int
*/
function _getByte(&$data, $pos) {
- return ord($data{$pos});
+ return ord($data[$pos]);
}
/*************************************************************/
@@ -2999,7 +2999,7 @@ class JpegMeta {
function _putByte(&$data, $pos, $val) {
$val = intval($val);
- $data{$pos} = chr($val);
+ $data[$pos] = chr($val);
return $pos + 1;
}
@@ -3007,11 +3007,11 @@ class JpegMeta {
/*************************************************************/
function _getShort(&$data, $pos, $bigEndian = true) {
if ($bigEndian) {
- return (ord($data{$pos}) << 8)
- + ord($data{$pos + 1});
+ return (ord($data[$pos]) << 8)
+ + ord($data[$pos + 1]);
} else {
- return ord($data{$pos})
- + (ord($data{$pos + 1}) << 8);
+ return ord($data[$pos])
+ + (ord($data[$pos + 1]) << 8);
}
}
@@ -3020,11 +3020,11 @@ class JpegMeta {
$val = intval($val);
if ($bigEndian) {
- $data{$pos + 0} = chr(($val & 0x0000FF00) >> 8);
- $data{$pos + 1} = chr(($val & 0x000000FF) >> 0);
+ $data[$pos + 0] = chr(($val & 0x0000FF00) >> 8);
+ $data[$pos + 1] = chr(($val & 0x000000FF) >> 0);
} else {
- $data{$pos + 0} = chr(($val & 0x00FF) >> 0);
- $data{$pos + 1} = chr(($val & 0xFF00) >> 8);
+ $data[$pos + 0] = chr(($val & 0x00FF) >> 0);
+ $data[$pos + 1] = chr(($val & 0xFF00) >> 8);
}
return $pos + 2;
@@ -3042,15 +3042,15 @@ class JpegMeta {
*/
function _getLong(&$data, $pos, $bigEndian = true) {
if ($bigEndian) {
- return (ord($data{$pos}) << 24)
- + (ord($data{$pos + 1}) << 16)
- + (ord($data{$pos + 2}) << 8)
- + ord($data{$pos + 3});
+ return (ord($data[$pos]) << 24)
+ + (ord($data[$pos + 1]) << 16)
+ + (ord($data[$pos + 2]) << 8)
+ + ord($data[$pos + 3]);
} else {
- return ord($data{$pos})
- + (ord($data{$pos + 1}) << 8)
- + (ord($data{$pos + 2}) << 16)
- + (ord($data{$pos + 3}) << 24);
+ return ord($data[$pos])
+ + (ord($data[$pos + 1]) << 8)
+ + (ord($data[$pos + 2]) << 16)
+ + (ord($data[$pos + 3]) << 24);
}
}
@@ -3069,15 +3069,15 @@ class JpegMeta {
$val = intval($val);
if ($bigEndian) {
- $data{$pos + 0} = chr(($val & 0xFF000000) >> 24);
- $data{$pos + 1} = chr(($val & 0x00FF0000) >> 16);
- $data{$pos + 2} = chr(($val & 0x0000FF00) >> 8);
- $data{$pos + 3} = chr(($val & 0x000000FF) >> 0);
+ $data[$pos + 0] = chr(($val & 0xFF000000) >> 24);
+ $data[$pos + 1] = chr(($val & 0x00FF0000) >> 16);
+ $data[$pos + 2] = chr(($val & 0x0000FF00) >> 8);
+ $data[$pos + 3] = chr(($val & 0x000000FF) >> 0);
} else {
- $data{$pos + 0} = chr(($val & 0x000000FF) >> 0);
- $data{$pos + 1} = chr(($val & 0x0000FF00) >> 8);
- $data{$pos + 2} = chr(($val & 0x00FF0000) >> 16);
- $data{$pos + 3} = chr(($val & 0xFF000000) >> 24);
+ $data[$pos + 0] = chr(($val & 0x000000FF) >> 0);
+ $data[$pos + 1] = chr(($val & 0x0000FF00) >> 8);
+ $data[$pos + 2] = chr(($val & 0x00FF0000) >> 16);
+ $data[$pos + 3] = chr(($val & 0xFF000000) >> 24);
}
return $pos + 4;
@@ -3089,10 +3089,10 @@ class JpegMeta {
$max = strlen($data);
while ($pos < $max) {
- if (ord($data{$pos}) == 0) {
+ if (ord($data[$pos]) == 0) {
return $str;
} else {
- $str .= $data{$pos};
+ $str .= $data[$pos];
}
$pos++;
}
@@ -3114,7 +3114,7 @@ class JpegMeta {
function _putString(&$data, $pos, &$str) {
$len = strlen($str);
for ($i = 0; $i < $len; $i++) {
- $data{$pos + $i} = $str{$i};
+ $data[$pos + $i] = $str[$i];
}
return $pos + $len;
@@ -3138,7 +3138,7 @@ class JpegMeta {
echo sprintf('%04d', $count) . ': ';
}
- $c = ord($data{$start});
+ $c = ord($data[$start]);
$count++;
$start++;
diff --git a/inc/Mailer.class.php b/inc/Mailer.class.php
index 328073bc1..db9a2bdc2 100644
--- a/inc/Mailer.class.php
+++ b/inc/Mailer.class.php
@@ -350,7 +350,7 @@ class Mailer {
* addresses. Addresses must be separated by a comma. If the display
* name includes a comma then it MUST be properly enclosed by '"' to
* prevent spliting at the wrong point.
- *
+ *
* Example:
* cc("föö <foo@bar.com>, me@somewhere.com","TBcc");
* to("foo, Dr." <foo@bar.com>, me@somewhere.com");
@@ -635,6 +635,8 @@ class Mailer {
$ip = clientIP();
$cip = gethostsbyaddrs($ip);
+ $name = isset($INFO) ? $INFO['userinfo']['name'] : '';
+ $mail = isset($INFO) ? $INFO['userinfo']['mail'] : '';
$this->replacements['text'] = array(
'DATE' => dformat(),
@@ -644,8 +646,8 @@ class Mailer {
'TITLE' => $conf['title'],
'DOKUWIKIURL' => DOKU_URL,
'USER' => $INPUT->server->str('REMOTE_USER'),
- 'NAME' => $INFO['userinfo']['name'],
- 'MAIL' => $INFO['userinfo']['mail']
+ 'NAME' => $name,
+ 'MAIL' => $mail
);
$signature = str_replace(
'@DOKUWIKIURL@',
@@ -662,9 +664,9 @@ class Mailer {
'TITLE' => hsc($conf['title']),
'DOKUWIKIURL' => '<a href="' . DOKU_URL . '">' . DOKU_URL . '</a>',
'USER' => hsc($INPUT->server->str('REMOTE_USER')),
- 'NAME' => hsc($INFO['userinfo']['name']),
- 'MAIL' => '<a href="mailto:"' . hsc($INFO['userinfo']['mail']) . '">' .
- hsc($INFO['userinfo']['mail']) . '</a>'
+ 'NAME' => hsc($name),
+ 'MAIL' => '<a href="mailto:"' . hsc($mail) . '">' .
+ hsc($mail) . '</a>'
);
$signature = $lang['email_signature_text'];
if(!empty($lang['email_signature_html'])) {
diff --git a/inc/Menu/Item/AbstractItem.php b/inc/Menu/Item/AbstractItem.php
index 45ead5562..c6b04bfd3 100644
--- a/inc/Menu/Item/AbstractItem.php
+++ b/inc/Menu/Item/AbstractItem.php
@@ -114,7 +114,7 @@ abstract class AbstractItem {
* @return string
*/
public function getLink() {
- if($this->id[0] == '#') {
+ if($this->id && $this->id[0] == '#') {
return $this->id;
} else {
return wl($this->id, $this->params, false, '&');
diff --git a/inc/Parsing/Parser.php b/inc/Parsing/Parser.php
index b2070569f..63f014161 100644
--- a/inc/Parsing/Parser.php
+++ b/inc/Parsing/Parser.php
@@ -107,7 +107,21 @@ class Parser {
// Normalize CRs and pad doc
$doc = "\n" . str_replace("\r\n", "\n", $doc) . "\n";
$this->lexer->parse($doc);
- $this->handler->finalize();
+
+ if (!method_exists($this->handler, 'finalize')) {
+ /** @deprecated 2019-10 we have a legacy handler from a plugin, assume legacy _finalize exists */
+
+ \dokuwiki\Debug\DebugHelper::dbgCustomDeprecationEvent(
+ 'finalize()',
+ get_class($this->handler) . '::_finalize()',
+ __METHOD__,
+ __FILE__,
+ __LINE__
+ );
+ $this->handler->_finalize();
+ } else {
+ $this->handler->finalize();
+ }
return $this->handler->calls;
}
diff --git a/inc/PassHash.php b/inc/PassHash.php
index 8ac623cd1..c0e61f409 100644
--- a/inc/PassHash.php
+++ b/inc/PassHash.php
@@ -77,6 +77,11 @@ class PassHash {
$method = 'sha512';
$salt = $m[2];
$magic = $m[1];
+ } elseif(preg_match('/^\$(argon2id?)/', $hash, $m)) {
+ if(!defined('PASSWORD_'.strtoupper($m[1]))) {
+ throw new \Exception('This PHP installation has no '.strtoupper($m[1]).' support');
+ }
+ return password_verify($clear,$hash);
} elseif($len == 32) {
$method = 'md5';
} elseif($len == 40) {
@@ -206,7 +211,7 @@ class PassHash {
$text .= substr($bin, 0, min(16, $i));
}
for($i = $len; $i > 0; $i >>= 1) {
- $text .= ($i & 1) ? chr(0) : $clear{0};
+ $text .= ($i & 1) ? chr(0) : $clear[0];
}
$bin = pack("H32", md5($text));
for($i = 0; $i < 1000; $i++) {
@@ -591,6 +596,43 @@ class PassHash {
return ':B:'.$salt.':'.md5($salt.'-'.md5($clear));
}
+
+ /**
+ * Password hashing method 'argon2i'
+ *
+ * Uses php's own password_hash function to create argon2i password hash
+ * Default Cost and thread options are used for now.
+ *
+ * @link https://www.php.net/manual/de/function.password-hash.php
+ *
+ * @param string $clear The clear text to hash
+ * @return string Hashed password
+ */
+ public function hash_argon2i($clear) {
+ if(!defined('PASSWORD_ARGON2I')) {
+ throw new \Exception('This PHP installation has no ARGON2I support');
+ }
+ return password_hash($clear,PASSWORD_ARGON2I);
+ }
+
+ /**
+ * Password hashing method 'argon2id'
+ *
+ * Uses php's own password_hash function to create argon2id password hash
+ * Default Cost and thread options are used for now.
+ *
+ * @link https://www.php.net/manual/de/function.password-hash.php
+ *
+ * @param string $clear The clear text to hash
+ * @return string Hashed password
+ */
+ public function hash_argon2id($clear) {
+ if(!defined('PASSWORD_ARGON2ID')) {
+ throw new \Exception('This PHP installation has no ARGON2ID support');
+ }
+ return password_hash($clear,PASSWORD_ARGON2ID);
+ }
+
/**
* Wraps around native hash_hmac() or reimplents it
*
diff --git a/inc/Remote/ApiCore.php b/inc/Remote/ApiCore.php
index 9a041452d..12a32b8a4 100644
--- a/inc/Remote/ApiCore.php
+++ b/inc/Remote/ApiCore.php
@@ -489,7 +489,7 @@ class ApiCore
$data = array(
'name' => $id,
'lastModified' => $this->api->toDate($rev),
- 'author' => (($info['user']) ? $info['user'] : $info['ip']),
+ 'author' => is_array($info) ? (($info['user']) ? $info['user'] : $info['ip']) : null,
'version' => $rev
);
diff --git a/inc/Remote/XmlRpcServer.php b/inc/Remote/XmlRpcServer.php
index 1b0097856..0a16af1cc 100644
--- a/inc/Remote/XmlRpcServer.php
+++ b/inc/Remote/XmlRpcServer.php
@@ -12,12 +12,12 @@ class XmlRpcServer extends \IXR_Server
/**
* Constructor. Register methods and run Server
*/
- public function __construct()
+ public function __construct($wait=false)
{
$this->remote = new Api();
$this->remote->setDateTransformation(array($this, 'toDate'));
$this->remote->setFileTransformation(array($this, 'toFile'));
- parent::__construct();
+ parent::__construct(false, false, $wait);
}
/**
diff --git a/inc/Search/Indexer.php b/inc/Search/Indexer.php
new file mode 100644
index 000000000..a29e5b28b
--- /dev/null
+++ b/inc/Search/Indexer.php
@@ -0,0 +1,1214 @@
+<?php
+
+namespace dokuwiki\Search;
+
+use dokuwiki\Extension\Event;
+
+/**
+ * Class that encapsulates operations on the indexer database.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+class Indexer {
+ /**
+ * @var array $pidCache Cache for getPID()
+ */
+ protected $pidCache = array();
+
+ /**
+ * Adds the contents of a page to the fulltext index
+ *
+ * The added text replaces previous words for the same page.
+ * An empty value erases the page.
+ *
+ * @param string $page a page name
+ * @param string $text the body of the page
+ * @return string|boolean the function completed successfully
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ public function addPageWords($page, $text) {
+ if (!$this->lock())
+ return "locked";
+
+ // load known documents
+ $pid = $this->getPIDNoLock($page);
+ if ($pid === false) {
+ $this->unlock();
+ return false;
+ }
+
+ $pagewords = array();
+ // get word usage in page
+ $words = $this->getPageWords($text);
+ if ($words === false) {
+ $this->unlock();
+ return false;
+ }
+
+ if (!empty($words)) {
+ foreach (array_keys($words) as $wlen) {
+ $index = $this->getIndex('i', $wlen);
+ foreach ($words[$wlen] as $wid => $freq) {
+ $idx = ($wid<count($index)) ? $index[$wid] : '';
+ $index[$wid] = $this->updateTuple($idx, $pid, $freq);
+ $pagewords[] = "$wlen*$wid";
+ }
+ if (!$this->saveIndex('i', $wlen, $index)) {
+ $this->unlock();
+ return false;
+ }
+ }
+ }
+
+ // Remove obsolete index entries
+ $pageword_idx = $this->getIndexKey('pageword', '', $pid);
+ if ($pageword_idx !== '') {
+ $oldwords = explode(':',$pageword_idx);
+ $delwords = array_diff($oldwords, $pagewords);
+ $upwords = array();
+ foreach ($delwords as $word) {
+ if ($word != '') {
+ list($wlen, $wid) = explode('*', $word);
+ $wid = (int)$wid;
+ $upwords[$wlen][] = $wid;
+ }
+ }
+ foreach ($upwords as $wlen => $widx) {
+ $index = $this->getIndex('i', $wlen);
+ foreach ($widx as $wid) {
+ $index[$wid] = $this->updateTuple($index[$wid], $pid, 0);
+ }
+ $this->saveIndex('i', $wlen, $index);
+ }
+ }
+ // Save the reverse index
+ $pageword_idx = join(':', $pagewords);
+ if (!$this->saveIndexKey('pageword', '', $pid, $pageword_idx)) {
+ $this->unlock();
+ return false;
+ }
+
+ $this->unlock();
+ return true;
+ }
+
+ /**
+ * Split the words in a page and add them to the index.
+ *
+ * @param string $text content of the page
+ * @return array list of word IDs and number of times used
+ *
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Christopher Smith <chris@jalakai.co.uk>
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ protected function getPageWords($text) {
+
+ $tokens = $this->tokenizer($text);
+ $tokens = array_count_values($tokens); // count the frequency of each token
+
+ $words = array();
+ foreach ($tokens as $w=>$c) {
+ $l = wordlen($w);
+ if (isset($words[$l])){
+ $words[$l][$w] = $c + (isset($words[$l][$w]) ? $words[$l][$w] : 0);
+ }else{
+ $words[$l] = array($w => $c);
+ }
+ }
+
+ // arrive here with $words = array(wordlen => array(word => frequency))
+ $word_idx_modified = false;
+ $index = array(); //resulting index
+ foreach (array_keys($words) as $wlen) {
+ $word_idx = $this->getIndex('w', $wlen);
+ foreach ($words[$wlen] as $word => $freq) {
+ $word = (string)$word;
+ $wid = array_search($word, $word_idx, true);
+ if ($wid === false) {
+ $wid = count($word_idx);
+ $word_idx[] = $word;
+ $word_idx_modified = true;
+ }
+ if (!isset($index[$wlen]))
+ $index[$wlen] = array();
+ $index[$wlen][$wid] = $freq;
+ }
+ // save back the word index
+ if ($word_idx_modified && !$this->saveIndex('w', $wlen, $word_idx))
+ return false;
+ }
+
+ return $index;
+ }
+
+ /**
+ * Add/update keys to/of the metadata index.
+ *
+ * Adding new keys does not remove other keys for the page.
+ * An empty value will erase the key.
+ * The $key parameter can be an array to add multiple keys. $value will
+ * not be used if $key is an array.
+ *
+ * @param string $page a page name
+ * @param mixed $key a key string or array of key=>value pairs
+ * @param mixed $value the value or list of values
+ * @return boolean|string the function completed successfully
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ * @author Michael Hamann <michael@content-space.de>
+ */
+ public function addMetaKeys($page, $key, $value=null) {
+ if (!is_array($key)) {
+ $key = array($key => $value);
+ } elseif (!is_null($value)) {
+ // $key is array, but $value is not null
+ trigger_error("array passed to addMetaKeys but value is not null", E_USER_WARNING);
+ }
+
+ if (!$this->lock())
+ return "locked";
+
+ // load known documents
+ $pid = $this->getPIDNoLock($page);
+ if ($pid === false) {
+ $this->unlock();
+ return false;
+ }
+
+ // Special handling for titles so the index file is simpler
+ if (array_key_exists('title', $key)) {
+ $value = $key['title'];
+ if (is_array($value)) {
+ $value = $value[0];
+ }
+ $this->saveIndexKey('title', '', $pid, $value);
+ unset($key['title']);
+ }
+
+ foreach ($key as $name => $values) {
+ $metaname = idx_cleanName($name);
+ $this->addIndexKey('metadata', '', $metaname);
+ $metaidx = $this->getIndex($metaname.'_i', '');
+ $metawords = $this->getIndex($metaname.'_w', '');
+ $addwords = false;
+
+ if (!is_array($values)) $values = array($values);
+
+ $val_idx = $this->getIndexKey($metaname.'_p', '', $pid);
+ if ($val_idx !== '') {
+ $val_idx = explode(':', $val_idx);
+ // -1 means remove, 0 keep, 1 add
+ $val_idx = array_combine($val_idx, array_fill(0, count($val_idx), -1));
+ } else {
+ $val_idx = array();
+ }
+
+ foreach ($values as $val) {
+ $val = (string)$val;
+ if ($val !== "") {
+ $id = array_search($val, $metawords, true);
+ if ($id === false) {
+ // didn't find $val, so we'll add it to the end of metawords and create a placeholder in metaidx
+ $id = count($metawords);
+ $metawords[$id] = $val;
+ $metaidx[$id] = '';
+ $addwords = true;
+ }
+ // test if value is already in the index
+ if (isset($val_idx[$id]) && $val_idx[$id] <= 0){
+ $val_idx[$id] = 0;
+ } else { // else add it
+ $val_idx[$id] = 1;
+ }
+ }
+ }
+
+ if ($addwords) {
+ $this->saveIndex($metaname.'_w', '', $metawords);
+ }
+ $vals_changed = false;
+ foreach ($val_idx as $id => $action) {
+ if ($action == -1) {
+ $metaidx[$id] = $this->updateTuple($metaidx[$id], $pid, 0);
+ $vals_changed = true;
+ unset($val_idx[$id]);
+ } elseif ($action == 1) {
+ $metaidx[$id] = $this->updateTuple($metaidx[$id], $pid, 1);
+ $vals_changed = true;
+ }
+ }
+
+ if ($vals_changed) {
+ $this->saveIndex($metaname.'_i', '', $metaidx);
+ $val_idx = implode(':', array_keys($val_idx));
+ $this->saveIndexKey($metaname.'_p', '', $pid, $val_idx);
+ }
+
+ unset($metaidx);
+ unset($metawords);
+ }
+
+ $this->unlock();
+ return true;
+ }
+
+ /**
+ * Rename a page in the search index without changing the indexed content. This function doesn't check if the
+ * old or new name exists in the filesystem. It returns an error if the old page isn't in the page list of the
+ * indexer and it deletes all previously indexed content of the new page.
+ *
+ * @param string $oldpage The old page name
+ * @param string $newpage The new page name
+ * @return string|bool If the page was successfully renamed, can be a message in the case of an error
+ */
+ public function renamePage($oldpage, $newpage) {
+ if (!$this->lock()) return 'locked';
+
+ $pages = $this->getPages();
+
+ $id = array_search($oldpage, $pages, true);
+ if ($id === false) {
+ $this->unlock();
+ return 'page is not in index';
+ }
+
+ $new_id = array_search($newpage, $pages, true);
+ if ($new_id !== false) {
+ // make sure the page is not in the index anymore
+ if ($this->deletePageNoLock($newpage) !== true) {
+ return false;
+ }
+
+ $pages[$new_id] = 'deleted:'.time().rand(0, 9999);
+ }
+
+ $pages[$id] = $newpage;
+
+ // update index
+ if (!$this->saveIndex('page', '', $pages)) {
+ $this->unlock();
+ return false;
+ }
+
+ // reset the pid cache
+ $this->pidCache = array();
+
+ $this->unlock();
+ return true;
+ }
+
+ /**
+ * Renames a meta value in the index. This doesn't change the meta value in the pages, it assumes that all pages
+ * will be updated.
+ *
+ * @param string $key The metadata key of which a value shall be changed
+ * @param string $oldvalue The old value that shall be renamed
+ * @param string $newvalue The new value to which the old value shall be renamed, if exists values will be merged
+ * @return bool|string If renaming the value has been successful, false or error message on error.
+ */
+ public function renameMetaValue($key, $oldvalue, $newvalue) {
+ if (!$this->lock()) return 'locked';
+
+ // change the relation references index
+ $metavalues = $this->getIndex($key, '_w');
+ $oldid = array_search($oldvalue, $metavalues, true);
+ if ($oldid !== false) {
+ $newid = array_search($newvalue, $metavalues, true);
+ if ($newid !== false) {
+ // free memory
+ unset ($metavalues);
+
+ // okay, now we have two entries for the same value. we need to merge them.
+ $indexline = $this->getIndexKey($key.'_i', '', $oldid);
+ if ($indexline != '') {
+ $newindexline = $this->getIndexKey($key.'_i', '', $newid);
+ $pagekeys = $this->getIndex($key.'_p', '');
+ $parts = explode(':', $indexline);
+ foreach ($parts as $part) {
+ list($id, $count) = explode('*', $part);
+ $newindexline = $this->updateTuple($newindexline, $id, $count);
+
+ $keyline = explode(':', $pagekeys[$id]);
+ // remove old meta value
+ $keyline = array_diff($keyline, array($oldid));
+ // add new meta value when not already present
+ if (!in_array($newid, $keyline)) {
+ array_push($keyline, $newid);
+ }
+ $pagekeys[$id] = implode(':', $keyline);
+ }
+ $this->saveIndex($key.'_p', '', $pagekeys);
+ unset($pagekeys);
+ $this->saveIndexKey($key.'_i', '', $oldid, '');
+ $this->saveIndexKey($key.'_i', '', $newid, $newindexline);
+ }
+ } else {
+ $metavalues[$oldid] = $newvalue;
+ if (!$this->saveIndex($key.'_w', '', $metavalues)) {
+ $this->unlock();
+ return false;
+ }
+ }
+ }
+
+ $this->unlock();
+ return true;
+ }
+
+ /**
+ * Remove a page from the index
+ *
+ * Erases entries in all known indexes.
+ *
+ * @param string $page a page name
+ * @return string|boolean the function completed successfully
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ public function deletePage($page) {
+ if (!$this->lock())
+ return "locked";
+
+ $result = $this->deletePageNoLock($page);
+
+ $this->unlock();
+
+ return $result;
+ }
+
+ /**
+ * Remove a page from the index without locking the index, only use this function if the index is already locked
+ *
+ * Erases entries in all known indexes.
+ *
+ * @param string $page a page name
+ * @return boolean the function completed successfully
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ protected function deletePageNoLock($page) {
+ // load known documents
+ $pid = $this->getPIDNoLock($page);
+ if ($pid === false) {
+ return false;
+ }
+
+ // Remove obsolete index entries
+ $pageword_idx = $this->getIndexKey('pageword', '', $pid);
+ if ($pageword_idx !== '') {
+ $delwords = explode(':',$pageword_idx);
+ $upwords = array();
+ foreach ($delwords as $word) {
+ if ($word != '') {
+ list($wlen,$wid) = explode('*', $word);
+ $wid = (int)$wid;
+ $upwords[$wlen][] = $wid;
+ }
+ }
+ foreach ($upwords as $wlen => $widx) {
+ $index = $this->getIndex('i', $wlen);
+ foreach ($widx as $wid) {
+ $index[$wid] = $this->updateTuple($index[$wid], $pid, 0);
+ }
+ $this->saveIndex('i', $wlen, $index);
+ }
+ }
+ // Save the reverse index
+ if (!$this->saveIndexKey('pageword', '', $pid, "")) {
+ return false;
+ }
+
+ $this->saveIndexKey('title', '', $pid, "");
+ $keyidx = $this->getIndex('metadata', '');
+ foreach ($keyidx as $metaname) {
+ $val_idx = explode(':', $this->getIndexKey($metaname.'_p', '', $pid));
+ $meta_idx = $this->getIndex($metaname.'_i', '');
+ foreach ($val_idx as $id) {
+ if ($id === '') continue;
+ $meta_idx[$id] = $this->updateTuple($meta_idx[$id], $pid, 0);
+ }
+ $this->saveIndex($metaname.'_i', '', $meta_idx);
+ $this->saveIndexKey($metaname.'_p', '', $pid, '');
+ }
+
+ return true;
+ }
+
+ /**
+ * Clear the whole index
+ *
+ * @return bool If the index has been cleared successfully
+ */
+ public function clear() {
+ global $conf;
+
+ if (!$this->lock()) return false;
+
+ @unlink($conf['indexdir'].'/page.idx');
+ @unlink($conf['indexdir'].'/title.idx');
+ @unlink($conf['indexdir'].'/pageword.idx');
+ @unlink($conf['indexdir'].'/metadata.idx');
+ $dir = @opendir($conf['indexdir']);
+ if($dir!==false){
+ while(($f = readdir($dir)) !== false){
+ if(substr($f,-4)=='.idx' &&
+ (substr($f,0,1)=='i' || substr($f,0,1)=='w'
+ || substr($f,-6)=='_w.idx' || substr($f,-6)=='_i.idx' || substr($f,-6)=='_p.idx'))
+ @unlink($conf['indexdir']."/$f");
+ }
+ }
+ @unlink($conf['indexdir'].'/lengths.idx');
+
+ // clear the pid cache
+ $this->pidCache = array();
+
+ $this->unlock();
+ return true;
+ }
+
+ /**
+ * Split the text into words for fulltext search
+ *
+ * TODO: does this also need &$stopwords ?
+ *
+ * @triggers INDEXER_TEXT_PREPARE
+ * This event allows plugins to modify the text before it gets tokenized.
+ * Plugins intercepting this event should also intercept INDEX_VERSION_GET
+ *
+ * @param string $text plain text
+ * @param boolean $wc are wildcards allowed?
+ * @return array list of words in the text
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ public function tokenizer($text, $wc=false) {
+ $wc = ($wc) ? '' : '\*';
+ $stopwords =& idx_get_stopwords();
+
+ // prepare the text to be tokenized
+ $evt = new Event('INDEXER_TEXT_PREPARE', $text);
+ if ($evt->advise_before(true)) {
+ if (preg_match('/[^0-9A-Za-z ]/u', $text)) {
+ $text = \dokuwiki\Utf8\Asian::separateAsianWords($text);
+ }
+ }
+ $evt->advise_after();
+ unset($evt);
+
+ $text = strtr($text,
+ array(
+ "\r" => ' ',
+ "\n" => ' ',
+ "\t" => ' ',
+ "\xC2\xAD" => '', //soft-hyphen
+ )
+ );
+ if (preg_match('/[^0-9A-Za-z ]/u', $text))
+ $text = \dokuwiki\Utf8\Clean::stripspecials($text, ' ', '\._\-:'.$wc);
+
+ $wordlist = explode(' ', $text);
+ foreach ($wordlist as $i => $word) {
+ $wordlist[$i] = (preg_match('/[^0-9A-Za-z]/u', $word)) ?
+ \dokuwiki\Utf8\PhpString::strtolower($word) : strtolower($word);
+ }
+
+ foreach ($wordlist as $i => $word) {
+ if ((!is_numeric($word) && strlen($word) < IDX_MINWORDLENGTH)
+ || array_search($word, $stopwords, true) !== false)
+ unset($wordlist[$i]);
+ }
+ return array_values($wordlist);
+ }
+
+ /**
+ * Get the numeric PID of a page
+ *
+ * @param string $page The page to get the PID for
+ * @return bool|int The page id on success, false on error
+ */
+ public function getPID($page) {
+ // return PID without locking when it is in the cache
+ if (isset($this->pidCache[$page])) return $this->pidCache[$page];
+
+ if (!$this->lock())
+ return false;
+
+ // load known documents
+ $pid = $this->getPIDNoLock($page);
+ if ($pid === false) {
+ $this->unlock();
+ return false;
+ }
+
+ $this->unlock();
+ return $pid;
+ }
+
+ /**
+ * Get the numeric PID of a page without locking the index.
+ * Only use this function when the index is already locked.
+ *
+ * @param string $page The page to get the PID for
+ * @return bool|int The page id on success, false on error
+ */
+ protected function getPIDNoLock($page) {
+ // avoid expensive addIndexKey operation for the most recently requested pages by using a cache
+ if (isset($this->pidCache[$page])) return $this->pidCache[$page];
+ $pid = $this->addIndexKey('page', '', $page);
+ // limit cache to 10 entries by discarding the oldest element as in DokuWiki usually only the most recently
+ // added item will be requested again
+ if (count($this->pidCache) > 10) array_shift($this->pidCache);
+ $this->pidCache[$page] = $pid;
+ return $pid;
+ }
+
+ /**
+ * Get the page id of a numeric PID
+ *
+ * @param int $pid The PID to get the page id for
+ * @return string The page id
+ */
+ public function getPageFromPID($pid) {
+ return $this->getIndexKey('page', '', $pid);
+ }
+
+ /**
+ * Find pages in the fulltext index containing the words,
+ *
+ * The search words must be pre-tokenized, meaning only letters and
+ * numbers with an optional wildcard
+ *
+ * The returned array will have the original tokens as key. The values
+ * in the returned list is an array with the page names as keys and the
+ * number of times that token appears on the page as value.
+ *
+ * @param array $tokens list of words to search for
+ * @return array list of page names with usage counts
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ */
+ public function lookup(&$tokens) {
+ $result = array();
+ $wids = $this->getIndexWords($tokens, $result);
+ if (empty($wids)) return array();
+ // load known words and documents
+ $page_idx = $this->getIndex('page', '');
+ $docs = array();
+ foreach (array_keys($wids) as $wlen) {
+ $wids[$wlen] = array_unique($wids[$wlen]);
+ $index = $this->getIndex('i', $wlen);
+ foreach($wids[$wlen] as $ixid) {
+ if ($ixid < count($index))
+ $docs["$wlen*$ixid"] = $this->parseTuples($page_idx, $index[$ixid]);
+ }
+ }
+ // merge found pages into final result array
+ $final = array();
+ foreach ($result as $word => $res) {
+ $final[$word] = array();
+ foreach ($res as $wid) {
+ // handle the case when ($ixid < count($index)) has been false
+ // and thus $docs[$wid] hasn't been set.
+ if (!isset($docs[$wid])) continue;
+ $hits = &$docs[$wid];
+ foreach ($hits as $hitkey => $hitcnt) {
+ // make sure the document still exists
+ if (!page_exists($hitkey, '', false)) continue;
+ if (!isset($final[$word][$hitkey]))
+ $final[$word][$hitkey] = $hitcnt;
+ else
+ $final[$word][$hitkey] += $hitcnt;
+ }
+ }
+ }
+ return $final;
+ }
+
+ /**
+ * Find pages containing a metadata key.
+ *
+ * The metadata values are compared as case-sensitive strings. Pass a
+ * callback function that returns true or false to use a different
+ * comparison function. The function will be called with the $value being
+ * searched for as the first argument, and the word in the index as the
+ * second argument. The function preg_match can be used directly if the
+ * values are regexes.
+ *
+ * @param string $key name of the metadata key to look for
+ * @param string $value search term to look for, must be a string or array of strings
+ * @param callback $func comparison function
+ * @return array lists with page names, keys are query values if $value is array
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ * @author Michael Hamann <michael@content-space.de>
+ */
+ public function lookupKey($key, &$value, $func=null) {
+ if (!is_array($value))
+ $value_array = array($value);
+ else
+ $value_array =& $value;
+
+ // the matching ids for the provided value(s)
+ $value_ids = array();
+
+ $metaname = idx_cleanName($key);
+
+ // get all words in order to search the matching ids
+ if ($key == 'title') {
+ $words = $this->getIndex('title', '');
+ } else {
+ $words = $this->getIndex($metaname.'_w', '');
+ }
+
+ if (!is_null($func)) {
+ foreach ($value_array as $val) {
+ foreach ($words as $i => $word) {
+ if (call_user_func_array($func, array($val, $word)))
+ $value_ids[$i][] = $val;
+ }
+ }
+ } else {
+ foreach ($value_array as $val) {
+ $xval = $val;
+ $caret = '^';
+ $dollar = '$';
+ // check for wildcards
+ if (substr($xval, 0, 1) == '*') {
+ $xval = substr($xval, 1);
+ $caret = '';
+ }
+ if (substr($xval, -1, 1) == '*') {
+ $xval = substr($xval, 0, -1);
+ $dollar = '';
+ }
+ if (!$caret || !$dollar) {
+ $re = $caret.preg_quote($xval, '/').$dollar;
+ foreach(array_keys(preg_grep('/'.$re.'/', $words)) as $i)
+ $value_ids[$i][] = $val;
+ } else {
+ if (($i = array_search($val, $words, true)) !== false)
+ $value_ids[$i][] = $val;
+ }
+ }
+ }
+
+ unset($words); // free the used memory
+
+ // initialize the result so it won't be null
+ $result = array();
+ foreach ($value_array as $val) {
+ $result[$val] = array();
+ }
+
+ $page_idx = $this->getIndex('page', '');
+
+ // Special handling for titles
+ if ($key == 'title') {
+ foreach ($value_ids as $pid => $val_list) {
+ $page = $page_idx[$pid];
+ foreach ($val_list as $val) {
+ $result[$val][] = $page;
+ }
+ }
+ } else {
+ // load all lines and pages so the used lines can be taken and matched with the pages
+ $lines = $this->getIndex($metaname.'_i', '');
+
+ foreach ($value_ids as $value_id => $val_list) {
+ // parse the tuples of the form page_id*1:page2_id*1 and so on, return value
+ // is an array with page_id => 1, page2_id => 1 etc. so take the keys only
+ $pages = array_keys($this->parseTuples($page_idx, $lines[$value_id]));
+ foreach ($val_list as $val) {
+ $result[$val] = array_merge($result[$val], $pages);
+ }
+ }
+ }
+ if (!is_array($value)) $result = $result[$value];
+ return $result;
+ }
+
+ /**
+ * Find the index ID of each search term.
+ *
+ * The query terms should only contain valid characters, with a '*' at
+ * either the beginning or end of the word (or both).
+ * The $result parameter can be used to merge the index locations with
+ * the appropriate query term.
+ *
+ * @param array $words The query terms.
+ * @param array $result Set to word => array("length*id" ...)
+ * @return array Set to length => array(id ...)
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ protected function getIndexWords(&$words, &$result) {
+ $tokens = array();
+ $tokenlength = array();
+ $tokenwild = array();
+ foreach ($words as $word) {
+ $result[$word] = array();
+ $caret = '^';
+ $dollar = '$';
+ $xword = $word;
+ $wlen = wordlen($word);
+
+ // check for wildcards
+ if (substr($xword, 0, 1) == '*') {
+ $xword = substr($xword, 1);
+ $caret = '';
+ $wlen -= 1;
+ }
+ if (substr($xword, -1, 1) == '*') {
+ $xword = substr($xword, 0, -1);
+ $dollar = '';
+ $wlen -= 1;
+ }
+ if ($wlen < IDX_MINWORDLENGTH && $caret && $dollar && !is_numeric($xword))
+ continue;
+ if (!isset($tokens[$xword]))
+ $tokenlength[$wlen][] = $xword;
+ if (!$caret || !$dollar) {
+ $re = $caret.preg_quote($xword, '/').$dollar;
+ $tokens[$xword][] = array($word, '/'.$re.'/');
+ if (!isset($tokenwild[$xword]))
+ $tokenwild[$xword] = $wlen;
+ } else {
+ $tokens[$xword][] = array($word, null);
+ }
+ }
+ asort($tokenwild);
+ // $tokens = array( base word => array( [ query term , regexp ] ... ) ... )
+ // $tokenlength = array( base word length => base word ... )
+ // $tokenwild = array( base word => base word length ... )
+ $length_filter = empty($tokenwild) ? $tokenlength : min(array_keys($tokenlength));
+ $indexes_known = $this->indexLengths($length_filter);
+ if (!empty($tokenwild)) sort($indexes_known);
+ // get word IDs
+ $wids = array();
+ foreach ($indexes_known as $ixlen) {
+ $word_idx = $this->getIndex('w', $ixlen);
+ // handle exact search
+ if (isset($tokenlength[$ixlen])) {
+ foreach ($tokenlength[$ixlen] as $xword) {
+ $wid = array_search($xword, $word_idx, true);
+ if ($wid !== false) {
+ $wids[$ixlen][] = $wid;
+ foreach ($tokens[$xword] as $w)
+ $result[$w[0]][] = "$ixlen*$wid";
+ }
+ }
+ }
+ // handle wildcard search
+ foreach ($tokenwild as $xword => $wlen) {
+ if ($wlen >= $ixlen) break;
+ foreach ($tokens[$xword] as $w) {
+ if (is_null($w[1])) continue;
+ foreach(array_keys(preg_grep($w[1], $word_idx)) as $wid) {
+ $wids[$ixlen][] = $wid;
+ $result[$w[0]][] = "$ixlen*$wid";
+ }
+ }
+ }
+ }
+ return $wids;
+ }
+
+ /**
+ * Return a list of all pages
+ * Warning: pages may not exist!
+ *
+ * @param string $key list only pages containing the metadata key (optional)
+ * @return array list of page names
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ public function getPages($key=null) {
+ $page_idx = $this->getIndex('page', '');
+ if (is_null($key)) return $page_idx;
+
+ $metaname = idx_cleanName($key);
+
+ // Special handling for titles
+ if ($key == 'title') {
+ $title_idx = $this->getIndex('title', '');
+ array_splice($page_idx, count($title_idx));
+ foreach ($title_idx as $i => $title)
+ if ($title === "") unset($page_idx[$i]);
+ return array_values($page_idx);
+ }
+
+ $pages = array();
+ $lines = $this->getIndex($metaname.'_i', '');
+ foreach ($lines as $line) {
+ $pages = array_merge($pages, $this->parseTuples($page_idx, $line));
+ }
+ return array_keys($pages);
+ }
+
+ /**
+ * Return a list of words sorted by number of times used
+ *
+ * @param int $min bottom frequency threshold
+ * @param int $max upper frequency limit. No limit if $max<$min
+ * @param int $minlen minimum length of words to count
+ * @param string $key metadata key to list. Uses the fulltext index if not given
+ * @return array list of words as the keys and frequency as values
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ public function histogram($min=1, $max=0, $minlen=3, $key=null) {
+ if ($min < 1)
+ $min = 1;
+ if ($max < $min)
+ $max = 0;
+
+ $result = array();
+
+ if ($key == 'title') {
+ $index = $this->getIndex('title', '');
+ $index = array_count_values($index);
+ foreach ($index as $val => $cnt) {
+ if ($cnt >= $min && (!$max || $cnt <= $max) && strlen($val) >= $minlen)
+ $result[$val] = $cnt;
+ }
+ }
+ elseif (!is_null($key)) {
+ $metaname = idx_cleanName($key);
+ $index = $this->getIndex($metaname.'_i', '');
+ $val_idx = array();
+ foreach ($index as $wid => $line) {
+ $freq = $this->countTuples($line);
+ if ($freq >= $min && (!$max || $freq <= $max))
+ $val_idx[$wid] = $freq;
+ }
+ if (!empty($val_idx)) {
+ $words = $this->getIndex($metaname.'_w', '');
+ foreach ($val_idx as $wid => $freq) {
+ if (strlen($words[$wid]) >= $minlen)
+ $result[$words[$wid]] = $freq;
+ }
+ }
+ }
+ else {
+ $lengths = idx_listIndexLengths();
+ foreach ($lengths as $length) {
+ if ($length < $minlen) continue;
+ $index = $this->getIndex('i', $length);
+ $words = null;
+ foreach ($index as $wid => $line) {
+ $freq = $this->countTuples($line);
+ if ($freq >= $min && (!$max || $freq <= $max)) {
+ if ($words === null)
+ $words = $this->getIndex('w', $length);
+ $result[$words[$wid]] = $freq;
+ }
+ }
+ }
+ }
+
+ arsort($result);
+ return $result;
+ }
+
+ /**
+ * Lock the indexer.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ *
+ * @return bool|string
+ */
+ protected function lock() {
+ global $conf;
+ $status = true;
+ $run = 0;
+ $lock = $conf['lockdir'].'/_indexer.lock';
+ while (!@mkdir($lock, $conf['dmode'])) {
+ usleep(50);
+ if(is_dir($lock) && time()-@filemtime($lock) > 60*5){
+ // looks like a stale lock - remove it
+ if (!@rmdir($lock)) {
+ $status = "removing the stale lock failed";
+ return false;
+ } else {
+ $status = "stale lock removed";
+ }
+ }elseif($run++ == 1000){
+ // we waited 5 seconds for that lock
+ return false;
+ }
+ }
+ if (!empty($conf['dperm'])) {
+ chmod($lock, $conf['dperm']);
+ }
+ return $status;
+ }
+
+ /**
+ * Release the indexer lock.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ *
+ * @return bool
+ */
+ protected function unlock() {
+ global $conf;
+ @rmdir($conf['lockdir'].'/_indexer.lock');
+ return true;
+ }
+
+ /**
+ * Retrieve the entire index.
+ *
+ * The $suffix argument is for an index that is split into
+ * multiple parts. Different index files should use different
+ * base names.
+ *
+ * @param string $idx name of the index
+ * @param string $suffix subpart identifier
+ * @return array list of lines without CR or LF
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ protected function getIndex($idx, $suffix) {
+ global $conf;
+ $fn = $conf['indexdir'].'/'.$idx.$suffix.'.idx';
+ if (!file_exists($fn)) return array();
+ return file($fn, FILE_IGNORE_NEW_LINES);
+ }
+
+ /**
+ * Replace the contents of the index with an array.
+ *
+ * @param string $idx name of the index
+ * @param string $suffix subpart identifier
+ * @param array $lines list of lines without LF
+ * @return bool If saving succeeded
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ protected function saveIndex($idx, $suffix, &$lines) {
+ global $conf;
+ $fn = $conf['indexdir'].'/'.$idx.$suffix;
+ $fh = @fopen($fn.'.tmp', 'w');
+ if (!$fh) return false;
+ fwrite($fh, join("\n", $lines));
+ if (!empty($lines))
+ fwrite($fh, "\n");
+ fclose($fh);
+ if ($conf['fperm'])
+ chmod($fn.'.tmp', $conf['fperm']);
+ io_rename($fn.'.tmp', $fn.'.idx');
+ return true;
+ }
+
+ /**
+ * Retrieve a line from the index.
+ *
+ * @param string $idx name of the index
+ * @param string $suffix subpart identifier
+ * @param int $id the line number
+ * @return string a line with trailing whitespace removed
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ protected function getIndexKey($idx, $suffix, $id) {
+ global $conf;
+ $fn = $conf['indexdir'].'/'.$idx.$suffix.'.idx';
+ if (!file_exists($fn)) return '';
+ $fh = @fopen($fn, 'r');
+ if (!$fh) return '';
+ $ln = -1;
+ while (($line = fgets($fh)) !== false) {
+ if (++$ln == $id) break;
+ }
+ fclose($fh);
+ return rtrim((string)$line);
+ }
+
+ /**
+ * Write a line into the index.
+ *
+ * @param string $idx name of the index
+ * @param string $suffix subpart identifier
+ * @param int $id the line number
+ * @param string $line line to write
+ * @return bool If saving succeeded
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ protected function saveIndexKey($idx, $suffix, $id, $line) {
+ global $conf;
+ if (substr($line, -1) != "\n")
+ $line .= "\n";
+ $fn = $conf['indexdir'].'/'.$idx.$suffix;
+ $fh = @fopen($fn.'.tmp', 'w');
+ if (!$fh) return false;
+ $ih = @fopen($fn.'.idx', 'r');
+ if ($ih) {
+ $ln = -1;
+ while (($curline = fgets($ih)) !== false) {
+ fwrite($fh, (++$ln == $id) ? $line : $curline);
+ }
+ if ($id > $ln) {
+ while ($id > ++$ln)
+ fwrite($fh, "\n");
+ fwrite($fh, $line);
+ }
+ fclose($ih);
+ } else {
+ $ln = -1;
+ while ($id > ++$ln)
+ fwrite($fh, "\n");
+ fwrite($fh, $line);
+ }
+ fclose($fh);
+ if ($conf['fperm'])
+ chmod($fn.'.tmp', $conf['fperm']);
+ io_rename($fn.'.tmp', $fn.'.idx');
+ return true;
+ }
+
+ /**
+ * Retrieve or insert a value in the index.
+ *
+ * @param string $idx name of the index
+ * @param string $suffix subpart identifier
+ * @param string $value line to find in the index
+ * @return int|bool line number of the value in the index or false if writing the index failed
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ protected function addIndexKey($idx, $suffix, $value) {
+ $index = $this->getIndex($idx, $suffix);
+ $id = array_search($value, $index, true);
+ if ($id === false) {
+ $id = count($index);
+ $index[$id] = $value;
+ if (!$this->saveIndex($idx, $suffix, $index)) {
+ trigger_error("Failed to write $idx index", E_USER_ERROR);
+ return false;
+ }
+ }
+ return $id;
+ }
+
+ /**
+ * Get the list of lengths indexed in the wiki.
+ *
+ * Read the index directory or a cache file and returns
+ * a sorted array of lengths of the words used in the wiki.
+ *
+ * @author YoBoY <yoboy.leguesh@gmail.com>
+ *
+ * @return array
+ */
+ protected function listIndexLengths() {
+ return idx_listIndexLengths();
+ }
+
+ /**
+ * Get the word lengths that have been indexed.
+ *
+ * Reads the index directory and returns an array of lengths
+ * that there are indices for.
+ *
+ * @author YoBoY <yoboy.leguesh@gmail.com>
+ *
+ * @param array|int $filter
+ * @return array
+ */
+ protected function indexLengths($filter) {
+ global $conf;
+ $idx = array();
+ if (is_array($filter)) {
+ // testing if index files exist only
+ $path = $conf['indexdir']."/i";
+ foreach ($filter as $key => $value) {
+ if (file_exists($path.$key.'.idx'))
+ $idx[] = $key;
+ }
+ } else {
+ $lengths = idx_listIndexLengths();
+ foreach ($lengths as $key => $length) {
+ // keep all the values equal or superior
+ if ((int)$length >= (int)$filter)
+ $idx[] = $length;
+ }
+ }
+ return $idx;
+ }
+
+ /**
+ * Insert or replace a tuple in a line.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ *
+ * @param string $line
+ * @param string|int $id
+ * @param int $count
+ * @return string
+ */
+ protected function updateTuple($line, $id, $count) {
+ if ($line != ''){
+ $line = preg_replace('/(^|:)'.preg_quote($id,'/').'\*\d*/', '', $line);
+ }
+ $line = trim($line, ':');
+ if ($count) {
+ if ($line) {
+ return "$id*$count:".$line;
+ } else {
+ return "$id*$count";
+ }
+ }
+ return $line;
+ }
+
+ /**
+ * Split a line into an array of tuples.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ * @author Andreas Gohr <andi@splitbrain.org>
+ *
+ * @param array $keys
+ * @param string $line
+ * @return array
+ */
+ protected function parseTuples(&$keys, $line) {
+ $result = array();
+ if ($line == '') return $result;
+ $parts = explode(':', $line);
+ foreach ($parts as $tuple) {
+ if ($tuple === '') continue;
+ list($key, $cnt) = explode('*', $tuple);
+ if (!$cnt) continue;
+ $key = $keys[$key];
+ if ($key === false || is_null($key)) continue;
+ $result[$key] = $cnt;
+ }
+ return $result;
+ }
+
+ /**
+ * Sum the counts in a list of tuples.
+ *
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ *
+ * @param string $line
+ * @return int
+ */
+ protected function countTuples($line) {
+ $freq = 0;
+ $parts = explode(':', $line);
+ foreach ($parts as $tuple) {
+ if ($tuple === '') continue;
+ list(/* $pid */, $cnt) = explode('*', $tuple);
+ $freq += (int)$cnt;
+ }
+ return $freq;
+ }
+}
diff --git a/inc/Subscriptions/MediaSubscriptionSender.php b/inc/Subscriptions/MediaSubscriptionSender.php
index 5a0f86ed6..1757c2b1c 100644
--- a/inc/Subscriptions/MediaSubscriptionSender.php
+++ b/inc/Subscriptions/MediaSubscriptionSender.php
@@ -16,8 +16,9 @@ class MediaSubscriptionSender extends SubscriptionSender
* @param string $template Mail template ('uploadmail', ...)
* @param string $id Media file for which the notification is
* @param int|bool $rev Old revision if any
+ * @param int|bool $current_rev New revision if any
*/
- public function sendMediaDiff($subscriber_mail, $template, $id, $rev = false)
+ public function sendMediaDiff($subscriber_mail, $template, $id, $rev = false, $current_rev = false)
{
global $conf;
@@ -26,7 +27,7 @@ class MediaSubscriptionSender extends SubscriptionSender
$trep = [
'MIME' => $mime,
- 'MEDIA' => ml($id, '', true, '&', true),
+ 'MEDIA' => ml($id, $current_rev?('rev='.$current_rev):'', true, '&', true),
'SIZE' => filesize_h(filesize($file)),
];
diff --git a/inc/Subscriptions/PageSubscriptionSender.php b/inc/Subscriptions/PageSubscriptionSender.php
index 8fca582a4..e5577c1af 100644
--- a/inc/Subscriptions/PageSubscriptionSender.php
+++ b/inc/Subscriptions/PageSubscriptionSender.php
@@ -19,17 +19,18 @@ class PageSubscriptionSender extends SubscriptionSender
* @param string $id Page for which the notification is
* @param int|null $rev Old revision if any
* @param string $summary Change summary if any
+ * @param int|null $current_rev New revision if any
*
* @return bool true if successfully sent
*/
- public function sendPageDiff($subscriber_mail, $template, $id, $rev = null, $summary = '')
+ public function sendPageDiff($subscriber_mail, $template, $id, $rev = null, $summary = '', $current_rev = null)
{
global $DIFF_INLINESTYLES;
// prepare replacements (keys not set in hrep will be taken from trep)
$trep = [
'PAGE' => $id,
- 'NEWPAGE' => wl($id, '', true, '&'),
+ 'NEWPAGE' => wl($id, $current_rev?('rev='.$current_rev):'', true, '&'),
'SUMMARY' => $summary,
'SUBSCRIBE' => wl($id, ['do' => 'subscribe'], true, '&'),
];
diff --git a/inc/Utf8/Clean.php b/inc/Utf8/Clean.php
index 79c46810c..0975ff559 100644
--- a/inc/Utf8/Clean.php
+++ b/inc/Utf8/Clean.php
@@ -65,8 +65,8 @@ class Clean
$ascii = '';
$len = strlen($str);
for ($i = 0; $i < $len; $i++) {
- if (ord($str{$i}) < 128) {
- $ascii .= $str{$i};
+ if (ord($str[$i]) < 128) {
+ $ascii .= $str[$i];
}
}
return $ascii;
diff --git a/inc/Utf8/Unicode.php b/inc/Utf8/Unicode.php
index c706d716b..4b6426533 100644
--- a/inc/Utf8/Unicode.php
+++ b/inc/Utf8/Unicode.php
@@ -46,7 +46,7 @@ class Unicode
for ($i = 0; $i < $len; $i++) {
- $in = ord($str{$i});
+ $in = ord($str[$i]);
if ($mState === 0) {
diff --git a/inc/auth.php b/inc/auth.php
index f99f6501f..0630a76f0 100644
--- a/inc/auth.php
+++ b/inc/auth.php
@@ -139,7 +139,7 @@ function auth_loadACL() {
$out = array();
foreach($acl as $line) {
$line = trim($line);
- if(empty($line) || ($line{0} == '#')) continue; // skip blank lines & comments
+ if(empty($line) || ($line[0] == '#')) continue; // skip blank lines & comments
list($id,$rest) = preg_split('/[ \t]+/',$line,2);
// substitute user wildcard first (its 1:1)
@@ -154,10 +154,12 @@ function auth_loadACL() {
// substitute group wildcard (its 1:m)
if(strstr($line, '%GROUP%')){
// if user is not logged in, grps is empty, no output will be added (i.e. skipped)
- foreach((array) $USERINFO['grps'] as $grp){
- $nid = str_replace('%GROUP%',cleanID($grp),$id);
- $nrest = str_replace('%GROUP%','@'.auth_nameencode($grp),$rest);
- $out[] = "$nid\t$nrest";
+ if(isset($USERINFO['grps'])){
+ foreach((array) $USERINFO['grps'] as $grp){
+ $nid = str_replace('%GROUP%',cleanID($grp),$id);
+ $nrest = str_replace('%GROUP%','@'.auth_nameencode($grp),$rest);
+ $out[] = "$nid\t$nrest";
+ }
}
} else {
$out[] = "$id\t$rest";
@@ -470,7 +472,7 @@ function auth_ismanager($user = null, $groups = null, $adminonly = false) {
}
}
if(is_null($groups)) {
- $groups = (array) $USERINFO['grps'];
+ $groups = $USERINFO ? (array) $USERINFO['grps'] : array();
}
// check superuser match
@@ -564,7 +566,7 @@ function auth_quickaclcheck($id) {
global $INPUT;
# if no ACL is used always return upload rights
if(!$conf['useacl']) return AUTH_UPLOAD;
- return auth_aclcheck($id, $INPUT->server->str('REMOTE_USER'), $USERINFO['grps']);
+ return auth_aclcheck($id, $INPUT->server->str('REMOTE_USER'), is_array($USERINFO) ? $USERINFO['grps'] : array());
}
/**
@@ -737,7 +739,7 @@ function auth_nameencode($name, $skip_group = false) {
if($name == '%GROUP%') return $name;
if(!isset($cache[$name][$skip_group])) {
- if($skip_group && $name{0} == '@') {
+ if($skip_group && $name[0] == '@') {
$cache[$name][$skip_group] = '@'.preg_replace_callback(
'/([\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f])/',
'auth_nameencode_callback', substr($name, 1)
@@ -1076,7 +1078,7 @@ function act_resendpwd() {
if($token) {
// we're in token phase - get user info from token
- $tfile = $conf['cachedir'].'/'.$token{0}.'/'.$token.'.pwauth';
+ $tfile = $conf['cachedir'].'/'.$token[0].'/'.$token.'.pwauth';
if(!file_exists($tfile)) {
msg($lang['resendpwdbadauth'], -1);
$INPUT->remove('pwauth');
@@ -1151,7 +1153,7 @@ function act_resendpwd() {
// generate auth token
$token = md5(auth_randombytes(16)); // random secret
- $tfile = $conf['cachedir'].'/'.$token{0}.'/'.$token.'.pwauth';
+ $tfile = $conf['cachedir'].'/'.$token[0].'/'.$token.'.pwauth';
$url = wl('', array('do'=> 'resendpwd', 'pwauth'=> $token), true, '&');
io_saveFile($tfile, $user);
diff --git a/inc/changelog.php b/inc/changelog.php
index b96a1d43a..652016cb8 100644
--- a/inc/changelog.php
+++ b/inc/changelog.php
@@ -113,7 +113,7 @@ function addLogEntry($date, $id, $type=DOKU_CHANGE_TYPE_EDIT, $summary='', $extr
// newly created
$meta['date']['created'] = $created;
if ($user){
- $meta['creator'] = $INFO['userinfo']['name'];
+ $meta['creator'] = isset($INFO) ? $INFO['userinfo']['name'] : null;
$meta['user'] = $user;
}
} elseif (($wasCreated || $wasReverted) && !empty($oldmeta['persistent']['date']['created'])) {
@@ -121,10 +121,10 @@ function addLogEntry($date, $id, $type=DOKU_CHANGE_TYPE_EDIT, $summary='', $extr
$meta['date']['created'] = $oldmeta['persistent']['date']['created'];
$meta['date']['modified'] = $created; // use the files ctime here
$meta['creator'] = $oldmeta['persistent']['creator'];
- if ($user) $meta['contributor'][$user] = $INFO['userinfo']['name'];
+ if ($user) $meta['contributor'][$user] = isset($INFO) ? $INFO['userinfo']['name'] : null;
} elseif (!$minor) { // non-minor modification
$meta['date']['modified'] = $date;
- if ($user) $meta['contributor'][$user] = $INFO['userinfo']['name'];
+ if ($user) $meta['contributor'][$user] = isset($INFO) ? $INFO['userinfo']['name'] : null;
}
$meta['last_change'] = $logline;
p_set_metadata($id, $meta);
@@ -228,9 +228,9 @@ function getRecents($first,$num,$ns='',$flags=0){
// read all recent changes. (kept short)
if ($flags & RECENTS_MEDIA_CHANGES) {
- $lines = @file($conf['media_changelog']);
+ $lines = @file($conf['media_changelog']) ?: [];
} else {
- $lines = @file($conf['changelog']);
+ $lines = @file($conf['changelog']) ?: [];
}
if (!is_array($lines)) {
$lines = array();
@@ -240,7 +240,7 @@ function getRecents($first,$num,$ns='',$flags=0){
$media_lines = array();
if ($flags & RECENTS_MEDIA_PAGES_MIXED) {
- $media_lines = @file($conf['media_changelog']);
+ $media_lines = @file($conf['media_changelog']) ?: [];
if (!is_array($media_lines)) {
$media_lines = array();
}
diff --git a/inc/cli.php b/inc/cli.php
index e64798386..cb4dabf04 100644
--- a/inc/cli.php
+++ b/inc/cli.php
@@ -402,13 +402,13 @@ class DokuCLI_Options {
}
// first non-option
- if($arg{0} != '-') {
+ if($arg[0] != '-') {
$non_opts = array_merge($non_opts, array_slice($this->args, $i));
break;
}
// long option
- if(strlen($arg) > 1 && $arg{1} == '-') {
+ if(strlen($arg) > 1 && $arg[1] == '-') {
list($opt, $val) = explode('=', substr($arg, 2), 2);
if(!isset($this->setup[$this->command]['opts'][$opt])) {
diff --git a/inc/common.php b/inc/common.php
index 6822ccbd3..c462934b2 100644
--- a/inc/common.php
+++ b/inc/common.php
@@ -280,16 +280,23 @@ function pageinfo() {
p_set_metadata($ID, array('last_change' => $revinfo));
}
- $info['ip'] = $revinfo['ip'];
- $info['user'] = $revinfo['user'];
- $info['sum'] = $revinfo['sum'];
- // See also $INFO['meta']['last_change'] which is the most recent log line for page $ID.
- // Use $INFO['meta']['last_change']['type']===DOKU_CHANGE_TYPE_MINOR_EDIT in place of $info['minor'].
-
- if($revinfo['user']) {
- $info['editor'] = $revinfo['user'];
- } else {
- $info['editor'] = $revinfo['ip'];
+ if($revinfo !== false){
+ $info['ip'] = $revinfo['ip'];
+ $info['user'] = $revinfo['user'];
+ $info['sum'] = $revinfo['sum'];
+ // See also $INFO['meta']['last_change'] which is the most recent log line for page $ID.
+ // Use $INFO['meta']['last_change']['type']===DOKU_CHANGE_TYPE_MINOR_EDIT in place of $info['minor'].
+
+ if($revinfo['user']) {
+ $info['editor'] = $revinfo['user'];
+ } else {
+ $info['editor'] = $revinfo['ip'];
+ }
+ }else{
+ $info['ip'] = null;
+ $info['user'] = null;
+ $info['sum'] = null;
+ $info['editor'] = null;
}
// draft
@@ -312,7 +319,7 @@ function jsinfo() {
}
//export minimal info to JS, plugins can add more
$JSINFO['id'] = $ID;
- $JSINFO['namespace'] = (string) $INFO['namespace'];
+ $JSINFO['namespace'] = isset($INFO) ? (string) $INFO['namespace'] : '';
$JSINFO['ACT'] = act_clean($ACT);
$JSINFO['useHeadingNavigation'] = (int) useHeading('navigation');
$JSINFO['useHeadingContent'] = (int) useHeading('content');
@@ -362,16 +369,16 @@ function buildURLparams($params, $sep = '&amp;') {
*
* @author Andreas Gohr
*
- * @param array $params array with (attribute name-attribute value) pairs
- * @param bool $skipempty skip empty string values?
+ * @param array $params array with (attribute name-attribute value) pairs
+ * @param bool $skipEmptyStrings skip empty string values?
* @return string
*/
-function buildAttributes($params, $skipempty = false) {
+function buildAttributes($params, $skipEmptyStrings = false) {
$url = '';
$white = false;
foreach($params as $key => $val) {
- if($key{0} == '_') continue;
- if($val === '' && $skipempty) continue;
+ if($key[0] == '_') continue;
+ if($val === '' && $skipEmptyStrings) continue;
if($white) $url .= ' ';
$url .= $key.'="';
@@ -397,12 +404,13 @@ function breadcrumbs() {
global $ID;
global $ACT;
global $conf;
+ global $INFO;
//first visit?
$crumbs = isset($_SESSION[DOKU_COOKIE]['bc']) ? $_SESSION[DOKU_COOKIE]['bc'] : array();
- //we only save on show and existing visible wiki documents
+ //we only save on show and existing visible readable wiki documents
$file = wikiFN($ID);
- if($ACT != 'show' || isHiddenPage($ID) || !file_exists($file)) {
+ if($ACT != 'show' || $INFO['perm'] < AUTH_READ || isHiddenPage($ID) || !file_exists($file)) {
$_SESSION[DOKU_COOKIE]['bc'] = $crumbs;
return $crumbs;
}
@@ -782,7 +790,7 @@ function checkwordblock($text = '') {
*/
function clientIP($single = false) {
/* @var Input $INPUT */
- global $INPUT;
+ global $INPUT, $conf;
$ip = array();
$ip[] = $INPUT->server->str('REMOTE_ADDR');
@@ -829,17 +837,18 @@ function clientIP($single = false) {
if(!$single) return join(',', $ip);
- // decide which IP to use, trying to avoid local addresses
- $ip = array_reverse($ip);
+ // skip trusted local addresses
foreach($ip as $i) {
- if(preg_match('/^(::1|[fF][eE]80:|127\.|10\.|192\.168\.|172\.((1[6-9])|(2[0-9])|(3[0-1]))\.)/', $i)) {
+ if(!empty($conf['trustedproxy']) && preg_match('/'.$conf['trustedproxy'].'/', $i)) {
continue;
} else {
return $i;
}
}
- // still here? just use the first (last) address
- return $ip[0];
+
+ // still here? just use the last address
+ // this case all ips in the list are trusted
+ return $ip[count($ip)-1];
}
/**
@@ -1180,8 +1189,8 @@ function parsePageTemplate(&$data) {
\dokuwiki\Utf8\PhpString::ucwords($page),
\dokuwiki\Utf8\PhpString::strtoupper($page),
$INPUT->server->str('REMOTE_USER'),
- $USERINFO['name'],
- $USERINFO['mail'],
+ $USERINFO ? $USERINFO['name'] : '',
+ $USERINFO ? $USERINFO['mail'] : '',
$conf['dformat'],
), $tpl
);
@@ -1425,8 +1434,8 @@ function saveWikiText($id, $text, $summary, $minor = false) {
);
// send notify mails
- notify($svdta['id'], 'admin', $svdta['oldRevision'], $svdta['summary'], $minor);
- notify($svdta['id'], 'subscribers', $svdta['oldRevision'], $svdta['summary'], $minor);
+ notify($svdta['id'], 'admin', $svdta['oldRevision'], $svdta['summary'], $minor, $svdta['newRevision']);
+ notify($svdta['id'], 'subscribers', $svdta['oldRevision'], $svdta['summary'], $minor, $svdta['newRevision']);
// update the purgefile (timestamp of the last time anything within the wiki was changed)
io_saveFile($conf['cachedir'].'/purgefile', time());
@@ -1468,11 +1477,12 @@ function saveOldRevision($id) {
* @param string $summary What changed
* @param boolean $minor Is this a minor edit?
* @param string[] $replace Additional string substitutions, @KEY@ to be replaced by value
+ * @param int|string $current_rev New page revision
* @return bool
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
-function notify($id, $who, $rev = '', $summary = '', $minor = false, $replace = array()) {
+function notify($id, $who, $rev = '', $summary = '', $minor = false, $replace = array(), $current_rev = false) {
global $conf;
/* @var Input $INPUT */
global $INPUT;
@@ -1499,7 +1509,7 @@ function notify($id, $who, $rev = '', $summary = '', $minor = false, $replace =
// prepare content
$subscription = new PageSubscriptionSender();
- return $subscription->sendPageDiff($to, $tpl, $id, $rev, $summary);
+ return $subscription->sendPageDiff($to, $tpl, $id, $rev, $summary, $current_rev);
}
/**
@@ -1523,11 +1533,7 @@ function getGoogleQuery() {
if(!preg_match('/(google|bing|yahoo|ask|duckduckgo|babylon|aol|yandex)/',$url['host'])) return '';
$query = array();
- // temporary workaround against PHP bug #49733
- // see http://bugs.php.net/bug.php?id=49733
- if(UTF8_MBSTRING) $enc = mb_internal_encoding();
parse_str($url['query'], $query);
- if(UTF8_MBSTRING) mb_internal_encoding($enc);
$q = '';
if(isset($query['q'])){
@@ -1540,6 +1546,8 @@ function getGoogleQuery() {
$q = trim($q);
if(!$q) return '';
+ // ignore if query includes a full URL
+ if(strpos($q, '//') !== false) return '';
$q = preg_split('/[\s\'"\\\\`()\]\[?:!\.{};,#+*<>\\/]+/', $q, -1, PREG_SPLIT_NO_EMPTY);
return $q;
}
diff --git a/inc/deprecated.php b/inc/deprecated.php
index d3de76080..205037344 100644
--- a/inc/deprecated.php
+++ b/inc/deprecated.php
@@ -563,3 +563,8 @@ class Subscription {
$manager->notifyAddresses($data);
}
}
+
+/**
+ * @deprecated 2019-12-29 use \dokuwiki\Search\Indexer
+ */
+class Doku_Indexer extends \dokuwiki\Search\Indexer {};
diff --git a/inc/fulltext.php b/inc/fulltext.php
index 48fe28da2..670f048d3 100644
--- a/inc/fulltext.php
+++ b/inc/fulltext.php
@@ -629,8 +629,8 @@ function ft_resultComplement($args) {
* @author Andreas Gohr <andi@splitbrain.org>
* @author Kazutaka Miyasaka <kazmiya@gmail.com>
*
- * @param Doku_Indexer $Indexer
- * @param string $query search query
+ * @param dokuwiki\Search\Indexer $Indexer
+ * @param string $query search query
* @return array of search formulas
*/
function ft_queryParser($Indexer, $query){
@@ -864,10 +864,10 @@ function ft_queryParser($Indexer, $query){
*
* @author Kazutaka Miyasaka <kazmiya@gmail.com>
*
- * @param Doku_Indexer $Indexer
- * @param string $term
- * @param bool $consider_asian
- * @param bool $phrase_mode
+ * @param dokuwiki\Search\Indexer $Indexer
+ * @param string $term
+ * @param bool $consider_asian
+ * @param bool $phrase_mode
* @return string
*/
function ft_termParser($Indexer, $term, $consider_asian = true, $phrase_mode = false) {
diff --git a/inc/html.php b/inc/html.php
index 773d55364..1f494d46b 100644
--- a/inc/html.php
+++ b/inc/html.php
@@ -50,7 +50,7 @@ function html_login($svg = false){
print p_locale_xhtml('login');
print '<div class="centeralign">'.NL;
- $form = new Doku_Form(array('id' => 'dw__login'));
+ $form = new Doku_Form(array('id' => 'dw__login', 'action'=>wl($ID)));
$form->startFieldset($lang['btn_login']);
$form->addHidden('id', $ID);
$form->addHidden('do', 'login');
@@ -108,7 +108,7 @@ function html_denied() {
function html_secedit($text,$show=true){
global $INFO;
- if(!$INFO['writable'] || !$show || $INFO['rev']){
+ if((isset($INFO) && !$INFO['writable']) || !$show || (isset($INFO) && $INFO['rev'])){
return preg_replace(SEC_EDIT_PATTERN,'',$text);
}
@@ -707,7 +707,7 @@ function html_recent($first = 0, $show_changes = 'both') {
'</p></div>';
}
- $form = new Doku_Form(array('id' => 'dw__recent', 'method' => 'GET', 'class' => 'changes'));
+ $form = new Doku_Form(array('id' => 'dw__recent', 'method' => 'GET', 'class' => 'changes', 'action'=>wl($ID)));
$form->addHidden('sectok', null);
$form->addHidden('do', 'recent');
$form->addHidden('id', $ID);
@@ -964,7 +964,7 @@ function html_li_index($item){
if($item['type'] == "f"){
// scroll to the current item
- if($item['id'] == $INFO['id'] && $ACT == 'index') {
+ if(isset($INFO) && $item['id'] == $INFO['id'] && $ACT == 'index') {
$id = ' id="scroll__here"';
$class = ' bounce';
}
@@ -1585,7 +1585,7 @@ function html_insert_softbreaks($diffhtml) {
*/
function html_softbreak_callback($match){
// if match is an html tag, return it intact
- if ($match[0]{0} == '<') return $match[0];
+ if ($match[0][0] == '<') return $match[0];
// its a long string without a breaking character,
// make certain characters into breaking characters by inserting a
@@ -1940,7 +1940,7 @@ function html_edit(){
if ($wr) {
// sets changed to true when previewed
- echo '<script type="text/javascript">/*<![CDATA[*/'. NL;
+ echo '<script>/*<![CDATA[*/'. NL;
echo 'textChanged = ' . ($mod ? 'true' : 'false');
echo '/*!]]>*/</script>' . NL;
} ?>
diff --git a/inc/indexer.php b/inc/indexer.php
index f2c8a9aa8..ab02b8ea2 100644
--- a/inc/indexer.php
+++ b/inc/indexer.php
@@ -8,6 +8,7 @@
*/
use dokuwiki\Extension\Event;
+use dokuwiki\Search\Indexer;
// Version tag used to force rebuild on upgrade
define('INDEXER_VERSION', 8);
@@ -67,1225 +68,16 @@ function wordlen($w){
}
/**
- * Class that encapsulates operations on the indexer database.
- *
- * @author Tom N Harris <tnharris@whoopdedo.org>
- */
-class Doku_Indexer {
- /**
- * @var array $pidCache Cache for getPID()
- */
- protected $pidCache = array();
-
- /**
- * Adds the contents of a page to the fulltext index
- *
- * The added text replaces previous words for the same page.
- * An empty value erases the page.
- *
- * @param string $page a page name
- * @param string $text the body of the page
- * @return string|boolean the function completed successfully
- *
- * @author Tom N Harris <tnharris@whoopdedo.org>
- * @author Andreas Gohr <andi@splitbrain.org>
- */
- public function addPageWords($page, $text) {
- if (!$this->lock())
- return "locked";
-
- // load known documents
- $pid = $this->getPIDNoLock($page);
- if ($pid === false) {
- $this->unlock();
- return false;
- }
-
- $pagewords = array();
- // get word usage in page
- $words = $this->getPageWords($text);
- if ($words === false) {
- $this->unlock();
- return false;
- }
-
- if (!empty($words)) {
- foreach (array_keys($words) as $wlen) {
- $index = $this->getIndex('i', $wlen);
- foreach ($words[$wlen] as $wid => $freq) {
- $idx = ($wid<count($index)) ? $index[$wid] : '';
- $index[$wid] = $this->updateTuple($idx, $pid, $freq);
- $pagewords[] = "$wlen*$wid";
- }
- if (!$this->saveIndex('i', $wlen, $index)) {
- $this->unlock();
- return false;
- }
- }
- }
-
- // Remove obsolete index entries
- $pageword_idx = $this->getIndexKey('pageword', '', $pid);
- if ($pageword_idx !== '') {
- $oldwords = explode(':',$pageword_idx);
- $delwords = array_diff($oldwords, $pagewords);
- $upwords = array();
- foreach ($delwords as $word) {
- if ($word != '') {
- list($wlen,$wid) = explode('*', $word);
- $wid = (int)$wid;
- $upwords[$wlen][] = $wid;
- }
- }
- foreach ($upwords as $wlen => $widx) {
- $index = $this->getIndex('i', $wlen);
- foreach ($widx as $wid) {
- $index[$wid] = $this->updateTuple($index[$wid], $pid, 0);
- }
- $this->saveIndex('i', $wlen, $index);
- }
- }
- // Save the reverse index
- $pageword_idx = join(':', $pagewords);
- if (!$this->saveIndexKey('pageword', '', $pid, $pageword_idx)) {
- $this->unlock();
- return false;
- }
-
- $this->unlock();
- return true;
- }
-
- /**
- * Split the words in a page and add them to the index.
- *
- * @param string $text content of the page
- * @return array list of word IDs and number of times used
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @author Christopher Smith <chris@jalakai.co.uk>
- * @author Tom N Harris <tnharris@whoopdedo.org>
- */
- protected function getPageWords($text) {
-
- $tokens = $this->tokenizer($text);
- $tokens = array_count_values($tokens); // count the frequency of each token
-
- $words = array();
- foreach ($tokens as $w=>$c) {
- $l = wordlen($w);
- if (isset($words[$l])){
- $words[$l][$w] = $c + (isset($words[$l][$w]) ? $words[$l][$w] : 0);
- }else{
- $words[$l] = array($w => $c);
- }
- }
-
- // arrive here with $words = array(wordlen => array(word => frequency))
- $word_idx_modified = false;
- $index = array(); //resulting index
- foreach (array_keys($words) as $wlen) {
- $word_idx = $this->getIndex('w', $wlen);
- foreach ($words[$wlen] as $word => $freq) {
- $word = (string)$word;
- $wid = array_search($word, $word_idx, true);
- if ($wid === false) {
- $wid = count($word_idx);
- $word_idx[] = $word;
- $word_idx_modified = true;
- }
- if (!isset($index[$wlen]))
- $index[$wlen] = array();
- $index[$wlen][$wid] = $freq;
- }
- // save back the word index
- if ($word_idx_modified && !$this->saveIndex('w', $wlen, $word_idx))
- return false;
- }
-
- return $index;
- }
-
- /**
- * Add/update keys to/of the metadata index.
- *
- * Adding new keys does not remove other keys for the page.
- * An empty value will erase the key.
- * The $key parameter can be an array to add multiple keys. $value will
- * not be used if $key is an array.
- *
- * @param string $page a page name
- * @param mixed $key a key string or array of key=>value pairs
- * @param mixed $value the value or list of values
- * @return boolean|string the function completed successfully
- *
- * @author Tom N Harris <tnharris@whoopdedo.org>
- * @author Michael Hamann <michael@content-space.de>
- */
- public function addMetaKeys($page, $key, $value=null) {
- if (!is_array($key)) {
- $key = array($key => $value);
- } elseif (!is_null($value)) {
- // $key is array, but $value is not null
- trigger_error("array passed to addMetaKeys but value is not null", E_USER_WARNING);
- }
-
- if (!$this->lock())
- return "locked";
-
- // load known documents
- $pid = $this->getPIDNoLock($page);
- if ($pid === false) {
- $this->unlock();
- return false;
- }
-
- // Special handling for titles so the index file is simpler
- if (array_key_exists('title', $key)) {
- $value = $key['title'];
- if (is_array($value)) {
- $value = $value[0];
- }
- $this->saveIndexKey('title', '', $pid, $value);
- unset($key['title']);
- }
-
- foreach ($key as $name => $values) {
- $metaname = idx_cleanName($name);
- $this->addIndexKey('metadata', '', $metaname);
- $metaidx = $this->getIndex($metaname.'_i', '');
- $metawords = $this->getIndex($metaname.'_w', '');
- $addwords = false;
-
- if (!is_array($values)) $values = array($values);
-
- $val_idx = $this->getIndexKey($metaname.'_p', '', $pid);
- if ($val_idx !== '') {
- $val_idx = explode(':', $val_idx);
- // -1 means remove, 0 keep, 1 add
- $val_idx = array_combine($val_idx, array_fill(0, count($val_idx), -1));
- } else {
- $val_idx = array();
- }
-
- foreach ($values as $val) {
- $val = (string)$val;
- if ($val !== "") {
- $id = array_search($val, $metawords, true);
- if ($id === false) {
- // didn't find $val, so we'll add it to the end of metawords and create a placeholder in metaidx
- $id = count($metawords);
- $metawords[$id] = $val;
- $metaidx[$id] = '';
- $addwords = true;
- }
- // test if value is already in the index
- if (isset($val_idx[$id]) && $val_idx[$id] <= 0){
- $val_idx[$id] = 0;
- } else { // else add it
- $val_idx[$id] = 1;
- }
- }
- }
-
- if ($addwords) {
- $this->saveIndex($metaname.'_w', '', $metawords);
- }
- $vals_changed = false;
- foreach ($val_idx as $id => $action) {
- if ($action == -1) {
- $metaidx[$id] = $this->updateTuple($metaidx[$id], $pid, 0);
- $vals_changed = true;
- unset($val_idx[$id]);
- } elseif ($action == 1) {
- $metaidx[$id] = $this->updateTuple($metaidx[$id], $pid, 1);
- $vals_changed = true;
- }
- }
-
- if ($vals_changed) {
- $this->saveIndex($metaname.'_i', '', $metaidx);
- $val_idx = implode(':', array_keys($val_idx));
- $this->saveIndexKey($metaname.'_p', '', $pid, $val_idx);
- }
-
- unset($metaidx);
- unset($metawords);
- }
-
- $this->unlock();
- return true;
- }
-
- /**
- * Rename a page in the search index without changing the indexed content. This function doesn't check if the
- * old or new name exists in the filesystem. It returns an error if the old page isn't in the page list of the
- * indexer and it deletes all previously indexed content of the new page.
- *
- * @param string $oldpage The old page name
- * @param string $newpage The new page name
- * @return string|bool If the page was successfully renamed, can be a message in the case of an error
- */
- public function renamePage($oldpage, $newpage) {
- if (!$this->lock()) return 'locked';
-
- $pages = $this->getPages();
-
- $id = array_search($oldpage, $pages, true);
- if ($id === false) {
- $this->unlock();
- return 'page is not in index';
- }
-
- $new_id = array_search($newpage, $pages, true);
- if ($new_id !== false) {
- // make sure the page is not in the index anymore
- if ($this->deletePageNoLock($newpage) !== true) {
- return false;
- }
-
- $pages[$new_id] = 'deleted:'.time().rand(0, 9999);
- }
-
- $pages[$id] = $newpage;
-
- // update index
- if (!$this->saveIndex('page', '', $pages)) {
- $this->unlock();
- return false;
- }
-
- // reset the pid cache
- $this->pidCache = array();
-
- $this->unlock();
- return true;
- }
-
- /**
- * Renames a meta value in the index. This doesn't change the meta value in the pages, it assumes that all pages
- * will be updated.
- *
- * @param string $key The metadata key of which a value shall be changed
- * @param string $oldvalue The old value that shall be renamed
- * @param string $newvalue The new value to which the old value shall be renamed, if exists values will be merged
- * @return bool|string If renaming the value has been successful, false or error message on error.
- */
- public function renameMetaValue($key, $oldvalue, $newvalue) {
- if (!$this->lock()) return 'locked';
-
- // change the relation references index
- $metavalues = $this->getIndex($key, '_w');
- $oldid = array_search($oldvalue, $metavalues, true);
- if ($oldid !== false) {
- $newid = array_search($newvalue, $metavalues, true);
- if ($newid !== false) {
- // free memory
- unset ($metavalues);
-
- // okay, now we have two entries for the same value. we need to merge them.
- $indexline = $this->getIndexKey($key.'_i', '', $oldid);
- if ($indexline != '') {
- $newindexline = $this->getIndexKey($key.'_i', '', $newid);
- $pagekeys = $this->getIndex($key.'_p', '');
- $parts = explode(':', $indexline);
- foreach ($parts as $part) {
- list($id, $count) = explode('*', $part);
- $newindexline = $this->updateTuple($newindexline, $id, $count);
-
- $keyline = explode(':', $pagekeys[$id]);
- // remove old meta value
- $keyline = array_diff($keyline, array($oldid));
- // add new meta value when not already present
- if (!in_array($newid, $keyline)) {
- array_push($keyline, $newid);
- }
- $pagekeys[$id] = implode(':', $keyline);
- }
- $this->saveIndex($key.'_p', '', $pagekeys);
- unset($pagekeys);
- $this->saveIndexKey($key.'_i', '', $oldid, '');
- $this->saveIndexKey($key.'_i', '', $newid, $newindexline);
- }
- } else {
- $metavalues[$oldid] = $newvalue;
- if (!$this->saveIndex($key.'_w', '', $metavalues)) {
- $this->unlock();
- return false;
- }
- }
- }
-
- $this->unlock();
- return true;
- }
-
- /**
- * Remove a page from the index
- *
- * Erases entries in all known indexes.
- *
- * @param string $page a page name
- * @return string|boolean the function completed successfully
- *
- * @author Tom N Harris <tnharris@whoopdedo.org>
- */
- public function deletePage($page) {
- if (!$this->lock())
- return "locked";
-
- $result = $this->deletePageNoLock($page);
-
- $this->unlock();
-
- return $result;
- }
-
- /**
- * Remove a page from the index without locking the index, only use this function if the index is already locked
- *
- * Erases entries in all known indexes.
- *
- * @param string $page a page name
- * @return boolean the function completed successfully
- *
- * @author Tom N Harris <tnharris@whoopdedo.org>
- */
- protected function deletePageNoLock($page) {
- // load known documents
- $pid = $this->getPIDNoLock($page);
- if ($pid === false) {
- return false;
- }
-
- // Remove obsolete index entries
- $pageword_idx = $this->getIndexKey('pageword', '', $pid);
- if ($pageword_idx !== '') {
- $delwords = explode(':',$pageword_idx);
- $upwords = array();
- foreach ($delwords as $word) {
- if ($word != '') {
- list($wlen,$wid) = explode('*', $word);
- $wid = (int)$wid;
- $upwords[$wlen][] = $wid;
- }
- }
- foreach ($upwords as $wlen => $widx) {
- $index = $this->getIndex('i', $wlen);
- foreach ($widx as $wid) {
- $index[$wid] = $this->updateTuple($index[$wid], $pid, 0);
- }
- $this->saveIndex('i', $wlen, $index);
- }
- }
- // Save the reverse index
- if (!$this->saveIndexKey('pageword', '', $pid, "")) {
- return false;
- }
-
- $this->saveIndexKey('title', '', $pid, "");
- $keyidx = $this->getIndex('metadata', '');
- foreach ($keyidx as $metaname) {
- $val_idx = explode(':', $this->getIndexKey($metaname.'_p', '', $pid));
- $meta_idx = $this->getIndex($metaname.'_i', '');
- foreach ($val_idx as $id) {
- if ($id === '') continue;
- $meta_idx[$id] = $this->updateTuple($meta_idx[$id], $pid, 0);
- }
- $this->saveIndex($metaname.'_i', '', $meta_idx);
- $this->saveIndexKey($metaname.'_p', '', $pid, '');
- }
-
- return true;
- }
-
- /**
- * Clear the whole index
- *
- * @return bool If the index has been cleared successfully
- */
- public function clear() {
- global $conf;
-
- if (!$this->lock()) return false;
-
- @unlink($conf['indexdir'].'/page.idx');
- @unlink($conf['indexdir'].'/title.idx');
- @unlink($conf['indexdir'].'/pageword.idx');
- @unlink($conf['indexdir'].'/metadata.idx');
- $dir = @opendir($conf['indexdir']);
- if($dir!==false){
- while(($f = readdir($dir)) !== false){
- if(substr($f,-4)=='.idx' &&
- (substr($f,0,1)=='i' || substr($f,0,1)=='w'
- || substr($f,-6)=='_w.idx' || substr($f,-6)=='_i.idx' || substr($f,-6)=='_p.idx'))
- @unlink($conf['indexdir']."/$f");
- }
- }
- @unlink($conf['indexdir'].'/lengths.idx');
-
- // clear the pid cache
- $this->pidCache = array();
-
- $this->unlock();
- return true;
- }
-
- /**
- * Split the text into words for fulltext search
- *
- * TODO: does this also need &$stopwords ?
- *
- * @triggers INDEXER_TEXT_PREPARE
- * This event allows plugins to modify the text before it gets tokenized.
- * Plugins intercepting this event should also intercept INDEX_VERSION_GET
- *
- * @param string $text plain text
- * @param boolean $wc are wildcards allowed?
- * @return array list of words in the text
- *
- * @author Tom N Harris <tnharris@whoopdedo.org>
- * @author Andreas Gohr <andi@splitbrain.org>
- */
- public function tokenizer($text, $wc=false) {
- $wc = ($wc) ? '' : '\*';
- $stopwords =& idx_get_stopwords();
-
- // prepare the text to be tokenized
- $evt = new Event('INDEXER_TEXT_PREPARE', $text);
- if ($evt->advise_before(true)) {
- if (preg_match('/[^0-9A-Za-z ]/u', $text)) {
- $text = \dokuwiki\Utf8\Asian::separateAsianWords($text);
- }
- }
- $evt->advise_after();
- unset($evt);
-
- $text = strtr($text,
- array(
- "\r" => ' ',
- "\n" => ' ',
- "\t" => ' ',
- "\xC2\xAD" => '', //soft-hyphen
- )
- );
- if (preg_match('/[^0-9A-Za-z ]/u', $text))
- $text = \dokuwiki\Utf8\Clean::stripspecials($text, ' ', '\._\-:'.$wc);
-
- $wordlist = explode(' ', $text);
- foreach ($wordlist as $i => $word) {
- $wordlist[$i] = (preg_match('/[^0-9A-Za-z]/u', $word)) ?
- \dokuwiki\Utf8\PhpString::strtolower($word) : strtolower($word);
- }
-
- foreach ($wordlist as $i => $word) {
- if ((!is_numeric($word) && strlen($word) < IDX_MINWORDLENGTH)
- || array_search($word, $stopwords, true) !== false)
- unset($wordlist[$i]);
- }
- return array_values($wordlist);
- }
-
- /**
- * Get the numeric PID of a page
- *
- * @param string $page The page to get the PID for
- * @return bool|int The page id on success, false on error
- */
- public function getPID($page) {
- // return PID without locking when it is in the cache
- if (isset($this->pidCache[$page])) return $this->pidCache[$page];
-
- if (!$this->lock())
- return false;
-
- // load known documents
- $pid = $this->getPIDNoLock($page);
- if ($pid === false) {
- $this->unlock();
- return false;
- }
-
- $this->unlock();
- return $pid;
- }
-
- /**
- * Get the numeric PID of a page without locking the index.
- * Only use this function when the index is already locked.
- *
- * @param string $page The page to get the PID for
- * @return bool|int The page id on success, false on error
- */
- protected function getPIDNoLock($page) {
- // avoid expensive addIndexKey operation for the most recently requested pages by using a cache
- if (isset($this->pidCache[$page])) return $this->pidCache[$page];
- $pid = $this->addIndexKey('page', '', $page);
- // limit cache to 10 entries by discarding the oldest element as in DokuWiki usually only the most recently
- // added item will be requested again
- if (count($this->pidCache) > 10) array_shift($this->pidCache);
- $this->pidCache[$page] = $pid;
- return $pid;
- }
-
- /**
- * Get the page id of a numeric PID
- *
- * @param int $pid The PID to get the page id for
- * @return string The page id
- */
- public function getPageFromPID($pid) {
- return $this->getIndexKey('page', '', $pid);
- }
-
- /**
- * Find pages in the fulltext index containing the words,
- *
- * The search words must be pre-tokenized, meaning only letters and
- * numbers with an optional wildcard
- *
- * The returned array will have the original tokens as key. The values
- * in the returned list is an array with the page names as keys and the
- * number of times that token appears on the page as value.
- *
- * @param array $tokens list of words to search for
- * @return array list of page names with usage counts
- *
- * @author Tom N Harris <tnharris@whoopdedo.org>
- * @author Andreas Gohr <andi@splitbrain.org>
- */
- public function lookup(&$tokens) {
- $result = array();
- $wids = $this->getIndexWords($tokens, $result);
- if (empty($wids)) return array();
- // load known words and documents
- $page_idx = $this->getIndex('page', '');
- $docs = array();
- foreach (array_keys($wids) as $wlen) {
- $wids[$wlen] = array_unique($wids[$wlen]);
- $index = $this->getIndex('i', $wlen);
- foreach($wids[$wlen] as $ixid) {
- if ($ixid < count($index))
- $docs["$wlen*$ixid"] = $this->parseTuples($page_idx, $index[$ixid]);
- }
- }
- // merge found pages into final result array
- $final = array();
- foreach ($result as $word => $res) {
- $final[$word] = array();
- foreach ($res as $wid) {
- // handle the case when ($ixid < count($index)) has been false
- // and thus $docs[$wid] hasn't been set.
- if (!isset($docs[$wid])) continue;
- $hits = &$docs[$wid];
- foreach ($hits as $hitkey => $hitcnt) {
- // make sure the document still exists
- if (!page_exists($hitkey, '', false)) continue;
- if (!isset($final[$word][$hitkey]))
- $final[$word][$hitkey] = $hitcnt;
- else
- $final[$word][$hitkey] += $hitcnt;
- }
- }
- }
- return $final;
- }
-
- /**
- * Find pages containing a metadata key.
- *
- * The metadata values are compared as case-sensitive strings. Pass a
- * callback function that returns true or false to use a different
- * comparison function. The function will be called with the $value being
- * searched for as the first argument, and the word in the index as the
- * second argument. The function preg_match can be used directly if the
- * values are regexes.
- *
- * @param string $key name of the metadata key to look for
- * @param string $value search term to look for, must be a string or array of strings
- * @param callback $func comparison function
- * @return array lists with page names, keys are query values if $value is array
- *
- * @author Tom N Harris <tnharris@whoopdedo.org>
- * @author Michael Hamann <michael@content-space.de>
- */
- public function lookupKey($key, &$value, $func=null) {
- if (!is_array($value))
- $value_array = array($value);
- else
- $value_array =& $value;
-
- // the matching ids for the provided value(s)
- $value_ids = array();
-
- $metaname = idx_cleanName($key);
-
- // get all words in order to search the matching ids
- if ($key == 'title') {
- $words = $this->getIndex('title', '');
- } else {
- $words = $this->getIndex($metaname.'_w', '');
- }
-
- if (!is_null($func)) {
- foreach ($value_array as $val) {
- foreach ($words as $i => $word) {
- if (call_user_func_array($func, array($val, $word)))
- $value_ids[$i][] = $val;
- }
- }
- } else {
- foreach ($value_array as $val) {
- $xval = $val;
- $caret = '^';
- $dollar = '$';
- // check for wildcards
- if (substr($xval, 0, 1) == '*') {
- $xval = substr($xval, 1);
- $caret = '';
- }
- if (substr($xval, -1, 1) == '*') {
- $xval = substr($xval, 0, -1);
- $dollar = '';
- }
- if (!$caret || !$dollar) {
- $re = $caret.preg_quote($xval, '/').$dollar;
- foreach(array_keys(preg_grep('/'.$re.'/', $words)) as $i)
- $value_ids[$i][] = $val;
- } else {
- if (($i = array_search($val, $words, true)) !== false)
- $value_ids[$i][] = $val;
- }
- }
- }
-
- unset($words); // free the used memory
-
- // initialize the result so it won't be null
- $result = array();
- foreach ($value_array as $val) {
- $result[$val] = array();
- }
-
- $page_idx = $this->getIndex('page', '');
-
- // Special handling for titles
- if ($key == 'title') {
- foreach ($value_ids as $pid => $val_list) {
- $page = $page_idx[$pid];
- foreach ($val_list as $val) {
- $result[$val][] = $page;
- }
- }
- } else {
- // load all lines and pages so the used lines can be taken and matched with the pages
- $lines = $this->getIndex($metaname.'_i', '');
-
- foreach ($value_ids as $value_id => $val_list) {
- // parse the tuples of the form page_id*1:page2_id*1 and so on, return value
- // is an array with page_id => 1, page2_id => 1 etc. so take the keys only
- $pages = array_keys($this->parseTuples($page_idx, $lines[$value_id]));
- foreach ($val_list as $val) {
- $result[$val] = array_merge($result[$val], $pages);
- }
- }
- }
- if (!is_array($value)) $result = $result[$value];
- return $result;
- }
-
- /**
- * Find the index ID of each search term.
- *
- * The query terms should only contain valid characters, with a '*' at
- * either the beginning or end of the word (or both).
- * The $result parameter can be used to merge the index locations with
- * the appropriate query term.
- *
- * @param array $words The query terms.
- * @param array $result Set to word => array("length*id" ...)
- * @return array Set to length => array(id ...)
- *
- * @author Tom N Harris <tnharris@whoopdedo.org>
- */
- protected function getIndexWords(&$words, &$result) {
- $tokens = array();
- $tokenlength = array();
- $tokenwild = array();
- foreach ($words as $word) {
- $result[$word] = array();
- $caret = '^';
- $dollar = '$';
- $xword = $word;
- $wlen = wordlen($word);
-
- // check for wildcards
- if (substr($xword, 0, 1) == '*') {
- $xword = substr($xword, 1);
- $caret = '';
- $wlen -= 1;
- }
- if (substr($xword, -1, 1) == '*') {
- $xword = substr($xword, 0, -1);
- $dollar = '';
- $wlen -= 1;
- }
- if ($wlen < IDX_MINWORDLENGTH && $caret && $dollar && !is_numeric($xword))
- continue;
- if (!isset($tokens[$xword]))
- $tokenlength[$wlen][] = $xword;
- if (!$caret || !$dollar) {
- $re = $caret.preg_quote($xword, '/').$dollar;
- $tokens[$xword][] = array($word, '/'.$re.'/');
- if (!isset($tokenwild[$xword]))
- $tokenwild[$xword] = $wlen;
- } else {
- $tokens[$xword][] = array($word, null);
- }
- }
- asort($tokenwild);
- // $tokens = array( base word => array( [ query term , regexp ] ... ) ... )
- // $tokenlength = array( base word length => base word ... )
- // $tokenwild = array( base word => base word length ... )
- $length_filter = empty($tokenwild) ? $tokenlength : min(array_keys($tokenlength));
- $indexes_known = $this->indexLengths($length_filter);
- if (!empty($tokenwild)) sort($indexes_known);
- // get word IDs
- $wids = array();
- foreach ($indexes_known as $ixlen) {
- $word_idx = $this->getIndex('w', $ixlen);
- // handle exact search
- if (isset($tokenlength[$ixlen])) {
- foreach ($tokenlength[$ixlen] as $xword) {
- $wid = array_search($xword, $word_idx, true);
- if ($wid !== false) {
- $wids[$ixlen][] = $wid;
- foreach ($tokens[$xword] as $w)
- $result[$w[0]][] = "$ixlen*$wid";
- }
- }
- }
- // handle wildcard search
- foreach ($tokenwild as $xword => $wlen) {
- if ($wlen >= $ixlen) break;
- foreach ($tokens[$xword] as $w) {
- if (is_null($w[1])) continue;
- foreach(array_keys(preg_grep($w[1], $word_idx)) as $wid) {
- $wids[$ixlen][] = $wid;
- $result[$w[0]][] = "$ixlen*$wid";
- }
- }
- }
- }
- return $wids;
- }
-
- /**
- * Return a list of all pages
- * Warning: pages may not exist!
- *
- * @param string $key list only pages containing the metadata key (optional)
- * @return array list of page names
- *
- * @author Tom N Harris <tnharris@whoopdedo.org>
- */
- public function getPages($key=null) {
- $page_idx = $this->getIndex('page', '');
- if (is_null($key)) return $page_idx;
-
- $metaname = idx_cleanName($key);
-
- // Special handling for titles
- if ($key == 'title') {
- $title_idx = $this->getIndex('title', '');
- array_splice($page_idx, count($title_idx));
- foreach ($title_idx as $i => $title)
- if ($title === "") unset($page_idx[$i]);
- return array_values($page_idx);
- }
-
- $pages = array();
- $lines = $this->getIndex($metaname.'_i', '');
- foreach ($lines as $line) {
- $pages = array_merge($pages, $this->parseTuples($page_idx, $line));
- }
- return array_keys($pages);
- }
-
- /**
- * Return a list of words sorted by number of times used
- *
- * @param int $min bottom frequency threshold
- * @param int $max upper frequency limit. No limit if $max<$min
- * @param int $minlen minimum length of words to count
- * @param string $key metadata key to list. Uses the fulltext index if not given
- * @return array list of words as the keys and frequency as values
- *
- * @author Tom N Harris <tnharris@whoopdedo.org>
- */
- public function histogram($min=1, $max=0, $minlen=3, $key=null) {
- if ($min < 1)
- $min = 1;
- if ($max < $min)
- $max = 0;
-
- $result = array();
-
- if ($key == 'title') {
- $index = $this->getIndex('title', '');
- $index = array_count_values($index);
- foreach ($index as $val => $cnt) {
- if ($cnt >= $min && (!$max || $cnt <= $max) && strlen($val) >= $minlen)
- $result[$val] = $cnt;
- }
- }
- elseif (!is_null($key)) {
- $metaname = idx_cleanName($key);
- $index = $this->getIndex($metaname.'_i', '');
- $val_idx = array();
- foreach ($index as $wid => $line) {
- $freq = $this->countTuples($line);
- if ($freq >= $min && (!$max || $freq <= $max))
- $val_idx[$wid] = $freq;
- }
- if (!empty($val_idx)) {
- $words = $this->getIndex($metaname.'_w', '');
- foreach ($val_idx as $wid => $freq) {
- if (strlen($words[$wid]) >= $minlen)
- $result[$words[$wid]] = $freq;
- }
- }
- }
- else {
- $lengths = idx_listIndexLengths();
- foreach ($lengths as $length) {
- if ($length < $minlen) continue;
- $index = $this->getIndex('i', $length);
- $words = null;
- foreach ($index as $wid => $line) {
- $freq = $this->countTuples($line);
- if ($freq >= $min && (!$max || $freq <= $max)) {
- if ($words === null)
- $words = $this->getIndex('w', $length);
- $result[$words[$wid]] = $freq;
- }
- }
- }
- }
-
- arsort($result);
- return $result;
- }
-
- /**
- * Lock the indexer.
- *
- * @author Tom N Harris <tnharris@whoopdedo.org>
- *
- * @return bool|string
- */
- protected function lock() {
- global $conf;
- $status = true;
- $run = 0;
- $lock = $conf['lockdir'].'/_indexer.lock';
- while (!@mkdir($lock, $conf['dmode'])) {
- usleep(50);
- if(is_dir($lock) && time()-@filemtime($lock) > 60*5){
- // looks like a stale lock - remove it
- if (!@rmdir($lock)) {
- $status = "removing the stale lock failed";
- return false;
- } else {
- $status = "stale lock removed";
- }
- }elseif($run++ == 1000){
- // we waited 5 seconds for that lock
- return false;
- }
- }
- if (!empty($conf['dperm'])) {
- chmod($lock, $conf['dperm']);
- }
- return $status;
- }
-
- /**
- * Release the indexer lock.
- *
- * @author Tom N Harris <tnharris@whoopdedo.org>
- *
- * @return bool
- */
- protected function unlock() {
- global $conf;
- @rmdir($conf['lockdir'].'/_indexer.lock');
- return true;
- }
-
- /**
- * Retrieve the entire index.
- *
- * The $suffix argument is for an index that is split into
- * multiple parts. Different index files should use different
- * base names.
- *
- * @param string $idx name of the index
- * @param string $suffix subpart identifier
- * @return array list of lines without CR or LF
- *
- * @author Tom N Harris <tnharris@whoopdedo.org>
- */
- protected function getIndex($idx, $suffix) {
- global $conf;
- $fn = $conf['indexdir'].'/'.$idx.$suffix.'.idx';
- if (!file_exists($fn)) return array();
- return file($fn, FILE_IGNORE_NEW_LINES);
- }
-
- /**
- * Replace the contents of the index with an array.
- *
- * @param string $idx name of the index
- * @param string $suffix subpart identifier
- * @param array $lines list of lines without LF
- * @return bool If saving succeeded
- *
- * @author Tom N Harris <tnharris@whoopdedo.org>
- */
- protected function saveIndex($idx, $suffix, &$lines) {
- global $conf;
- $fn = $conf['indexdir'].'/'.$idx.$suffix;
- $fh = @fopen($fn.'.tmp', 'w');
- if (!$fh) return false;
- fwrite($fh, join("\n", $lines));
- if (!empty($lines))
- fwrite($fh, "\n");
- fclose($fh);
- if (isset($conf['fperm']))
- chmod($fn.'.tmp', $conf['fperm']);
- io_rename($fn.'.tmp', $fn.'.idx');
- return true;
- }
-
- /**
- * Retrieve a line from the index.
- *
- * @param string $idx name of the index
- * @param string $suffix subpart identifier
- * @param int $id the line number
- * @return string a line with trailing whitespace removed
- *
- * @author Tom N Harris <tnharris@whoopdedo.org>
- */
- protected function getIndexKey($idx, $suffix, $id) {
- global $conf;
- $fn = $conf['indexdir'].'/'.$idx.$suffix.'.idx';
- if (!file_exists($fn)) return '';
- $fh = @fopen($fn, 'r');
- if (!$fh) return '';
- $ln = -1;
- while (($line = fgets($fh)) !== false) {
- if (++$ln == $id) break;
- }
- fclose($fh);
- return rtrim((string)$line);
- }
-
- /**
- * Write a line into the index.
- *
- * @param string $idx name of the index
- * @param string $suffix subpart identifier
- * @param int $id the line number
- * @param string $line line to write
- * @return bool If saving succeeded
- *
- * @author Tom N Harris <tnharris@whoopdedo.org>
- */
- protected function saveIndexKey($idx, $suffix, $id, $line) {
- global $conf;
- if (substr($line, -1) != "\n")
- $line .= "\n";
- $fn = $conf['indexdir'].'/'.$idx.$suffix;
- $fh = @fopen($fn.'.tmp', 'w');
- if (!$fh) return false;
- $ih = @fopen($fn.'.idx', 'r');
- if ($ih) {
- $ln = -1;
- while (($curline = fgets($ih)) !== false) {
- fwrite($fh, (++$ln == $id) ? $line : $curline);
- }
- if ($id > $ln) {
- while ($id > ++$ln)
- fwrite($fh, "\n");
- fwrite($fh, $line);
- }
- fclose($ih);
- } else {
- $ln = -1;
- while ($id > ++$ln)
- fwrite($fh, "\n");
- fwrite($fh, $line);
- }
- fclose($fh);
- if (isset($conf['fperm']))
- chmod($fn.'.tmp', $conf['fperm']);
- io_rename($fn.'.tmp', $fn.'.idx');
- return true;
- }
-
- /**
- * Retrieve or insert a value in the index.
- *
- * @param string $idx name of the index
- * @param string $suffix subpart identifier
- * @param string $value line to find in the index
- * @return int|bool line number of the value in the index or false if writing the index failed
- *
- * @author Tom N Harris <tnharris@whoopdedo.org>
- */
- protected function addIndexKey($idx, $suffix, $value) {
- $index = $this->getIndex($idx, $suffix);
- $id = array_search($value, $index, true);
- if ($id === false) {
- $id = count($index);
- $index[$id] = $value;
- if (!$this->saveIndex($idx, $suffix, $index)) {
- trigger_error("Failed to write $idx index", E_USER_ERROR);
- return false;
- }
- }
- return $id;
- }
-
- /**
- * Get the list of lengths indexed in the wiki.
- *
- * Read the index directory or a cache file and returns
- * a sorted array of lengths of the words used in the wiki.
- *
- * @author YoBoY <yoboy.leguesh@gmail.com>
- *
- * @return array
- */
- protected function listIndexLengths() {
- return idx_listIndexLengths();
- }
-
- /**
- * Get the word lengths that have been indexed.
- *
- * Reads the index directory and returns an array of lengths
- * that there are indices for.
- *
- * @author YoBoY <yoboy.leguesh@gmail.com>
- *
- * @param array|int $filter
- * @return array
- */
- protected function indexLengths($filter) {
- global $conf;
- $idx = array();
- if (is_array($filter)) {
- // testing if index files exist only
- $path = $conf['indexdir']."/i";
- foreach ($filter as $key => $value) {
- if (file_exists($path.$key.'.idx'))
- $idx[] = $key;
- }
- } else {
- $lengths = idx_listIndexLengths();
- foreach ($lengths as $key => $length) {
- // keep all the values equal or superior
- if ((int)$length >= (int)$filter)
- $idx[] = $length;
- }
- }
- return $idx;
- }
-
- /**
- * Insert or replace a tuple in a line.
- *
- * @author Tom N Harris <tnharris@whoopdedo.org>
- *
- * @param string $line
- * @param string|int $id
- * @param int $count
- * @return string
- */
- protected function updateTuple($line, $id, $count) {
- if ($line != ''){
- $line = preg_replace('/(^|:)'.preg_quote($id,'/').'\*\d*/', '', $line);
- }
- $line = trim($line, ':');
- if ($count) {
- if ($line) {
- return "$id*$count:".$line;
- } else {
- return "$id*$count";
- }
- }
- return $line;
- }
-
- /**
- * Split a line into an array of tuples.
- *
- * @author Tom N Harris <tnharris@whoopdedo.org>
- * @author Andreas Gohr <andi@splitbrain.org>
- *
- * @param array $keys
- * @param string $line
- * @return array
- */
- protected function parseTuples(&$keys, $line) {
- $result = array();
- if ($line == '') return $result;
- $parts = explode(':', $line);
- foreach ($parts as $tuple) {
- if ($tuple === '') continue;
- list($key, $cnt) = explode('*', $tuple);
- if (!$cnt) continue;
- $key = $keys[$key];
- if ($key === false || is_null($key)) continue;
- $result[$key] = $cnt;
- }
- return $result;
- }
-
- /**
- * Sum the counts in a list of tuples.
- *
- * @author Tom N Harris <tnharris@whoopdedo.org>
- *
- * @param string $line
- * @return int
- */
- protected function countTuples($line) {
- $freq = 0;
- $parts = explode(':', $line);
- foreach ($parts as $tuple) {
- if ($tuple === '') continue;
- list(/* $pid */, $cnt) = explode('*', $tuple);
- $freq += (int)$cnt;
- }
- return $freq;
- }
-}
-
-/**
* Create an instance of the indexer.
*
- * @return Doku_Indexer a Doku_Indexer
+ * @return Indexer an Indexer
*
* @author Tom N Harris <tnharris@whoopdedo.org>
*/
function idx_get_indexer() {
static $Indexer;
if (!isset($Indexer)) {
- $Indexer = new Doku_Indexer();
+ $Indexer = new Indexer();
}
return $Indexer;
}
diff --git a/inc/init.php b/inc/init.php
index 548ac80db..f9bb53472 100644
--- a/inc/init.php
+++ b/inc/init.php
@@ -340,7 +340,7 @@ function init_files(){
$fh = @fopen($file,'a');
if($fh){
fclose($fh);
- if(!empty($conf['fperm'])) chmod($file, $conf['fperm']);
+ if($conf['fperm']) chmod($file, $conf['fperm']);
}else{
nice_die("$file is not writable. Check your permissions settings!");
}
@@ -405,7 +405,7 @@ function init_creationmodes(){
// check what is set automatically by the system on file creation
// and set the fperm param if it's not what we want
- $auto_fmode = 0666 & ~$umask;
+ $auto_fmode = $conf['fmode'] & ~$umask;
if($auto_fmode != $conf['fmode']) $conf['fperm'] = $conf['fmode'];
// check what is set automatically by the system on file creation
@@ -576,7 +576,7 @@ function fullpath($path,$exists=false){
$iswin = (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN' || !empty($GLOBALS['DOKU_UNITTEST_ASSUME_WINDOWS']));
// find the (indestructable) root of the path - keeps windows stuff intact
- if($path{0} == '/'){
+ if($path[0] == '/'){
$root = '/';
}elseif($iswin){
// match drive letter and UNC paths
diff --git a/inc/io.php b/inc/io.php
index 18aae25e7..1dfabe845 100644
--- a/inc/io.php
+++ b/inc/io.php
@@ -252,7 +252,7 @@ function _io_saveFile($file, $content, $append) {
fclose($fh);
}
- if(!$fileexists and !empty($conf['fperm'])) chmod($file, $conf['fperm']);
+ if(!$fileexists and $conf['fperm']) chmod($file, $conf['fperm']);
return true;
}
diff --git a/inc/lang/cs/lang.php b/inc/lang/cs/lang.php
index 7a9b7200a..8d46dd0aa 100644
--- a/inc/lang/cs/lang.php
+++ b/inc/lang/cs/lang.php
@@ -3,6 +3,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Petr Kajzar <petr.kajzar@lf1.cuni.cz>
* @author Robert Surý <rsurycz@seznam.cz>
* @author Martin Hořínek <hev@hev.cz>
* @author Jonáš Dyba <jonas.dyba@gmail.com>
diff --git a/inc/lang/de/lang.php b/inc/lang/de/lang.php
index d4a325559..47bc6af8f 100644
--- a/inc/lang/de/lang.php
+++ b/inc/lang/de/lang.php
@@ -3,6 +3,8 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Eric Haberstroh <ehaberstroh@gmail.com>
+ * @author C!own77 <clown77@posteo.de>
* @author Anonymous <anonymous@example.org>
* @author Michaelsy <github@informantum.de>
* @author Benjamin Molitor <bmolitor@uos.de>
diff --git a/inc/lang/en/mailtext.txt b/inc/lang/en/mailtext.txt
index aea14d459..eac40356d 100644
--- a/inc/lang/en/mailtext.txt
+++ b/inc/lang/en/mailtext.txt
@@ -1,12 +1,15 @@
A page in your DokuWiki was added or changed. Here are the details:
-Date : @DATE@
-Browser : @BROWSER@
-IP-Address : @IPADDRESS@
-Hostname : @HOSTNAME@
-Old Revision: @OLDPAGE@
-New Revision: @NEWPAGE@
-Edit Summary: @SUMMARY@
-User : @USER@
+Browser : @BROWSER@
+IP Address : @IPADDRESS@
+Hostname : @HOSTNAME@
+Old Revision : @OLDPAGE@
+New Revision : @NEWPAGE@
+Date of New Revision: @DATE@
+Edit Summary : @SUMMARY@
+User : @USER@
+
+There may be newer changes after this revision. If this
+happens, a message will be shown on the top of the rev page.
@DIFF@
diff --git a/inc/lang/en/subscr_single.txt b/inc/lang/en/subscr_single.txt
index 8f097dc3e..046b9945d 100644
--- a/inc/lang/en/subscr_single.txt
+++ b/inc/lang/en/subscr_single.txt
@@ -7,11 +7,11 @@ Here are the changes:
@DIFF@
--------------------------------------------------------
-Date : @DATE@
-User : @USER@
-Edit Summary: @SUMMARY@
-Old Revision: @OLDPAGE@
-New Revision: @NEWPAGE@
+User : @USER@
+Edit Summary : @SUMMARY@
+Old Revision : @OLDPAGE@
+New Revision : @NEWPAGE@
+Date of New Revision: @DATE@
To cancel the page notifications, log into the wiki at
@DOKUWIKIURL@ then visit
diff --git a/inc/lang/es/lang.php b/inc/lang/es/lang.php
index 7924a7da7..95a1d644e 100644
--- a/inc/lang/es/lang.php
+++ b/inc/lang/es/lang.php
@@ -3,10 +3,10 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Domingo Redal <docxml@gmail.com>
* @author Liliana <lilianasaidon@gmail.com>
* @author Alex Cachinero <anarres@protonmail.com>
* @author WIRESLINKEA <wireslinkea@gmail.com>
- * @author Domingo Redal <docxml@gmail.com>
* @author Zigor Astarbe <zigor@astarbe.com>
* @author Adrián Ariza <adrian_ariza.ciudad.com.ar>
* @author Gabiel Molina <gabriel191@gmail.com>
diff --git a/inc/lang/fi/lang.php b/inc/lang/fi/lang.php
index ebcca3347..a872b156f 100644
--- a/inc/lang/fi/lang.php
+++ b/inc/lang/fi/lang.php
@@ -2,7 +2,8 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
+ *
+ * @author Tuomo Hartikainen <tuomo.hartikainen@heksia.fi>
* @author Petteri <petteri@gmail.com>
* @author Matti Pöllä <mpo@iki.fi>
* @author Otto Vainio <otto@valjakko.net>
@@ -71,43 +72,6 @@ $lang['badpassconfirm'] = 'Valitan. Salasana oli väärin';
$lang['minoredit'] = 'Pieni muutos';
$lang['draftdate'] = 'Luonnos tallennettu automaattisesti';
$lang['nosecedit'] = 'Sivu on muuttunut välillä ja kappaleen tiedot olivat vanhentuneet. Koko sivu ladattu.';
-$lang['regmissing'] = 'Kaikki kentät tulee täyttää.';
-$lang['reguexists'] = 'Käyttäjä tällä käyttäjänimellä on jo olemassa.';
-$lang['regsuccess'] = 'Käyttäjä luotiin ja salasana lähetettiin sähköpostilla.';
-$lang['regsuccess2'] = 'Käyttäjänimi on luotu.';
-$lang['regfail'] = 'Valitsemaasi käyttäjää ei voitu luoda.';
-$lang['regmailfail'] = 'Näyttää siltä, että salasanan lähettämisessä tapahtui virhe. Ota yhteys ylläpitäjään!';
-$lang['regbadmail'] = 'Antamasi sähköpostiosoite näyttää epäkelvolta. Jos pidät tätä virheenä ota yhteys ylläpitäjään.';
-$lang['regbadpass'] = 'Annetut kaksi salasanaa eivät täsmää. Yritä uudelleen.';
-$lang['regpwmail'] = 'DokuWiki salasanasi';
-$lang['reghere'] = 'Puuttuuko sinulta käyttäjätili? Hanki sellainen';
-$lang['profna'] = 'Tässä wikissä profiilien muokkaaminen ei ole mahdollista';
-$lang['profnochange'] = 'Ei muutoksia.';
-$lang['profnoempty'] = 'Tyhjä nimi tai sähköpostiosoite ei ole sallittu.';
-$lang['profchanged'] = 'Käyttäjän profiilin päivitys onnistui.';
-$lang['profnodelete'] = 'Tässä wikissä ei voi poistaa käyttäjiä';
-$lang['profdeleteuser'] = 'Poista tili';
-$lang['profdeleted'] = 'Käyttäjätilisi on postettu tästä wikistä';
-$lang['profconfdelete'] = 'Haluan poistaa käyttäjätilini tästä wikistä. <br/> Tätä toimintoa ei voi myöhemmin peruuttaa.';
-$lang['profconfdeletemissing'] = 'Vahvistus rastia ei valittu';
-$lang['pwdforget'] = 'Unohtuiko salasana? Hanki uusi';
-$lang['resendna'] = 'Tämä wiki ei tue salasanan uudelleenlähettämistä.';
-$lang['resendpwd'] = 'Aseta uusisalasana';
-$lang['resendpwdmissing'] = 'Kaikki kentät on täytettävä.';
-$lang['resendpwdnouser'] = 'Käyttäjää ei löydy tietokannastamme.';
-$lang['resendpwdbadauth'] = 'Tunnistuskoodi on virheellinen. Varmista, että käytit koko varmistuslinkkiä.';
-$lang['resendpwdconfirm'] = 'Varmistuslinkki on lähetetty sähköpostilla';
-$lang['resendpwdsuccess'] = 'Uusi salasanasi on lähetetty sähköpostilla.';
-$lang['license'] = 'Jollei muuta ole mainittu, niin sisältö tässä wikissä on lisensoitu seuraavalla lisenssillä:';
-$lang['licenseok'] = 'Huom: Muokkaamalla tätä sivua suostut lisensoimaan sisällön seuraavan lisenssin mukaisesti:';
-$lang['searchmedia'] = 'Etsi tiedostoa nimeltä:';
-$lang['searchmedia_in'] = 'Etsi kohteesta %s';
-$lang['txt_upload'] = 'Valitse tiedosto lähetettäväksi:';
-$lang['txt_filename'] = 'Lähetä nimellä (valinnainen):';
-$lang['txt_overwrt'] = 'Ylikirjoita olemassa oleva';
-$lang['maxuploadsize'] = 'Palvelimelle siirto max. %s / tiedosto.';
-$lang['lockedby'] = 'Tällä hetkellä tiedoston on lukinnut:';
-$lang['lockexpire'] = 'Lukitus päättyy:';
$lang['js']['willexpire'] = 'Lukituksesi tämän sivun muokkaukseen päättyy minuutin kuluttua.\nRistiriitojen välttämiseksi paina esikatselu-nappia nollataksesi lukitusajan.';
$lang['js']['notsavedyet'] = 'Dokumentissa on tallentamattomia muutoksia, jotka häviävät.
Haluatko varmasti jatkaa?';
@@ -151,6 +115,43 @@ $lang['js']['media_done_btn'] = 'Valmis';
$lang['js']['media_drop'] = 'Pudota lähetettävät tiedostot tähän';
$lang['js']['media_cancel'] = 'Poista';
$lang['js']['media_overwrt'] = 'Ylikirjoita olemassa olevat tiedostot';
+$lang['regmissing'] = 'Kaikki kentät tulee täyttää.';
+$lang['reguexists'] = 'Käyttäjä tällä käyttäjänimellä on jo olemassa.';
+$lang['regsuccess'] = 'Käyttäjä luotiin ja salasana lähetettiin sähköpostilla.';
+$lang['regsuccess2'] = 'Käyttäjänimi on luotu.';
+$lang['regfail'] = 'Valitsemaasi käyttäjää ei voitu luoda.';
+$lang['regmailfail'] = 'Näyttää siltä, että salasanan lähettämisessä tapahtui virhe. Ota yhteys ylläpitäjään!';
+$lang['regbadmail'] = 'Antamasi sähköpostiosoite näyttää epäkelvolta. Jos pidät tätä virheenä ota yhteys ylläpitäjään.';
+$lang['regbadpass'] = 'Annetut kaksi salasanaa eivät täsmää. Yritä uudelleen.';
+$lang['regpwmail'] = 'DokuWiki salasanasi';
+$lang['reghere'] = 'Puuttuuko sinulta käyttäjätili? Hanki sellainen';
+$lang['profna'] = 'Tässä wikissä profiilien muokkaaminen ei ole mahdollista';
+$lang['profnochange'] = 'Ei muutoksia.';
+$lang['profnoempty'] = 'Tyhjä nimi tai sähköpostiosoite ei ole sallittu.';
+$lang['profchanged'] = 'Käyttäjän profiilin päivitys onnistui.';
+$lang['profnodelete'] = 'Tässä wikissä ei voi poistaa käyttäjiä';
+$lang['profdeleteuser'] = 'Poista tili';
+$lang['profdeleted'] = 'Käyttäjätilisi on postettu tästä wikistä';
+$lang['profconfdelete'] = 'Haluan poistaa käyttäjätilini tästä wikistä. <br/> Tätä toimintoa ei voi myöhemmin peruuttaa.';
+$lang['profconfdeletemissing'] = 'Vahvistus rastia ei valittu';
+$lang['pwdforget'] = 'Unohtuiko salasana? Hanki uusi';
+$lang['resendna'] = 'Tämä wiki ei tue salasanan uudelleenlähettämistä.';
+$lang['resendpwd'] = 'Aseta uusisalasana';
+$lang['resendpwdmissing'] = 'Kaikki kentät on täytettävä.';
+$lang['resendpwdnouser'] = 'Käyttäjää ei löydy tietokannastamme.';
+$lang['resendpwdbadauth'] = 'Tunnistuskoodi on virheellinen. Varmista, että käytit koko varmistuslinkkiä.';
+$lang['resendpwdconfirm'] = 'Varmistuslinkki on lähetetty sähköpostilla';
+$lang['resendpwdsuccess'] = 'Uusi salasanasi on lähetetty sähköpostilla.';
+$lang['license'] = 'Jollei muuta ole mainittu, niin sisältö tässä wikissä on lisensoitu seuraavalla lisenssillä:';
+$lang['licenseok'] = 'Huom: Muokkaamalla tätä sivua suostut lisensoimaan sisällön seuraavan lisenssin mukaisesti:';
+$lang['searchmedia'] = 'Etsi tiedostoa nimeltä:';
+$lang['searchmedia_in'] = 'Etsi kohteesta %s';
+$lang['txt_upload'] = 'Valitse tiedosto lähetettäväksi:';
+$lang['txt_filename'] = 'Lähetä nimellä (valinnainen):';
+$lang['txt_overwrt'] = 'Ylikirjoita olemassa oleva';
+$lang['maxuploadsize'] = 'Palvelimelle siirto max. %s / tiedosto.';
+$lang['lockedby'] = 'Tällä hetkellä tiedoston on lukinnut:';
+$lang['lockexpire'] = 'Lukitus päättyy:';
$lang['rssfailed'] = 'Virhe tapahtui noudettaessa tätä syötettä: ';
$lang['nothingfound'] = 'Mitään ei löytynyt.';
$lang['mediaselect'] = 'Mediatiedoston valinta';
@@ -338,5 +339,5 @@ $lang['searchresult'] = 'Haun tulokset';
$lang['plainhtml'] = 'pelkkä HTML';
$lang['wikimarkup'] = 'Wiki markup';
$lang['unable_to_parse_date'] = 'Parametrin "%s" jäsennys ei onnistu.';
-$lang['email_signature_text'] = 'Tämän postin loi DokuWiki osoitteessa
+$lang['email_signature_text'] = 'Tämän postin loi DokuWiki osoitteessa
@DOKUWIKIURL@';
diff --git a/inc/lang/fr/lang.php b/inc/lang/fr/lang.php
index b43e2fc94..2480f2936 100644
--- a/inc/lang/fr/lang.php
+++ b/inc/lang/fr/lang.php
@@ -3,8 +3,8 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Schplurtz le Déboulonné <Schplurtz@laposte.net>
* @author PaliPalo <palipalo@hotmail.fr>
- * @author Schplurtz le Déboulonné <schplurtz@laposte.net>
* @author Laurent Ponthieu <contact@coopindus.fr>
* @author Damien Regad <dregad@mantisbt.org>
* @author Michael Bohn <mjbohn@gmail.com>
@@ -304,10 +304,10 @@ $lang['img_camera'] = 'Appareil photo:';
$lang['img_keywords'] = 'Mots-clés:';
$lang['img_width'] = 'Largeur:';
$lang['img_height'] = 'Hauteur:';
-$lang['subscr_subscribe_success'] = '%s a été ajouté à la liste des abonnés de %s';
+$lang['subscr_subscribe_success'] = '%s a été ajouté à la liste des abonnés à %s';
$lang['subscr_subscribe_error'] = 'Erreur à l\'ajout de %s à la liste des abonnés de %s';
$lang['subscr_subscribe_noaddress'] = 'Il n\'y a pas d\'adresse associée à votre identifiant, vous ne pouvez pas être ajouté à la liste des abonnés.';
-$lang['subscr_unsubscribe_success'] = '%s a été supprimé de la liste des abonnés de %s';
+$lang['subscr_unsubscribe_success'] = '%s a été supprimé de la liste des abonnés à %s';
$lang['subscr_unsubscribe_error'] = 'Erreur au retrait de %s de la liste des abonnés de %s';
$lang['subscr_already_subscribed'] = '%s est déjà abonné à %s';
$lang['subscr_not_subscribed'] = '%s n\'est pas abonné à %s';
diff --git a/inc/lang/id/lang.php b/inc/lang/id/lang.php
index dc9d66259..61f279839 100644
--- a/inc/lang/id/lang.php
+++ b/inc/lang/id/lang.php
@@ -3,6 +3,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author rusly-id <rusly-id@users.noreply.github.com>
* @author mubaidillah <mubaidillah@gmail.com>
* @author Irwan Butar Butar <irwansah.putra@gmail.com>
* @author Yustinus Waruwu <juswaruwu@gmail.com>
@@ -64,43 +65,6 @@ $lang['badlogin'] = 'Maaf, username atau password salah.';
$lang['badpassconfirm'] = 'Maaf, password salah';
$lang['minoredit'] = 'Perubahan Minor';
$lang['draftdate'] = 'Simpan draft secara otomatis';
-$lang['regmissing'] = 'Maaf, Anda harus mengisi semua field.';
-$lang['reguexists'] = 'Maaf, user dengan user login ini telah ada.';
-$lang['regsuccess'] = 'User telah didaftarkan dan password telah dikirim ke email Anda.';
-$lang['regsuccess2'] = 'User telah dibuatkan.';
-$lang['regmailfail'] = 'Kami menemukan kesalahan saat mengirimkan password ke alamat email Anda. Mohon hubungi administrator.';
-$lang['regbadmail'] = 'Alamat email yang Anda masukkan tidak valid - jika menurut Anda hal ini adalah kesalahan sistem, mohon hubungi admin.';
-$lang['regbadpass'] = 'Passwod yang dimasukkan tidak sama. Silahkan ulangi lagi.';
-$lang['regpwmail'] = 'Password DokuWiki Anda';
-$lang['reghere'] = 'Anda belum mempunyai account? silahkan ';
-$lang['profna'] = 'Wiki ini tidak mengijinkan perubahan profil.';
-$lang['profnochange'] = 'Tidak ada perubahan.';
-$lang['profnoempty'] = 'Mohon mengisikan nama atau alamat email.';
-$lang['profchanged'] = 'Profil User berhasil diubah.';
-$lang['profnodelete'] = 'Wiki ini tidak mendukung penghapusan pengguna';
-$lang['profdeleteuser'] = 'Hapus Akun';
-$lang['profdeleted'] = 'Akun anda telah dihapus dari wiki ini';
-$lang['profconfdelete'] = 'Saya berharap menghapus akun saya dari wiki ini.
-Aksi ini tidak bisa diselesaikan.';
-$lang['profconfdeletemissing'] = 'Knfirmasi check box tidak tercentang';
-$lang['pwdforget'] = 'Lupa Password? Dapatkan yang baru';
-$lang['resendna'] = 'Wiki ini tidak mendukung pengiriman ulang password.';
-$lang['resendpwd'] = 'Atur password baru';
-$lang['resendpwdmissing'] = 'Maaf, Anda harus mengisikan semua field.';
-$lang['resendpwdnouser'] = 'Maaf, user ini tidak ditemukan.';
-$lang['resendpwdbadauth'] = 'Maaf, kode autentikasi tidak valid. Pastikan Anda menggunakan keseluruhan link konfirmasi.';
-$lang['resendpwdconfirm'] = 'Link konfirmasi telah dikirim melalui email.';
-$lang['resendpwdsuccess'] = 'Password baru Anda telah dikirim melalui email.';
-$lang['license'] = 'Kecuali jika dinyatakan lain, konten pada wiki ini dilisensikan dibawah lisensi berikut:';
-$lang['licenseok'] = 'Catatan: Dengan menyunting halaman ini, Anda setuju untuk melisensikan konten Anda dibawah lisensi berikut:';
-$lang['searchmedia'] = 'Cari nama file:';
-$lang['searchmedia_in'] = 'Cari di %s';
-$lang['txt_upload'] = 'File yang akan diupload:';
-$lang['txt_filename'] = 'Masukkan nama wiki (opsional):';
-$lang['txt_overwrt'] = 'File yang telah ada akan ditindih';
-$lang['maxuploadsize'] = 'Unggah maks. %s per berkas';
-$lang['lockedby'] = 'Sedang dikunci oleh:';
-$lang['lockexpire'] = 'Penguncian artikel sampai dengan:';
$lang['js']['willexpire'] = 'Halaman yang sedang Anda kunci akan berakhir dalam waktu kurang lebih satu menit.\nUntuk menghindari konflik, gunakan tombol Preview untuk me-reset timer pengunci.';
$lang['js']['notsavedyet'] = 'Perubahan yang belum disimpan akan hilang.\nYakin akan dilanjutkan?';
$lang['js']['searchmedia'] = 'Cari file';
@@ -142,6 +106,43 @@ $lang['js']['media_done_btn'] = 'Selesai';
$lang['js']['media_drop'] = 'Tarik file disini untuk mengunggah';
$lang['js']['media_cancel'] = 'Buang';
$lang['js']['media_overwrt'] = 'Timpa berkas yang ada';
+$lang['regmissing'] = 'Maaf, Anda harus mengisi semua field.';
+$lang['reguexists'] = 'Maaf, user dengan user login ini telah ada.';
+$lang['regsuccess'] = 'User telah didaftarkan dan password telah dikirim ke email Anda.';
+$lang['regsuccess2'] = 'User telah dibuatkan.';
+$lang['regmailfail'] = 'Kami menemukan kesalahan saat mengirimkan password ke alamat email Anda. Mohon hubungi administrator.';
+$lang['regbadmail'] = 'Alamat email yang Anda masukkan tidak valid - jika menurut Anda hal ini adalah kesalahan sistem, mohon hubungi admin.';
+$lang['regbadpass'] = 'Passwod yang dimasukkan tidak sama. Silahkan ulangi lagi.';
+$lang['regpwmail'] = 'Password DokuWiki Anda';
+$lang['reghere'] = 'Anda belum mempunyai account? silahkan ';
+$lang['profna'] = 'Wiki ini tidak mengijinkan perubahan profil.';
+$lang['profnochange'] = 'Tidak ada perubahan.';
+$lang['profnoempty'] = 'Mohon mengisikan nama atau alamat email.';
+$lang['profchanged'] = 'Profil User berhasil diubah.';
+$lang['profnodelete'] = 'Wiki ini tidak mendukung penghapusan pengguna';
+$lang['profdeleteuser'] = 'Hapus Akun';
+$lang['profdeleted'] = 'Akun anda telah dihapus dari wiki ini';
+$lang['profconfdelete'] = 'Saya berharap menghapus akun saya dari wiki ini.
+Aksi ini tidak bisa diselesaikan.';
+$lang['profconfdeletemissing'] = 'Knfirmasi check box tidak tercentang';
+$lang['pwdforget'] = 'Lupa Password? Dapatkan yang baru';
+$lang['resendna'] = 'Wiki ini tidak mendukung pengiriman ulang password.';
+$lang['resendpwd'] = 'Atur password baru';
+$lang['resendpwdmissing'] = 'Maaf, Anda harus mengisikan semua field.';
+$lang['resendpwdnouser'] = 'Maaf, user ini tidak ditemukan.';
+$lang['resendpwdbadauth'] = 'Maaf, kode autentikasi tidak valid. Pastikan Anda menggunakan keseluruhan link konfirmasi.';
+$lang['resendpwdconfirm'] = 'Link konfirmasi telah dikirim melalui email.';
+$lang['resendpwdsuccess'] = 'Password baru Anda telah dikirim melalui email.';
+$lang['license'] = 'Kecuali jika dinyatakan lain, konten pada wiki ini dilisensikan dibawah lisensi berikut:';
+$lang['licenseok'] = 'Catatan: Dengan menyunting halaman ini, Anda setuju untuk melisensikan konten Anda dibawah lisensi berikut:';
+$lang['searchmedia'] = 'Cari nama file:';
+$lang['searchmedia_in'] = 'Cari di %s';
+$lang['txt_upload'] = 'File yang akan diupload:';
+$lang['txt_filename'] = 'Masukkan nama wiki (opsional):';
+$lang['txt_overwrt'] = 'File yang telah ada akan ditindih';
+$lang['maxuploadsize'] = 'Unggah maks. %s per berkas';
+$lang['lockedby'] = 'Sedang dikunci oleh:';
+$lang['lockexpire'] = 'Penguncian artikel sampai dengan:';
$lang['rssfailed'] = 'Error terjadi saat mengambil feed: ';
$lang['nothingfound'] = 'Tidak menemukan samasekali.';
$lang['mediaselect'] = 'Pilihan Mediafile';
@@ -308,5 +309,5 @@ $lang['media_restore'] = 'Kembalikan versi ini';
$lang['currentns'] = 'Namespace saat ini';
$lang['searchresult'] = 'Hasil Pencarian';
$lang['wikimarkup'] = 'Markah Wiki';
-$lang['email_signature_text'] = 'Email ini dibuat otomatis oleh DokuWiki
+$lang['email_signature_text'] = 'Email ini dibuat otomatis oleh DokuWiki
@DOKUWIKIURL@';
diff --git a/inc/lang/ja/lang.php b/inc/lang/ja/lang.php
index 17b410a43..968edf4eb 100644
--- a/inc/lang/ja/lang.php
+++ b/inc/lang/ja/lang.php
@@ -97,10 +97,10 @@ $lang['js']['mediaoriginal'] = 'オリジナルã®ã‚µã‚¤ã‚º';
$lang['js']['medialnk'] = '詳細ページã¸ã®ãƒªãƒ³ã‚¯';
$lang['js']['mediadirect'] = 'オリジナルã¸ã®ç›´ãƒªãƒ³ã‚¯';
$lang['js']['medianolnk'] = 'リンク無ã—';
-$lang['js']['medianolink'] = 'イメージをリンクã—ãªã„';
-$lang['js']['medialeft'] = 'イメージを左ã«å¯„ã›ã‚‹';
-$lang['js']['mediaright'] = 'イメージをå³ã«å¯„ã›ã‚‹';
-$lang['js']['mediacenter'] = 'イメージを中央ã«å¯„ã›ã‚‹';
+$lang['js']['medianolink'] = 'ç”»åƒã¸ãƒªãƒ³ã‚¯ã—ãªã„';
+$lang['js']['medialeft'] = 'ç”»åƒã‚’å·¦ã«å¯„ã›ã‚‹';
+$lang['js']['mediaright'] = 'ç”»åƒã‚’å³ã«å¯„ã›ã‚‹';
+$lang['js']['mediacenter'] = 'ç”»åƒã‚’中央ã«å¯„ã›ã‚‹';
$lang['js']['medianoalign'] = 'ä½ç½®ã‚’設定ã—ãªã„';
$lang['js']['nosmblinks'] = 'Windows ã®å…±æœ‰ãƒ•ォルダã¸ãƒªãƒ³ã‚¯ã¯ Microsoft Internet Explorer ã§ã—ã‹æ©Ÿèƒ½ã—ã¾ã›ã‚“ãŒã€ãƒªãƒ³ã‚¯ã‚’コピーã—ã¦è²¼ã‚Šä»˜ã‘ã‚‹ã“ã¨ã¯å¯èƒ½ã§ã™ã€‚';
$lang['js']['linkwiz'] = 'リンクウィザード';
@@ -124,9 +124,9 @@ $lang['search_contains'] = '部分一致';
$lang['search_custom_match'] = 'カスタム';
$lang['search_any_ns'] = 'å…¨ã¦ã®åå‰ç©ºé–“';
$lang['search_any_time'] = '全期間';
-$lang['search_past_7_days'] = 'ã“ã®1週間';
-$lang['search_past_month'] = 'ã“ã®1ヶ月';
-$lang['search_past_year'] = 'ã“ã®1å¹´';
+$lang['search_past_7_days'] = '1週間以内';
+$lang['search_past_month'] = '1カ月以内';
+$lang['search_past_year'] = '1年以内';
$lang['search_sort_by_hits'] = 'ヒット数順ã«ä¸¦ã¹ã‚‹';
$lang['search_sort_by_mtime'] = '最終更新順ã«ä¸¦ã¹ã‚‹';
$lang['regmissing'] = 'ãŠæ‰‹æ•°ã§ã™ãŒã€å…¨ã¦ã®é …目を入力ã—ã¦ãã ã•ã„。';
diff --git a/inc/lang/ja/locked.txt b/inc/lang/ja/locked.txt
index 89d5f7ed6..d501af456 100644
--- a/inc/lang/ja/locked.txt
+++ b/inc/lang/ja/locked.txt
@@ -1,3 +1,3 @@
====== 文書ロック中 ======
-ã“ã®æ–‡æ›¸ã¯ã€ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒç·¨é›†ä¸­ã®ãŸã‚ロックã•れã¦ã„ã¾ã™ã€‚編集ãŒå®Œäº†ã™ã‚‹ã‹ã€ãƒ­ãƒƒã‚¯ã®æœŸé™ãŒåˆ‡ã‚Œã‚‹ã®ã‚’å¾…ã£ã¦ä¸‹ã•ã„。
+ã“ã®æ–‡æ›¸ã¯ã€ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒç·¨é›†ä¸­ã®ãŸã‚ロックã•れã¦ã„ã¾ã™ã€‚編集ãŒå®Œäº†ã™ã‚‹ã‹ã€ãƒ­ãƒƒã‚¯ã®æœŸé™ãŒåˆ‡ã‚Œã‚‹ã¾ã§ãŠå¾…ã¡ä¸‹ã•ã„。
diff --git a/inc/lang/ja/mailtext.txt b/inc/lang/ja/mailtext.txt
index 8d1daed86..7ea2636f2 100644
--- a/inc/lang/ja/mailtext.txt
+++ b/inc/lang/ja/mailtext.txt
@@ -1,12 +1,14 @@
DokuWiki å†…ã®æ–‡æ›¸ãŒè¿½åŠ ã‚‚ã—ãã¯å¤‰æ›´ã•れã¾ã—ãŸã€‚詳細ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™ã€‚
-日付 : @DATE@
-ブラウザ : @BROWSER@
-IPアドレス : @IPADDRESS@
-ホストå : @HOSTNAME@
-å‰ãƒªãƒ“ジョン: @OLDPAGE@
-新リビジョン: @NEWPAGE@
-ç·¨é›†ã®æ¦‚è¦: @SUMMARY@
-ユーザーå : @USER@
+ブラウザ     : @BROWSER@
+IPアドレス    : @IPADDRESS@
+ホストå     : @HOSTNAME@
+å‰ãƒªãƒ“ジョン   : @OLDPAGE@
+新リビジョン   : @NEWPAGE@
+æ–°ãƒªãƒ“ã‚¸ãƒ§ãƒ³ã®æ—¥ä»˜: @DATE@
+ç·¨é›†ã®æ¦‚è¦ã€€ã€€ã€€ã€€: @SUMMARY@
+ユーザーå    : @USER@
+
+ã“ã®é€šçŸ¥ã®å¾Œã€æ–°ãŸãªãƒªãƒ“ジョンãŒè¿½åŠ ã•れã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ãã®å ´åˆã€æœ¬ãƒªãƒ“ジョンã®ãƒšãƒ¼ã‚¸ä¸Šéƒ¨ã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒè¡¨ç¤ºã•れã¾ã™ã€‚
@DIFF@
diff --git a/inc/lang/ja/preview.txt b/inc/lang/ja/preview.txt
index f9001f01c..c0fe39d86 100644
--- a/inc/lang/ja/preview.txt
+++ b/inc/lang/ja/preview.txt
@@ -1,3 +1,3 @@
====== プレビュー ======
-ç·¨é›†ä¸­ã®æ–‡æ›¸ã®ãƒ—レビューã§ã™ã€‚確èªç”¨ãªã®ã§**ä¿å­˜ã•れã¦ã„ãªã„**ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。
+ç·¨é›†ä¸­ã®æ–‡æ›¸ã®ãƒ—レビューã§ã™ã€‚**ã¾ã ä¿å­˜ã•れã¦ã„ã¾ã›ã‚“ã®ã§ã”注æ„下ã•ã„。** \ No newline at end of file
diff --git a/inc/lang/ja/registermail.txt b/inc/lang/ja/registermail.txt
index ad5241a0b..5a2484087 100644
--- a/inc/lang/ja/registermail.txt
+++ b/inc/lang/ja/registermail.txt
@@ -1,10 +1,10 @@
æ–°ã—ã„ユーザーãŒç™»éŒ²ã•れã¾ã—ãŸã€‚ユーザー情報ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™ã€‚
-ユーザーå : @NEWUSER@
-フルãƒãƒ¼ãƒ  : @NEWNAME@
-メールアドレス : @NEWEMAIL@
+ユーザーå  : @NEWUSER@
+フルãƒãƒ¼ãƒ ã€€ã€€: @NEWNAME@
+メールアドレス: @NEWEMAIL@
-登録日 : @DATE@
-ブラウザ : @BROWSER@
-IPアドレス : @IPADDRESS@
-ホストå : @HOSTNAME@
+登録日    : @DATE@
+ブラウザ   : @BROWSER@
+IPアドレス  : @IPADDRESS@
+ホストå   : @HOSTNAME@
diff --git a/inc/lang/ja/resetpwd.txt b/inc/lang/ja/resetpwd.txt
index a538f18f9..b28bc3763 100644
--- a/inc/lang/ja/resetpwd.txt
+++ b/inc/lang/ja/resetpwd.txt
@@ -1,3 +1,3 @@
====== æ–°ã—ã„パスワードを設定 ======
-ã“ã®Wikiã§ãŠä½¿ã„ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆç”¨ã®æ–°ã—ã„パスワードを入力ã—ã¦ä¸‹ã•ã„
+ã“ã®Wikiã§ãŠä½¿ã„ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆç”¨ã®æ–°ã—ã„パスワードを入力ã—ã¦ä¸‹ã•ã„。
diff --git a/inc/lang/ja/subscr_digest.txt b/inc/lang/ja/subscr_digest.txt
index 026a2fe89..7315b7622 100644
--- a/inc/lang/ja/subscr_digest.txt
+++ b/inc/lang/ja/subscr_digest.txt
@@ -1,6 +1,6 @@
ã“ã‚“ã«ã¡ã¯ã€‚
-@TITLE@ 内ã®ãƒšãƒ¼ã‚¸ @PAGE@ ã¯å¤‰æ›´ã•れã¾ã—ãŸã€‚
+@TITLE@ 内ã®ãƒšãƒ¼ã‚¸ @PAGE@ ã«å¤‰æ›´ãŒã‚りã¾ã—ãŸã€‚
変更点ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™ï¼š
--------------------------------------------------------
@@ -12,6 +12,5 @@
ã“ã®é€šçŸ¥ã‚’解除ã™ã‚‹ã«ã¯æ¬¡ã®ã‚¦ã‚£ã‚­ã¸ãƒ­ã‚°ã‚¤ãƒ³ã—
@DOKUWIKIURL@
-ãã®å¾Œã€
+ãã®å¾Œã€ä»¥ä¸‹ã®ãƒšãƒ¼ã‚¸ã‹ã‚‰ãƒšãƒ¼ã‚¸ã¨åå‰ç©ºé–“ã®å¤‰æ›´ã«å¯¾ã™ã‚‹è³¼èª­ã‚’解除ã—ã¦ãã ã•ã„。
@SUBSCRIBE@
-ページã¨åå‰ç©ºé–“ã®å¤‰æ›´ã«å¯¾ã™ã‚‹è³¼èª­ã‚’解除ã—ã¦ãã ã•ã„。
diff --git a/inc/lang/ja/subscr_list.txt b/inc/lang/ja/subscr_list.txt
index dbe37c7f8..3b841ea4b 100644
--- a/inc/lang/ja/subscr_list.txt
+++ b/inc/lang/ja/subscr_list.txt
@@ -1,15 +1,13 @@
ã“ã‚“ã«ã¡ã¯ã€‚
-@TITLE@ ã® åå‰ç©ºé–“ @PAGE@ ã«ã‚るページãŒå¤‰æ›´ã•れã¾ã—ãŸã€‚
+@TITLE@ ã® åå‰ç©ºé–“ @PAGE@ ã«ã‚るページã«å¤‰æ›´ãŒã‚りã¾ã—ãŸã€‚
変更点ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™:
--------------------------------------------------------
@DIFF@
--------------------------------------------------------
-
ã“ã®é€šçŸ¥ã‚’解除ã™ã‚‹ã«ã¯æ¬¡ã®ã‚¦ã‚£ã‚­ã¸ãƒ­ã‚°ã‚¤ãƒ³ã—
@DOKUWIKIURL@
-ãã®å¾Œã€
+ãã®å¾Œã€ä»¥ä¸‹ã®ãƒšãƒ¼ã‚¸ã‹ã‚‰ãƒšãƒ¼ã‚¸ã¨åå‰ç©ºé–“ã®å¤‰æ›´ã«å¯¾ã™ã‚‹è³¼èª­ã‚’解除ã—ã¦ãã ã•ã„。
@SUBSCRIBE@
-ページã¨åå‰ç©ºé–“ã®å¤‰æ›´ã«å¯¾ã™ã‚‹è³¼èª­ã‚’解除ã—ã¦ãã ã•ã„。
diff --git a/inc/lang/ja/subscr_single.txt b/inc/lang/ja/subscr_single.txt
index 4dac31e02..68190bfc4 100644
--- a/inc/lang/ja/subscr_single.txt
+++ b/inc/lang/ja/subscr_single.txt
@@ -1,20 +1,19 @@
ã“ã‚“ã«ã¡ã¯ã€‚
-@TITLE@ ã®ã‚¦ã‚£ã‚­ã«ã‚るページ @PAGE@ ãŒå¤‰æ›´ã•れã¾ã—ãŸã€‚
+@TITLE@ ã®ã‚¦ã‚£ã‚­ã«ã‚るページ @PAGE@ ã«å¤‰æ›´ãŒã‚りã¾ã—ãŸã€‚
変更点ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™:
--------------------------------------------------------
@DIFF@
--------------------------------------------------------
-日付 : @DATE@
-ユーザー : @USER@
-変更概è¦: @SUMMARY@
-å¤ã„リビジョン: @OLDPAGE@
-æ–°ã—ã„リビジョン: @NEWPAGE@
+ユーザー       : @USER@
+ç·¨é›†ã®æ¦‚è¦ã€€ã€€ã€€ã€€ã€€ã€€: @SUMMARY@
+å¤ã„リビジョン    : @OLDPAGE@
+æ–°ã—ã„リビジョン   : @NEWPAGE@
+æ–°ã—ã„ãƒªãƒ“ã‚¸ãƒ§ãƒ³ã®æ—¥ä»˜: @DATE@
ã“ã®é€šçŸ¥ã‚’解除ã™ã‚‹ã«ã¯æ¬¡ã®ã‚¦ã‚£ã‚­ã¸ãƒ­ã‚°ã‚¤ãƒ³ã—
@DOKUWIKIURL@
-ãã®å¾Œã€
+ãã®å¾Œã€ä»¥ä¸‹ã®ãƒšãƒ¼ã‚¸ã‹ã‚‰ãƒšãƒ¼ã‚¸ã¨åå‰ç©ºé–“ã®å¤‰æ›´ã«å¯¾ã™ã‚‹è³¼èª­ã‚’解除ã—ã¦ãã ã•ã„。
@SUBSCRIBE@
-ページã¨åå‰ç©ºé–“ã®å¤‰æ›´ã«å¯¾ã™ã‚‹è³¼èª­ã‚’解除ã—ã¦ãã ã•ã„。
diff --git a/inc/lang/ja/updateprofile.txt b/inc/lang/ja/updateprofile.txt
index f3fb01e3c..21096970b 100644
--- a/inc/lang/ja/updateprofile.txt
+++ b/inc/lang/ja/updateprofile.txt
@@ -1,3 +1,3 @@
====== アカウント情報更新 ======
-変更ã—ãŸã„é …ç›®ã®ã¿å…¥åŠ›ã—ã¦ä¸‹ã•ã„。ユーザーåã¯å¤‰æ›´ã§ãã¾ã›ã‚“。
+変更ã—ãŸã„é …ç›®ã®ã¿æ›¸ãæ›ãˆã¦ä¸‹ã•ã„。ユーザーåã¯å¤‰æ›´ã§ãã¾ã›ã‚“。
diff --git a/inc/lang/ja/uploadmail.txt b/inc/lang/ja/uploadmail.txt
index 8734c91df..11fa1a46d 100644
--- a/inc/lang/ja/uploadmail.txt
+++ b/inc/lang/ja/uploadmail.txt
@@ -1,10 +1,11 @@
ãŠä½¿ã„ã®DokuWikiã«ãƒ•ァイルãŒã‚¢ãƒƒãƒ—ロードã•れã¾ã—ãŸã€‚詳細ã¯ä»¥ä¸‹ã®é€šã‚Šã§ã™ã€‚
-ファイル : @MEDIA@
-日付 : @DATE@
-ブラウザ : @BROWSER@
-IPアドレス : @IPADDRESS@
-ホストå : @HOSTNAME@
-サイズ : @SIZE@
-MIMEタイプ : @MIME@
-ユーザーå : @USER@
+ファイル : @MEDIA@
+å¤ã„版  : @OLD@
+日付   : @DATE@
+ブラウザ : @BROWSER@
+IPアドレス: @IPADDRESS@
+ホストå : @HOSTNAME@
+サイズ  : @SIZE@
+MIMEタイプ: @MIME@
+ユーザーå: @USER@
diff --git a/inc/lang/nl/lang.php b/inc/lang/nl/lang.php
index 2cd368639..f799318c3 100644
--- a/inc/lang/nl/lang.php
+++ b/inc/lang/nl/lang.php
@@ -3,6 +3,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author PBU <pbu@xs4all.nl>
* @author Gerrit Uitslag <klapinklapin@gmail.com>
* @author Andy <astolker@icloud.com>
* @author Harriet Neitz <harrietneitz@gmail.com>
diff --git a/inc/lang/no/lang.php b/inc/lang/no/lang.php
index 2cb6839fa..0b4cd8629 100644
--- a/inc/lang/no/lang.php
+++ b/inc/lang/no/lang.php
@@ -3,8 +3,8 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
- * @author Rut Kristin Aanestad <dark@met.no>
* @author Torgeir Blesvik <bletor@banenor.no>
+ * @author Rut Kristin Aanestad <dark@met.no>
* @author ThorPrestboen <thor.erling.prestboen@gmail.com>
* @author Christian McKenna <mckchr@banenor.no>
* @author Reidar Mosvold <Reidar.Mosvold@hit.no>
@@ -90,6 +90,7 @@ $lang['minoredit'] = 'Mindre endringer';
$lang['draftdate'] = 'Kladd autolagret';
$lang['nosecedit'] = 'Siden er i mellomtiden endret, seksjonsinfo har blitt foreldet - lastet full side istedet.';
$lang['searchcreatepage'] = 'Hvis du ikke fant det du søkte etter kan du lage eller endre siden %s.';
+$lang['js']['search_toggle_tools'] = 'Søkeverktøy';
$lang['js']['willexpire'] = 'Din redigeringslås for dette dokumentet kommer snart til å utløpe.\nFor å unngå versjonskonflikter bør du forhåndsvise dokumentet ditt for å forlenge redigeringslåsen.';
$lang['js']['notsavedyet'] = 'Ulagrede endringer vil gå tapt!
Vil du fortsette?';
diff --git a/inc/lang/pt-br/lang.php b/inc/lang/pt-br/lang.php
index da698a90b..c88049e1b 100644
--- a/inc/lang/pt-br/lang.php
+++ b/inc/lang/pt-br/lang.php
@@ -3,6 +3,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Schopf <pschopf@gmail.com>
* @author Frederico Gonçalves Guimarães <frederico@teia.bio.br>
* @author Márcio Gomes Gonçalves <gomes@metha.com.br>
* @author Luis Fernando Enciso <lfenciso@certto.com.br>
diff --git a/inc/lang/pt/lang.php b/inc/lang/pt/lang.php
index 3ac1596f2..5c01a073e 100644
--- a/inc/lang/pt/lang.php
+++ b/inc/lang/pt/lang.php
@@ -3,8 +3,8 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Schopf <pschopf@gmail.com>
* @author Mario AlexandTeixeira dos Santos <masterofclan@gmail.com>
- * @author Paulo Ricardo Schopf <pschopf@gmail.com>
* @author Maykon Oliveira <maykonoliveira850@gmail.com>
* @author José Vieira <jmsv63@gmail.com>
* @author José Carlos Monteiro <jose.c.monteiro@netcabo.pt>
diff --git a/inc/lang/ru/lang.php b/inc/lang/ru/lang.php
index 5e6277dfa..350e7d926 100644
--- a/inc/lang/ru/lang.php
+++ b/inc/lang/ru/lang.php
@@ -4,10 +4,10 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
* @author Aleksandr Selivanov <alexgearbox@yandex.ru>
+ * @author Yuriy Skalko <yuriy.skalko@gmail.com>
* @author Alexander Kh. <001.arx@gmail.com>
* @author Vyacheslav Strenadko <vyacheslav.strenadko@gmail.com>
* @author Wolterhon <hotmottot.1@gmail.com>
- * @author Yuriy Skalko <yuriy.skalko@gmail.com>
* @author Zhassulan <zyesmukanov@gmail.com>
* @author Yuri Pimenov <up@ftpsearch.lv>
* @author Igor Tarasov <tigr@mail15.com>
@@ -214,7 +214,7 @@ $lang['accessdenied'] = 'Ð’Ñ‹ не можете проÑмотреть
$lang['mediausage'] = 'Ð”Ð»Ñ ÑÑылки на Ñтот файл иÑпользуйте Ñледующий ÑинтакÑиÑ:';
$lang['mediaview'] = 'ПоÑмотреть иÑходный файл';
$lang['mediaroot'] = 'корень';
-$lang['mediaupload'] = 'Загрузка файла в текущее проÑтранÑтво имён. Ð”Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð´Ð¿Ñ€Ð¾ÑтранÑтва имён, добавьте его название перед именем файла через двоеточие. ПоддерживаетÑÑ drag-and-drop.';
+$lang['mediaupload'] = 'Загрузка файла в текущее проÑтранÑтво имён. Ð”Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð´Ð¿Ñ€Ð¾ÑтранÑтва имён добавьте его название перед именем файла через двоеточие. ПоддерживаетÑÑ drag-and-drop (перетащить-и-оÑтавить).';
$lang['mediaextchange'] = 'РаÑширение изменилоÑÑŒ Ñ .%s на .%s!';
$lang['reference'] = 'СÑылки длÑ';
$lang['ref_inuse'] = 'Этот файл не может быть удалён, так как он иÑпользуетÑÑ Ð½Ð°Â Ñледующих Ñтраницах:';
@@ -257,7 +257,7 @@ $lang['mail_newpage'] = 'Ñтраница добавлена:';
$lang['mail_changed'] = 'Ñтраница изменена:';
$lang['mail_subscribe_list'] = 'изменилиÑÑŒ Ñтраницы в проÑтранÑтве имён:';
$lang['mail_new_user'] = 'новый пользователь:';
-$lang['mail_upload'] = 'файл закачан:';
+$lang['mail_upload'] = 'файл загружен:';
$lang['changes_type'] = 'ПоÑмотреть изменениÑ';
$lang['pages_changes'] = 'Ñтраниц';
$lang['media_changes'] = 'медиафайлов';
diff --git a/inc/lang/ru/uploadmail.txt b/inc/lang/ru/uploadmail.txt
index a92d85564..7c342a702 100644
--- a/inc/lang/ru/uploadmail.txt
+++ b/inc/lang/ru/uploadmail.txt
@@ -1,4 +1,4 @@
-Ð’ вашу вики был закачан файл. ÐŸÐ¾Ð´Ñ€Ð¾Ð±Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ:
+Ð’ вашу вики был загружен файл. ÐŸÐ¾Ð´Ñ€Ð¾Ð±Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ:
Файл: @MEDIA@
Ð¡Ñ‚Ð°Ñ€Ð°Ñ Ð²ÐµÑ€ÑиÑ: @OLD@
diff --git a/inc/lang/sk/lang.php b/inc/lang/sk/lang.php
index b15b94133..83c160b60 100644
--- a/inc/lang/sk/lang.php
+++ b/inc/lang/sk/lang.php
@@ -8,6 +8,7 @@
* auth.class language support
* installer strings
*
+ * @author Peter Mydliar <peto.mydliar@gmail.com>
* @author Martin Michalek <michalek.dev@gmail.com>
* @author Ondrej Vegh <ov@vsieti.sk> with help of the scholars from Zdruzena stredna skola polygraficka in Bratislava
* @author Michal Mesko <michal.mesko@gmail.com>
diff --git a/inc/lang/sr/admin.txt b/inc/lang/sr/admin.txt
index 8798fd4a6..284410b4b 100644
--- a/inc/lang/sr/admin.txt
+++ b/inc/lang/sr/admin.txt
@@ -1,3 +1,3 @@
====== ÐдминиÑтрација ======
-Изпод Ñе налази лиÑта доÑтупних админиÑтраторÑких опција у DokuWiki-ју.
+ИÑпод Ñе налази лиÑта доÑтупних админиÑтраторÑких опција у DokuWiki-ју.
diff --git a/inc/mail.php b/inc/mail.php
index 12a669dbe..429976d72 100644
--- a/inc/mail.php
+++ b/inc/mail.php
@@ -308,7 +308,7 @@ function mail_quotedprintable_encode($sText,$maxlen=74,$bEmulate_imap_8bit=true)
// encode x09,x20 at lineends
{
$iLength = strlen($sLine);
- $iLastChar = ord($sLine{$iLength-1});
+ $iLastChar = ord($sLine[$iLength-1]);
// !!!!!!!!
// imap_8_bit does not encode x20 at the very end of a text,
@@ -317,7 +317,7 @@ function mail_quotedprintable_encode($sText,$maxlen=74,$bEmulate_imap_8bit=true)
// or comment next line for RFC2045 conformance, if you like
if (!($bEmulate_imap_8bit && ($i==count($aLines)-1))){
if (($iLastChar==0x09)||($iLastChar==0x20)) {
- $sLine{$iLength-1}='=';
+ $sLine[$iLength-1]='=';
$sLine .= ($iLastChar==0x09)?'09':'20';
}
}
diff --git a/inc/media.php b/inc/media.php
index 41fbc0b8f..cc29bd16c 100644
--- a/inc/media.php
+++ b/inc/media.php
@@ -544,7 +544,7 @@ function media_upload_finish($fn_tmp, $fn, $id, $imime, $overwrite, $move = 'mov
// (Should normally chmod to $conf['fperm'] only if $conf['fperm'] is set.)
chmod($fn, $conf['fmode']);
msg($lang['uploadsucc'],1);
- media_notify($id,$fn,$imime,$old);
+ media_notify($id,$fn,$imime,$old,$new);
// add a log entry to the media changelog
$filesize_new = filesize($fn);
$sizechange = $filesize_new - $filesize_old;
@@ -672,12 +672,12 @@ function media_contentcheck($file,$mime){
* @param bool|int $old_rev revision timestamp or false
* @return bool
*/
-function media_notify($id,$file,$mime,$old_rev=false){
+function media_notify($id,$file,$mime,$old_rev=false,$current_rev=false){
global $conf;
if(empty($conf['notify'])) return false; //notify enabled?
$subscription = new MediaSubscriptionSender();
- return $subscription->sendMediaDiff($conf['notify'], 'uploadmail', $id, $old_rev);
+ return $subscription->sendMediaDiff($conf['notify'], 'uploadmail', $id, $old_rev, $current_rev);
}
/**
@@ -2082,7 +2082,7 @@ function media_resize_image($file, $ext, $w, $h=0){
media_resize_imageIM($ext, $file, $info[0], $info[1], $local, $w, $h) ||
media_resize_imageGD($ext, $file, $info[0], $info[1], $local, $w, $h)
) {
- if(!empty($conf['fperm'])) @chmod($local, $conf['fperm']);
+ if($conf['fperm']) @chmod($local, $conf['fperm']);
return $local;
}
//still here? resizing failed
@@ -2149,7 +2149,7 @@ function media_crop_image($file, $ext, $w, $h=0){
if( $mtime > @filemtime($file) ||
media_crop_imageIM($ext,$file,$info[0],$info[1],$local,$cw,$ch,$cx,$cy) ||
media_resize_imageGD($ext,$file,$cw,$ch,$local,$cw,$ch,$cx,$cy) ){
- if(!empty($conf['fperm'])) @chmod($local, $conf['fperm']);
+ if($conf['fperm']) @chmod($local, $conf['fperm']);
return media_resize_image($local,$ext, $w, $h);
}
diff --git a/inc/pageutils.php b/inc/pageutils.php
index bc39a6fef..94d8b825a 100644
--- a/inc/pageutils.php
+++ b/inc/pageutils.php
@@ -464,7 +464,7 @@ function resolve_id($ns,$id,$clean=true){
// if the id starts with a dot we need to handle the
// relative stuff
- if($id && $id{0} == '.'){
+ if($id && $id[0] == '.'){
// normalize initial dots without a colon
$id = preg_replace('/^(\.+)(?=[^:\.])/','\1:',$id);
// prepend the current namespace
@@ -619,7 +619,7 @@ function resolve_pageid($ns,&$page,&$exists,$rev='',$date_at=false ){
function getCacheName($data,$ext=''){
global $conf;
$md5 = md5($data);
- $file = $conf['cachedir'].'/'.$md5{0}.'/'.$md5.$ext;
+ $file = $conf['cachedir'].'/'.$md5[0].'/'.$md5.$ext;
io_makeFileDir($file);
return $file;
}
diff --git a/inc/parser/handler.php b/inc/parser/handler.php
index 19c2aafe8..e5f7c4ed5 100644
--- a/inc/parser/handler.php
+++ b/inc/parser/handler.php
@@ -44,11 +44,17 @@ class Doku_Handler {
* @param mixed $args arguments for this call
* @param int $pos byte position in the original source file
*/
- protected function addCall($handler, $args, $pos) {
+ public function addCall($handler, $args, $pos) {
$call = array($handler,$args, $pos);
$this->callWriter->writeCall($call);
}
+ /** @deprecated 2019-10-31 use addCall() instead */
+ public function _addCall($handler, $args, $pos) {
+ dbg_deprecated('addCall');
+ $this->addCall($handler, $args, $pos);
+ }
+
/**
* Similar to addCall, but adds a plugin call
*
@@ -58,7 +64,7 @@ class Doku_Handler {
* @param int $pos byte position in the original source file
* @param string $match matched syntax
*/
- protected function addPluginCall($plugin, $args, $state, $pos, $match) {
+ public function addPluginCall($plugin, $args, $state, $pos, $match) {
$call = array('plugin',array($plugin, $args, $state, $match), $pos);
$this->callWriter->writeCall($call);
}
diff --git a/inc/parser/metadata.php b/inc/parser/metadata.php
index fa64ae2ec..849fffe8d 100644
--- a/inc/parser/metadata.php
+++ b/inc/parser/metadata.php
@@ -64,7 +64,7 @@ class Doku_Renderer_metadata extends Doku_Renderer
$this->headers = array();
// external pages are missing create date
- if (!$this->persistent['date']['created']) {
+ if (!isset($this->persistent['date']['created']) || !$this->persistent['date']['created']) {
$this->persistent['date']['created'] = filectime(wikiFN($ID));
}
if (!isset($this->persistent['user'])) {
diff --git a/inc/parser/parser.php b/inc/parser/parser.php
index d9fc5fb8f..aee82f01d 100644
--- a/inc/parser/parser.php
+++ b/inc/parser/parser.php
@@ -1,5 +1,7 @@
<?php
+use dokuwiki\Debug\PropertyDeprecationHelper;
+
/**
* Define various types of modes used by the parser - they are used to
* populate the list of modes another mode accepts
@@ -48,10 +50,50 @@ $PARSER_MODES = array(
* @deprecated 2018-05-04
*/
class Doku_Parser extends \dokuwiki\Parsing\Parser {
+ use PropertyDeprecationHelper {
+ __set as protected deprecationHelperMagicSet;
+ __get as protected deprecationHelperMagicGet;
+ }
/** @inheritdoc */
- public function __construct(Doku_Handler $handler) {
+ public function __construct(Doku_Handler $handler = null) {
dbg_deprecated(\dokuwiki\Parsing\Parser::class);
+ $this->deprecatePublicProperty('modes', __CLASS__);
+ $this->deprecatePublicProperty('connected', __CLASS__);
+
+ if ($handler === null) {
+ $handler = new Doku_Handler();
+ }
+
parent::__construct($handler);
}
+
+ public function __set($name, $value)
+ {
+
+ if ($name === 'Handler') {
+ $this->handler = $value;
+ return;
+ }
+
+ if ($name === 'Lexer') {
+ $this->lexer = $value;
+ return;
+ }
+
+ $this->deprecationHelperMagicSet($name, $value);
+ }
+
+ public function __get($name)
+ {
+ if ($name === 'Handler') {
+ return $this->handler;
+ }
+
+ if ($name === 'Lexer') {
+ return $this->lexer;
+ }
+
+ return $this->deprecationHelperMagicGet($name);
+ }
}
diff --git a/inc/parser/renderer.php b/inc/parser/renderer.php
index 9720cfd90..a03b84c8e 100644
--- a/inc/parser/renderer.php
+++ b/inc/parser/renderer.php
@@ -866,7 +866,7 @@ abstract class Doku_Renderer extends Plugin {
//use placeholders
$url = str_replace('{URL}', rawurlencode($reference), $url);
//wiki names will be cleaned next, otherwise urlencode unsafe chars
- $url = str_replace('{NAME}', ($url{0} === ':') ? $reference :
+ $url = str_replace('{NAME}', ($url[0] === ':') ? $reference :
preg_replace_callback('/[[\\\\\]^`{|}#%]/', function($match) {
return rawurlencode($match[0]);
}, $reference), $url);
@@ -889,7 +889,7 @@ abstract class Doku_Renderer extends Plugin {
$url = $url.rawurlencode($reference);
}
//handle as wiki links
- if($url{0} === ':') {
+ if($url[0] === ':') {
$urlparam = null;
$id = $url;
if (strpos($url, '?') !== false) {
diff --git a/inc/parser/xhtml.php b/inc/parser/xhtml.php
index b1931d6f0..169f4f9f4 100644
--- a/inc/parser/xhtml.php
+++ b/inc/parser/xhtml.php
@@ -680,7 +680,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
$this->doc .= '</a></dt>'.DOKU_LF.'<dd>';
}
- if($text{0} == "\n") {
+ if($text[0] == "\n") {
$text = substr($text, 1);
}
if(substr($text, -1) == "\n") {
@@ -917,7 +917,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
$link['pre'] = '';
$link['suf'] = '';
// highlight link to current page
- if($id == $INFO['id']) {
+ if(isset($INFO) && $id == $INFO['id']) {
$link['pre'] = '<span class="curid">';
$link['suf'] = '</span>';
}
diff --git a/inc/pluginutils.php b/inc/pluginutils.php
index f1ad82fe6..0514d1c6a 100644
--- a/inc/pluginutils.php
+++ b/inc/pluginutils.php
@@ -27,10 +27,13 @@ if(!defined('DOKU_PLUGIN_NAME_REGEX')) define('DOKU_PLUGIN_NAME_REGEX', '[a-zA-Z
* @param bool $all; true to retrieve all, false to retrieve only enabled plugins
* @return array with plugin names or plugin component names
*/
-function plugin_list($type='',$all=false) {
+function plugin_list($type='',$all=false)
+{
/** @var $plugin_controller PluginController */
global $plugin_controller;
- return $plugin_controller->getList($type,$all);
+ $plugins = $plugin_controller->getList($type,$all);
+ sort($plugins, SORT_NATURAL|SORT_FLAG_CASE);
+ return $plugins;
}
/**
@@ -44,7 +47,8 @@ function plugin_list($type='',$all=false) {
* @param $disabled bool true to load even disabled plugins
* @return PluginInterface|null the plugin object or null on failure
*/
-function plugin_load($type,$name,$new=false,$disabled=false) {
+function plugin_load($type,$name,$new=false,$disabled=false)
+{
/** @var $plugin_controller PluginController */
global $plugin_controller;
return $plugin_controller->load($type,$name,$new,$disabled);
@@ -56,7 +60,8 @@ function plugin_load($type,$name,$new=false,$disabled=false) {
* @param string $plugin name of plugin
* @return bool true disabled, false enabled
*/
-function plugin_isdisabled($plugin) {
+function plugin_isdisabled($plugin)
+{
/** @var $plugin_controller PluginController */
global $plugin_controller;
return $plugin_controller->isdisabled($plugin);
@@ -68,7 +73,8 @@ function plugin_isdisabled($plugin) {
* @param string $plugin name of plugin
* @return bool true saving succeed, false saving failed
*/
-function plugin_enable($plugin) {
+function plugin_enable($plugin)
+{
/** @var $plugin_controller PluginController */
global $plugin_controller;
return $plugin_controller->enable($plugin);
@@ -80,7 +86,8 @@ function plugin_enable($plugin) {
* @param string $plugin name of plugin
* @return bool true saving succeed, false saving failed
*/
-function plugin_disable($plugin) {
+function plugin_disable($plugin)
+{
/** @var $plugin_controller PluginController */
global $plugin_controller;
return $plugin_controller->disable($plugin);
@@ -93,7 +100,8 @@ function plugin_disable($plugin) {
* @return string name of directory
* @deprecated 2018-07-20
*/
-function plugin_directory($plugin) {
+function plugin_directory($plugin)
+{
dbg_deprecated('$plugin directly');
return $plugin;
}
@@ -103,7 +111,8 @@ function plugin_directory($plugin) {
*
* @return array with arrays of plugin configs
*/
-function plugin_getcascade() {
+function plugin_getcascade()
+{
/** @var $plugin_controller PluginController */
global $plugin_controller;
return $plugin_controller->getCascade();
@@ -116,7 +125,8 @@ function plugin_getcascade() {
*
* @return Doku_Plugin_Admin
*/
-function plugin_getRequestAdminPlugin(){
+function plugin_getRequestAdminPlugin()
+{
static $admin_plugin = false;
global $ACT,$INPUT,$INFO;
diff --git a/inc/template.php b/inc/template.php
index caec0b87b..798fea52e 100644
--- a/inc/template.php
+++ b/inc/template.php
@@ -263,7 +263,7 @@ function tpl_metaheaders($alt = true) {
$head['link'][] = array(
'rel' => 'alternate', 'type'=> 'application/rss+xml',
'title'=> $lang['currentns'],
- 'href' => DOKU_BASE.'feed.php?mode=list&ns='.$INFO['namespace']
+ 'href' => DOKU_BASE.'feed.php?mode=list&ns='.(isset($INFO) ? $INFO['namespace'] : '')
);
}
if(($ACT == 'show' || $ACT == 'search') && $INFO['writable']) {
@@ -332,31 +332,33 @@ function tpl_metaheaders($alt = true) {
// load stylesheets
$head['link'][] = array(
- 'rel' => 'stylesheet', 'type'=> 'text/css',
+ 'rel' => 'stylesheet',
'href'=> DOKU_BASE.'lib/exe/css.php?t='.rawurlencode($conf['template']).'&tseed='.$tseed
);
- $script = "var NS='".$INFO['namespace']."';";
+ $script = "var NS='".(isset($INFO)?$INFO['namespace']:'')."';";
if($conf['useacl'] && $INPUT->server->str('REMOTE_USER')) {
$script .= "var SIG='".toolbar_signature()."';";
}
jsinfo();
$script .= 'var JSINFO = ' . json_encode($JSINFO).';';
- $head['script'][] = array('type'=> 'text/javascript', '_data'=> $script);
+ $head['script'][] = array('_data'=> $script);
// load jquery
$jquery = getCdnUrls();
foreach($jquery as $src) {
$head['script'][] = array(
- 'type' => 'text/javascript', 'charset' => 'utf-8', '_data' => '', 'src' => $src
- );
+ 'charset' => 'utf-8',
+ '_data' => '',
+ 'src' => $src,
+ ) + ($conf['defer_js'] ? [ 'defer' => 'defer'] : []);
}
// load our javascript dispatcher
$head['script'][] = array(
- 'type'=> 'text/javascript', 'charset'=> 'utf-8', '_data'=> '',
- 'src' => DOKU_BASE.'lib/exe/js.php'.'?t='.rawurlencode($conf['template']).'&tseed='.$tseed
- );
+ 'charset'=> 'utf-8', '_data'=> '',
+ 'src' => DOKU_BASE.'lib/exe/js.php'.'?t='.rawurlencode($conf['template']).'&tseed='.$tseed,
+ ) + ($conf['defer_js'] ? [ 'defer' => 'defer'] : []);
// trigger event here
Event::createAndTrigger('TPL_METAHEADER_OUTPUT', $head, '_tpl_metaheaders_action', true);
@@ -957,6 +959,7 @@ function tpl_pagetitle($id = null, $ret = false) {
// page functions
case 'edit' :
+ case 'preview' :
$page_title = "✎ ".$name;
break;
@@ -1845,7 +1848,7 @@ function tpl_classes() {
'mode_'.$ACT,
'tpl_'.$conf['template'],
$INPUT->server->bool('REMOTE_USER') ? 'loggedIn' : '',
- $INFO['exists'] ? '' : 'notFound',
+ (isset($INFO) && $INFO['exists']) ? '' : 'notFound',
($ID == $conf['start']) ? 'home' : '',
);
return join(' ', $classes);
diff --git a/install.php b/install.php
index 407c2c364..55dac2570 100644
--- a/install.php
+++ b/install.php
@@ -46,7 +46,7 @@ header('Content-Type: text/html; charset=utf-8');
<head>
<meta charset="utf-8" />
<title><?php echo $lang['i_installer']?></title>
- <style type="text/css">
+ <style>
body { width: 90%; margin: 0 auto; font: 84% Verdana, Helvetica, Arial, sans-serif; }
img { border: none }
br.cl { clear:both; }
@@ -56,7 +56,7 @@ header('Content-Type: text/html; charset=utf-8');
select.text, input.text { width: 30em; margin: 0 0.5em; }
a {text-decoration: none}
</style>
- <script type="text/javascript">
+ <script>
function acltoggle(){
var cb = document.getElementById('acl');
var fs = document.getElementById('acldep');
diff --git a/lib/exe/css.php b/lib/exe/css.php
index 40de4b828..2ea2c0963 100644
--- a/lib/exe/css.php
+++ b/lib/exe/css.php
@@ -470,7 +470,7 @@ class DokuCssFile {
if (preg_match('#^(/|data:|https?://)#', $match[3])) { // not a relative url? - no adjustment required
return $match[0];
} elseif (substr($match[3], -5) == '.less') { // a less file import? - requires a file system location
- if ($match[3]{0} != '/') {
+ if ($match[3][0] != '/') {
$match[3] = $this->getRelativePath() . '/' . $match[3];
}
} else { // everything else requires a url adjustment
@@ -543,10 +543,20 @@ function css_pluginstyles($mediatype='screen'){
* @return string
*/
function css_compress($css){
- //strip comments through a callback
+ // replace quoted strings with placeholder
+ $quote_storage = [];
+
+ $quote_cb = function ($match) use (&$quote_storage) {
+ $quote_storage[] = $match[0];
+ return '"STR'.(count($quote_storage)-1).'"';
+ };
+
+ $css = preg_replace_callback('/(([\'"]).*?(?<!\\\\)\2)/', $quote_cb, $css);
+
+ // strip comments through a callback
$css = preg_replace_callback('#(/\*)(.*?)(\*/)#s','css_comment_cb',$css);
- //strip (incorrect but common) one line comments
+ // strip (incorrect but common) one line comments
$css = preg_replace_callback('/^.*\/\/.*$/m','css_onelinecomment_cb',$css);
// strip whitespaces
@@ -600,6 +610,14 @@ function css_compress($css){
$css
);
+ // replace back protected strings
+ $quote_back_cb = function ($match) use (&$quote_storage) {
+ return $quote_storage[$match[1]];
+ };
+
+ $css = preg_replace_callback('/"STR(\d+)"/', $quote_back_cb, $css);
+ $css = trim($css);
+
return $css;
}
@@ -642,23 +660,6 @@ function css_onelinecomment_cb($matches) {
break;
}
- // keep any quoted string that starts before a comment
- $nextsqt = strpos($line, "'", $i);
- $nextdqt = strpos($line, '"', $i);
- if(min($nextsqt, $nextdqt) < $nextcom) {
- $skipto = false;
- if($nextsqt !== false && ($nextdqt === false || $nextsqt < $nextdqt)) {
- $skipto = strpos($line, "'", $nextsqt+1) +1;
- } else if ($nextdqt !== false) {
- $skipto = strpos($line, '"', $nextdqt+1) +1;
- }
-
- if($skipto !== false) {
- $i = $skipto;
- continue;
- }
- }
-
if($nexturl === false || $nextcom < $nexturl) {
// no url anymore, strip comment and be done
$i = $nextcom;
diff --git a/lib/exe/js.php b/lib/exe/js.php
index ae6a6366f..04abec6c0 100644
--- a/lib/exe/js.php
+++ b/lib/exe/js.php
@@ -184,7 +184,7 @@ function js_load($file){
$loaded[$base] = true;
}
- if($ifile{0} != '/') $ifile = dirname($file).'/'.$ifile;
+ if($ifile[0] != '/') $ifile = dirname($file).'/'.$ifile;
if(file_exists($ifile)){
$idata = io_readFile($ifile);
@@ -362,13 +362,13 @@ function js_compress($s){
// reserved word (e.g. "for", "else", "if") or a
// variable/object/method (e.g. "foo.color")
while ($i < $slen && (strpos($chars,$s[$i]) === false) ){
- $result .= $s{$i};
+ $result .= $s[$i];
$i = $i + 1;
}
- $ch = $s{$i};
+ $ch = $s[$i];
// multiline comments (keeping IE conditionals)
- if($ch == '/' && $s{$i+1} == '*' && $s{$i+2} != '@'){
+ if($ch == '/' && $s[$i+1] == '*' && $s[$i+2] != '@'){
$endC = strpos($s,'*/',$i+2);
if($endC === false) trigger_error('Found invalid /*..*/ comment', E_USER_ERROR);
@@ -387,7 +387,7 @@ function js_compress($s){
}
// singleline
- if($ch == '/' && $s{$i+1} == '/'){
+ if($ch == '/' && $s[$i+1] == '/'){
$endC = strpos($s,"\n",$i+2);
if($endC === false) trigger_error('Invalid comment', E_USER_ERROR);
$i = $endC;
@@ -398,15 +398,15 @@ function js_compress($s){
if($ch == '/'){
// rewind, skip white space
$j = 1;
- while(in_array($s{$i-$j}, $whitespaces_chars)){
+ while(in_array($s[$i-$j], $whitespaces_chars)){
$j = $j + 1;
}
- if( in_array($s{$i-$j}, $regex_starters) ){
+ if( in_array($s[$i-$j], $regex_starters) ){
// yes, this is an re
// now move forward and find the end of it
$j = 1;
- while($s{$i+$j} != '/'){
- if($s{$i+$j} == '\\') $j = $j + 2;
+ while($s[$i+$j] != '/'){
+ if($s[$i+$j] == '\\') $j = $j + 2;
else $j++;
}
$result .= substr($s,$i,$j+1);
@@ -418,8 +418,8 @@ function js_compress($s){
// double quote strings
if($ch == '"'){
$j = 1;
- while( $s{$i+$j} != '"' && ($i+$j < $slen)){
- if( $s{$i+$j} == '\\' && ($s{$i+$j+1} == '"' || $s{$i+$j+1} == '\\') ){
+ while( ($i+$j < $slen) && $s[$i+$j] != '"' ){
+ if( $s[$i+$j] == '\\' && ($s[$i+$j+1] == '"' || $s[$i+$j+1] == '\\') ){
$j += 2;
}else{
$j += 1;
@@ -436,8 +436,8 @@ function js_compress($s){
// single quote strings
if($ch == "'"){
$j = 1;
- while( $s{$i+$j} != "'" && ($i+$j < $slen)){
- if( $s{$i+$j} == '\\' && ($s{$i+$j+1} == "'" || $s{$i+$j+1} == '\\') ){
+ while( ($i+$j < $slen) && $s[$i+$j] != "'" ){
+ if( $s[$i+$j] == '\\' && ($s[$i+$j+1] == "'" || $s[$i+$j+1] == '\\') ){
$j += 2;
}else{
$j += 1;
diff --git a/lib/images/fileicons/index.php b/lib/images/fileicons/index.php
index 8ec577593..d1f233e48 100644
--- a/lib/images/fileicons/index.php
+++ b/lib/images/fileicons/index.php
@@ -3,7 +3,7 @@
<head>
<title>Filetype icons</title>
- <style type="text/css">
+ <style>
body {
background-color: #ccc;
font-family: Arial;
diff --git a/lib/images/smileys/index.php b/lib/images/smileys/index.php
index c9c74872f..574966628 100644
--- a/lib/images/smileys/index.php
+++ b/lib/images/smileys/index.php
@@ -3,7 +3,7 @@
<head>
<title>Smileys</title>
- <style type="text/css">
+ <style>
body {
background-color: #ccc;
font-family: Arial;
diff --git a/lib/plugins/acl/admin.php b/lib/plugins/acl/admin.php
index 4c7f96388..02842fd4b 100644
--- a/lib/plugins/acl/admin.php
+++ b/lib/plugins/acl/admin.php
@@ -132,7 +132,7 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin
$lines = array();
// keep header
foreach ($AUTH_ACL as $line) {
- if ($line{0} == '#') {
+ if ($line[0] == '#') {
$lines[] = $line;
} else {
break;
@@ -443,7 +443,7 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin
}
// prepare who to check
- if ($who{0} == '@') {
+ if ($who[0] == '@') {
$user = '';
$groups = array(ltrim($who, '@'));
} else {
@@ -657,7 +657,7 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin
echo '</td>';
echo '<td>';
- if ($who{0} == '@') {
+ if ($who[0] == '@') {
echo '<span class="aclgroup">'.hsc($who).'</span>';
} else {
echo '<span class="acluser">'.hsc($who).'</span>';
@@ -804,7 +804,7 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin
if ($this->who &&
!in_array($this->who, $this->usersgroups) &&
!in_array($this->who, $this->specials)) {
- if ($this->who{0} == '@') {
+ if ($this->who[0] == '@') {
$gsel = ' selected="selected"';
} else {
$usel = ' selected="selected"';
@@ -826,7 +826,7 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin
$sel = '';
}
- if ($ug{0} == '@') {
+ if ($ug[0] == '@') {
echo ' <option value="'.hsc($ug).'" class="aclgroup"'.$sel.'>'.hsc($ug).'</option>'.NL;
} else {
echo ' <option value="'.hsc($ug).'" class="acluser"'.$sel.'>'.hsc($ug).'</option>'.NL;
@@ -844,7 +844,7 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin
$sel = '';
}
- if ($ug{0} == '@') {
+ if ($ug[0] == '@') {
echo ' <option value="'.hsc($ug).'" class="aclgroup"'.$sel.'>'.hsc($ug).'</option>'.NL;
} else {
echo ' <option value="'.hsc($ug).'" class="acluser"'.$sel.'>'.hsc($ug).'</option>'.NL;
diff --git a/lib/plugins/acl/lang/fi/lang.php b/lib/plugins/acl/lang/fi/lang.php
index 2dfc35801..f680f2905 100644
--- a/lib/plugins/acl/lang/fi/lang.php
+++ b/lib/plugins/acl/lang/fi/lang.php
@@ -2,9 +2,8 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author otto@valjakko.net
- * @author Otto Vainio <otto@valjakko.net>
+ *
+ * @author otto <otto@valjakko.net>
* @author Teemu Mattila <ghcsystems@gmail.com>
* @author Sami Olmari <sami@olmari.fi>
*/
diff --git a/lib/plugins/acl/lang/id/lang.php b/lib/plugins/acl/lang/id/lang.php
index 3b0ecf446..93e3f4125 100644
--- a/lib/plugins/acl/lang/id/lang.php
+++ b/lib/plugins/acl/lang/id/lang.php
@@ -2,7 +2,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
+ *
* @author mubaidillah <mubaidillah@gmail.com>
* @author Yustinus Waruwu <juswaruwu@gmail.com>
*/
diff --git a/lib/plugins/acl/script.js b/lib/plugins/acl/script.js
index 86badffdd..95621a255 100644
--- a/lib/plugins/acl/script.js
+++ b/lib/plugins/acl/script.js
@@ -15,8 +15,8 @@ var dw_acl = {
return;
}
- jQuery('#acl__user select').change(dw_acl.userselhandler);
- jQuery('#acl__user button').click(dw_acl.loadinfo);
+ jQuery('#acl__user select').on('change', dw_acl.userselhandler);
+ jQuery('#acl__user button').on('click', dw_acl.loadinfo);
$tree = jQuery('#acl__tree');
$tree.dw_tree({toggle_selector: 'img',
diff --git a/lib/plugins/authad/lang/de/settings.php b/lib/plugins/authad/lang/de/settings.php
index 5708411d2..5d8d9b8de 100644
--- a/lib/plugins/authad/lang/de/settings.php
+++ b/lib/plugins/authad/lang/de/settings.php
@@ -3,6 +3,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author C!own77 <clown77@posteo.de>
* @author Frank Loizzi <contact@software.bacal.de>
* @author Matthias Schulte <dokuwiki@lupo49.de>
* @author Ben Fey <benedikt.fey@beck-heun.de>
@@ -24,3 +25,4 @@ $lang['expirywarn'] = 'Tage im Voraus um Benutzer über ablaufende Pa
$lang['additional'] = 'Eine Komma-separierte Liste von zusätzlichen AD-Attributen, die von den Benutzerobjekten abgefragt werden. Wird von einigen Plugins benutzt.';
$lang['update_name'] = 'Benutzern erlauben, ihren AD Anzeige-Namen zu ändern?';
$lang['update_mail'] = 'Benutzern erlauben, ihre E-Mail-Adresse zu ändern?';
+$lang['recursive_groups'] = 'Auflösen verschachtelter Gruppen für ihre jeweiligen Mitglieder (langsamer).';
diff --git a/lib/plugins/authad/lang/fi/lang.php b/lib/plugins/authad/lang/fi/lang.php
index 88a87b87c..776e68a86 100644
--- a/lib/plugins/authad/lang/fi/lang.php
+++ b/lib/plugins/authad/lang/fi/lang.php
@@ -2,7 +2,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
+ *
* @author Jussi Takala <jussi.takala@live.fi>
*/
$lang['authpwdexpire'] = 'Salasanasi vanhenee %d pv:n päästä, vaihda salasanasi pikaisesti.';
diff --git a/lib/plugins/authad/lang/fi/settings.php b/lib/plugins/authad/lang/fi/settings.php
index e2f432f36..f0b5276e7 100644
--- a/lib/plugins/authad/lang/fi/settings.php
+++ b/lib/plugins/authad/lang/fi/settings.php
@@ -2,7 +2,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
+ *
* @author Otto Vainio <otto@valjakko.net>
*/
$lang['debug'] = 'Näytä lisää debug-koodia virheistä?';
diff --git a/lib/plugins/authad/lang/ja/settings.php b/lib/plugins/authad/lang/ja/settings.php
index cb263122f..84f09b469 100644
--- a/lib/plugins/authad/lang/ja/settings.php
+++ b/lib/plugins/authad/lang/ja/settings.php
@@ -23,3 +23,4 @@ $lang['expirywarn'] = '何日å‰ã‹ã‚‰ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰ã®æœ‰åŠ¹æœŸé™ã
$lang['additional'] = 'ユーザデータã‹ã‚‰å–å¾—ã™ã‚‹è¿½åŠ AD属性ã®ã‚«ãƒ³ãƒžåŒºåˆ‡ã‚Šä¸€è¦§ï¼ˆä¸€éƒ¨ãƒ—ラグインãŒä½¿ç”¨ã—ã¾ã™ã€‚)';
$lang['update_name'] = 'ユーザー自身ã«AD表示åã®å¤‰æ›´ã‚’許å¯ã™ã‚‹';
$lang['update_mail'] = 'ユーザー自身ã«ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã®å¤‰æ›´ã‚’許å¯ã™ã‚‹';
+$lang['recursive_groups'] = 'ãれãžã‚Œã®ãƒ¡ãƒ³ãƒãƒ¼ã«ã¤ã„ã¦å…¥ã‚Œå­ã®ã‚°ãƒ«ãƒ¼ãƒ—を解決ã™ã‚‹ï¼ˆå‹•作ãŒé…ããªã‚Šã¾ã™ï¼‰';
diff --git a/lib/plugins/authldap/lang/cs/settings.php b/lib/plugins/authldap/lang/cs/settings.php
index 741a56a62..1bdaf29ba 100644
--- a/lib/plugins/authldap/lang/cs/settings.php
+++ b/lib/plugins/authldap/lang/cs/settings.php
@@ -3,6 +3,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Petr Kajzar <petr.kajzar@lf1.cuni.cz>
* @author mkucera66 <mkucera66@seznam.cz>
* @author Jaroslav Lichtblau <jlichtblau@seznam.cz>
* @author Martin RůžiÄka <martinr@post.cz>
@@ -19,6 +20,7 @@ $lang['referrals'] = 'Přeposílat odkazy?';
$lang['deref'] = 'Jak rozlišovat aliasy?';
$lang['binddn'] = 'Doménový název DN volitelně připojeného uživatele, pokus anonymní připojení není vyhovující, tj. <code>cn=admin, dc=muj, dc=domov</code>';
$lang['bindpw'] = 'Heslo uživatele výše';
+$lang['attributes'] = 'Atributy k naÄtení pomocí vyhledávání LDAP.';
$lang['userscope'] = 'Omezení rozsahu vyhledávání uživatele';
$lang['groupscope'] = 'Omezení rozsahu vyhledávání skupiny';
$lang['userkey'] = 'Atribut oznaÄující uživatelské jméno; musí být konzistetní s uživatelským filtrem.';
diff --git a/lib/plugins/authldap/lang/de/settings.php b/lib/plugins/authldap/lang/de/settings.php
index f1bfc00fd..b6622d543 100644
--- a/lib/plugins/authldap/lang/de/settings.php
+++ b/lib/plugins/authldap/lang/de/settings.php
@@ -3,6 +3,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author C!own77 <clown77@posteo.de>
* @author Matthias Schulte <dokuwiki@lupo49.de>
* @author christian studer <cstuder@existenz.ch>
* @author Philip Knack <p.knack@stollfuss.de>
@@ -21,6 +22,7 @@ $lang['referrals'] = 'Weiterverfolgen von LDAP-Referrals (Verweise)?
$lang['deref'] = 'Wie sollen Aliase aufgelöst werden?';
$lang['binddn'] = 'DN eines optionalen Benutzers, wenn der anonyme Zugriff nicht ausreichend ist. Zum Beispiel: <code>cn=admin, dc=my, dc=home</code>.';
$lang['bindpw'] = 'Passwort des angegebenen Benutzers.';
+$lang['attributes'] = 'Attribute, die mit der LDAP-Suche abgerufen werden sollen.';
$lang['userscope'] = 'Die Suchweite nach Benutzeraccounts.';
$lang['groupscope'] = 'Die Suchweite nach Benutzergruppen.';
$lang['userkey'] = 'Attribut, das den Benutzernamen enthält; muss konsistent zum userfilter sein.';
diff --git a/lib/plugins/authldap/lang/es/settings.php b/lib/plugins/authldap/lang/es/settings.php
index ba8f41e59..7a4090fe2 100644
--- a/lib/plugins/authldap/lang/es/settings.php
+++ b/lib/plugins/authldap/lang/es/settings.php
@@ -3,11 +3,11 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Domingo Redal <docxml@gmail.com>
* @author Antonio Bueno <atnbueno@gmail.com>
* @author Eloy <ej.perezgomez@gmail.com>
* @author Alejandro Nunez <nunez.alejandro@gmail.com>
* @author Enny Rodriguez <aquilez.4@gmail.com>
- * @author Domingo Redal <docxml@gmail.com>
*/
$lang['server'] = 'Tu servidor LDAP. Puede ser el nombre del host (<code>localhost</code>) o una URL completa (<code>ldap://server.tld:389</code>)';
$lang['port'] = 'Servidor LDAP en caso de que no se diera la URL completa anteriormente.';
@@ -21,6 +21,7 @@ $lang['referrals'] = '¿Deben ser seguidas las referencias?';
$lang['deref'] = '¿Cómo desreferenciar los alias?';
$lang['binddn'] = 'DN de un usuario de enlace opcional si el enlace anónimo no es suficiente. P. ej. <code>cn=admin, dc=my, dc=home</code>';
$lang['bindpw'] = 'Contraseña del usuario de arriba.';
+$lang['attributes'] = 'Atributos a recuperar de la búsqueda en LDAP.';
$lang['userscope'] = 'Limitar ámbito de búsqueda para búsqueda de usuarios';
$lang['groupscope'] = 'Limitar ámbito de búsqueda para búsqueda de grupos';
$lang['userkey'] = 'Atributo que denota el nombre de usuario; debe ser coherente con el filtro.';
diff --git a/lib/plugins/authldap/lang/fi/settings.php b/lib/plugins/authldap/lang/fi/settings.php
index b15d8c676..c322d245c 100644
--- a/lib/plugins/authldap/lang/fi/settings.php
+++ b/lib/plugins/authldap/lang/fi/settings.php
@@ -2,7 +2,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
+ *
* @author Otto Vainio <otto@valjakko.net>
*/
$lang['starttls'] = 'Käytä TLS yhteyttä';
diff --git a/lib/plugins/authldap/lang/ja/settings.php b/lib/plugins/authldap/lang/ja/settings.php
index e92fd4c6c..f9d16e7d3 100644
--- a/lib/plugins/authldap/lang/ja/settings.php
+++ b/lib/plugins/authldap/lang/ja/settings.php
@@ -22,6 +22,7 @@ $lang['referrals'] = '紹介ã«å¾“ã†';
$lang['deref'] = 'ã©ã®ã‚ˆã†ã«é–“接å‚ç…§ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã«ã™ã‚‹ã‹';
$lang['binddn'] = '匿åãƒã‚¤ãƒ³ãƒ‰ã§ã¯ä¸å分ãªå ´åˆã®ã€ã‚ªãƒ—ションãƒã‚¤ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®DN(例:<code>cn=admin, dc=my, dc=home</code>)';
$lang['bindpw'] = '上記ユーザーã®ãƒ‘スワード';
+$lang['attributes'] = 'LDAP検索ã§å–å¾—ã™ã‚‹å±žæ€§ã€‚';
$lang['userscope'] = 'ユーザー検索ã®ç¯„囲をé™å®šã•ã›ã‚‹';
$lang['groupscope'] = 'グループ検索ã®ç¯„囲をé™å®šã•ã›ã‚‹';
$lang['userkey'] = 'ユーザーåを示ã™å±žæ€§ï¼ˆuserfilter ã¨ä¸€è‡´ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚)';
diff --git a/lib/plugins/authldap/lang/nl/settings.php b/lib/plugins/authldap/lang/nl/settings.php
index 1f80b0251..1a3120291 100644
--- a/lib/plugins/authldap/lang/nl/settings.php
+++ b/lib/plugins/authldap/lang/nl/settings.php
@@ -3,6 +3,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author PBU <pbu@xs4all.nl>
* @author Gerrit Uitslag <klapinklapin@gmail.com>
* @author Remon <no@email.local>
* @author Johan Wijnker <johan@wijnker.eu>
@@ -19,6 +20,7 @@ $lang['referrals'] = 'Moeten verwijzingen worden gevolgd?';
$lang['deref'] = 'Hoe moeten de verwijzing van aliases worden bepaald?';
$lang['binddn'] = 'DN van een optionele bind gebruiker als anonieme bind niet genoeg is. Bijv. <code>cn=beheer, dc=mijn, dc=thuis</code>';
$lang['bindpw'] = 'Wachtwoord van bovenstaande gebruiker';
+$lang['attributes'] = 'Welke onderdelen moeten in LDAP gezocht worden';
$lang['userscope'] = 'Beperken scope van zoekfuncties voor gebruikers';
$lang['groupscope'] = 'Beperken scope van zoekfuncties voor groepen';
$lang['userkey'] = 'Attribuut aanduiding van de gebruikersnaam; moet consistent zijn met userfilter.';
diff --git a/lib/plugins/authldap/lang/pt-br/settings.php b/lib/plugins/authldap/lang/pt-br/settings.php
index 03469e5c0..8b5cb378b 100644
--- a/lib/plugins/authldap/lang/pt-br/settings.php
+++ b/lib/plugins/authldap/lang/pt-br/settings.php
@@ -3,6 +3,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Schopf <pschopf@gmail.com>
* @author Victor Westmann <victor.westmann@gmail.com>
* @author Frederico Guimarães <frederico@teia.bio.br>
* @author Hudson FAS <hudsonfas@gmail.com>
@@ -19,6 +20,7 @@ $lang['referrals'] = 'Permitir que as referências sejam seguidas?';
$lang['deref'] = 'Como dereferenciar os aliases?';
$lang['binddn'] = 'DN de um vínculo opcional de usuário se vínculo anônimo não for suficiente. Eg. <code>cn=admin, dc=my, dc=home</code>';
$lang['bindpw'] = 'Senha do usuário acima';
+$lang['attributes'] = 'Atributos a serem recuperados com a pesquisa LDAP.';
$lang['userscope'] = 'Limitar escopo da busca para busca de usuário';
$lang['groupscope'] = 'Limitar escopo da busca para busca de grupo';
$lang['userkey'] = 'Atributo que indica o nome do usuário; deve ser consistente com userfilter.';
diff --git a/lib/plugins/authplain/lang/fi/lang.php b/lib/plugins/authplain/lang/fi/lang.php
index abdaf6720..efd96eaae 100644
--- a/lib/plugins/authplain/lang/fi/lang.php
+++ b/lib/plugins/authplain/lang/fi/lang.php
@@ -2,6 +2,6 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
+ *
*/
$lang['userexists'] = 'Käyttäjä tällä käyttäjänimellä on jo olemassa.';
diff --git a/lib/plugins/authplain/lang/id/lang.php b/lib/plugins/authplain/lang/id/lang.php
index 5e6a99830..e01136655 100644
--- a/lib/plugins/authplain/lang/id/lang.php
+++ b/lib/plugins/authplain/lang/id/lang.php
@@ -1,6 +1,7 @@
<?php
+
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
*/
-$lang['userexists'] = 'Maaf, user dengan user login ini telah ada.';
+$lang['userexists'] = 'Maaf, user dengan user login ini telah ada.';
diff --git a/lib/plugins/config/core/Setting/SettingSepchar.php b/lib/plugins/config/core/Setting/SettingSepchar.php
index 2d64eb08b..57cd0ae92 100644
--- a/lib/plugins/config/core/Setting/SettingSepchar.php
+++ b/lib/plugins/config/core/Setting/SettingSepchar.php
@@ -10,7 +10,7 @@ class SettingSepchar extends SettingMultichoice {
/** @inheritdoc */
public function __construct($key, $param = null) {
$str = '_-.';
- for($i = 0; $i < strlen($str); $i++) $this->choices[] = $str{$i};
+ for($i = 0; $i < strlen($str); $i++) $this->choices[] = $str[$i];
// call foundation class constructor
parent::__construct($key, $param);
diff --git a/lib/plugins/config/lang/cs/lang.php b/lib/plugins/config/lang/cs/lang.php
index 2b97117d3..77517816b 100644
--- a/lib/plugins/config/lang/cs/lang.php
+++ b/lib/plugins/config/lang/cs/lang.php
@@ -3,6 +3,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Petr Kajzar <petr.kajzar@lf1.cuni.cz>
* @author Robert Surý <rsurycz@seznam.cz>
* @author Martin Hořínek <hev@hev.cz>
* @author Jonáš Dyba <jonas.dyba@gmail.com>
@@ -50,6 +51,7 @@ $lang['_advanced'] = 'PokroÄilá nastavení';
$lang['_network'] = 'Nastavení sítě';
$lang['_msg_setting_undefined'] = 'Chybí metadata položky.';
$lang['_msg_setting_no_class'] = 'Chybí třída položky.';
+$lang['_msg_setting_no_known_class'] = 'KonfiguraÄní třída není dostupná.';
$lang['_msg_setting_no_default'] = 'Chybí výchozí hodnota položky.';
$lang['title'] = 'Název celé wiki';
$lang['start'] = 'Název úvodní stránky';
@@ -101,7 +103,7 @@ $lang['disableactions'] = 'Vypnout DokuWiki akce';
$lang['disableactions_check'] = 'Zkontrolovat';
$lang['disableactions_subscription'] = 'Přihlásit se/Odhlásit se ze seznamu pro odběr změn';
$lang['disableactions_wikicode'] = 'Prohlížet zdrojové kódy/Export wiki textu';
-$lang['disableactions_profile_delete'] = 'Smazat vlasní úÄet';
+$lang['disableactions_profile_delete'] = 'Smazat vlastní úÄet';
$lang['disableactions_other'] = 'Další akce (oddÄ›lené Äárkou)';
$lang['disableactions_rss'] = 'XMS syndikace (RSS)';
$lang['auth_security_timeout'] = 'Časový limit pro autentikaci (v sekundách)';
@@ -170,6 +172,7 @@ $lang['search_fragment_o_exact'] = 'přesný';
$lang['search_fragment_o_starts_with'] = 'zaÄíná s';
$lang['search_fragment_o_ends_with'] = 'konÄí s';
$lang['search_fragment_o_contains'] = 'obsahuje';
+$lang['trustedproxy'] = 'Důvěřovat proxy serverům odpovídajícím tomuto regulárním výrazu ohlednÄ› skuteÄné IP adresy klienta, kterou hlásí. Výchozí hodnota odpovídá místním sítím. Ponechejte prázdné, pokud nechcete důvěřovat žádné proxy.';
$lang['dnslookups'] = 'DokuWiki zjišťuje DNS jména pro vzdálené IP adresy uživatelů, kteří editují stránky. Pokud máte pomalý, nebo nefunkÄní DNS server, nebo nepotÅ™ebujete tuto funkci, tak tuto volbu zruÅ¡te.';
$lang['jquerycdn'] = 'Mají být skripty jQuery a jQuery UI naÄítány z CDN?
Vzniknou tím další HTTP dotazy, ale soubory se mohou naÄíst rychleji a uživatelé je už mohou mít ve vyrovnávací pamÄ›ti.';
diff --git a/lib/plugins/config/lang/de/lang.php b/lib/plugins/config/lang/de/lang.php
index 78f8f1cb5..98c8aac3c 100644
--- a/lib/plugins/config/lang/de/lang.php
+++ b/lib/plugins/config/lang/de/lang.php
@@ -3,6 +3,8 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Eric Haberstroh <ehaberstroh@gmail.com>
+ * @author C!own77 <clown77@posteo.de>
* @author Alex Beck <alex@4becks.com>
* @author Jürgen Fredriksson <jfriedrich@gmx.at>
* @author Michael Bohn <mjbohn@gmail.com>
@@ -52,6 +54,7 @@ $lang['_advanced'] = 'Erweitert';
$lang['_network'] = 'Netzwerk';
$lang['_msg_setting_undefined'] = 'Keine Konfigurationsmetadaten.';
$lang['_msg_setting_no_class'] = 'Keine Konfigurationsklasse.';
+$lang['_msg_setting_no_known_class'] = 'Setting-Klasse nicht verfügbar.';
$lang['_msg_setting_no_default'] = 'Kein Standardwert.';
$lang['title'] = 'Titel des Wikis';
$lang['start'] = 'Startseitenname';
@@ -167,8 +170,9 @@ $lang['search_fragment_o_exact'] = 'genaue Treffer';
$lang['search_fragment_o_starts_with'] = 'beginnt mit';
$lang['search_fragment_o_ends_with'] = 'endet mit';
$lang['search_fragment_o_contains'] = 'enthält';
+$lang['trustedproxy'] = 'Vertrauen Sie Weiterleitungs-Proxys, welche dem regulärem Ausdruck entsprechen, hinsichtlich der angegebenen Client-ID. Der Standardwert entspricht dem lokalem Netzwerk. Leer lassen um jedem Proxy zu vertrauen.';
$lang['dnslookups'] = 'DokuWiki löst die IP-Adressen von Benutzern zu deren Hostnamen auf. Wenn Sie einen langsamen oder unzuverlässigen DNS-Server verwenden oder die Funktion nicht benötigen, dann sollte diese Option deaktiviert sein.';
-$lang['jquerycdn'] = 'Sollen jQuery und jQuery UI Skriptdateien von einem CDN (Contend Delivery Network) geladen werden? Dadurch entstehen zusätzliche HTTP-Anfragen, aber die Daten werden voraussichtlich schneller geladen und eventuell sind sie auch schon beim Benutzer im Cache.';
+$lang['jquerycdn'] = 'Sollen jQuery und jQuery UI Skriptdateien von einem CDN (Content Delivery Network) geladen werden? Dadurch entstehen zusätzliche HTTP-Anfragen, aber die Daten werden voraussichtlich schneller geladen und eventuell sind sie auch schon beim Benutzer im Cache.';
$lang['jquerycdn_o_0'] = 'Kein CDN, ausschließlich lokale Auslieferung';
$lang['jquerycdn_o_jquery'] = 'CDN von code.jquery.com';
$lang['jquerycdn_o_cdnjs'] = 'CDN von cdnjs.com';
diff --git a/lib/plugins/config/lang/en/lang.php b/lib/plugins/config/lang/en/lang.php
index c48885c8d..3a408e0e3 100644
--- a/lib/plugins/config/lang/en/lang.php
+++ b/lib/plugins/config/lang/en/lang.php
@@ -185,6 +185,10 @@ $lang['search_fragment_o_exact'] = 'exact';
$lang['search_fragment_o_starts_with'] = 'starts with';
$lang['search_fragment_o_ends_with'] = 'ends with';
$lang['search_fragment_o_contains'] = 'contains';
+$lang['trustedproxy'] = 'Trust forwarding proxies matching this regular expression about the true client IP they report. The default matches local networks. Leave empty to trust no proxy.';
+
+$lang['_feature_flags'] = 'Feature Flags';
+$lang['defer_js'] = 'Defer javascript to be execute after the page\'s HTML has been parsed. Improves perceived page speed but could break a small number of plugins.';
/* Network Options */
$lang['dnslookups'] = 'DokuWiki will lookup hostnames for remote IP addresses of users editing pages. If you have a slow or non working DNS server or don\'t want this feature, disable this option';
diff --git a/lib/plugins/config/lang/es/lang.php b/lib/plugins/config/lang/es/lang.php
index 6da3c35ea..97b5540d1 100644
--- a/lib/plugins/config/lang/es/lang.php
+++ b/lib/plugins/config/lang/es/lang.php
@@ -51,6 +51,7 @@ $lang['_advanced'] = 'Parámetros Avanzados';
$lang['_network'] = 'Parámetros de Red';
$lang['_msg_setting_undefined'] = 'Sin parámetros de metadata.';
$lang['_msg_setting_no_class'] = 'Sin clase establecida.';
+$lang['_msg_setting_no_known_class'] = 'Configuración de la clase no disponible.';
$lang['_msg_setting_no_default'] = 'Sin valor por defecto.';
$lang['title'] = 'Título del wiki';
$lang['start'] = 'Nombre de la página inicial';
@@ -166,6 +167,7 @@ $lang['search_fragment_o_exact'] = 'exacto';
$lang['search_fragment_o_starts_with'] = 'comienza con';
$lang['search_fragment_o_ends_with'] = 'termina con';
$lang['search_fragment_o_contains'] = 'contiene';
+$lang['trustedproxy'] = 'Confíe en los proxys de reenvío que coincidan con esta expresión regular acerca de la IP verdadera del cliente que referencia. El valor predeterminado coincide con las redes locales. Dejar en blanco para no confiar en ningún proxy.';
$lang['dnslookups'] = 'DokuWiki buscara los hostnames para usuarios editando las páginas con IP remota. Si usted tiene un servidor DNS bastante lento o que no funcione, favor de desactivar esta opción.';
$lang['jquerycdn'] = '¿Deberían cargarse los ficheros de script jQuery y jQuery UI desde un CDN? Esto añade peticiones HTTP adicionales, pero los ficheros se pueden cargar más rápido y los usuarios pueden tenerlas ya almacenadas en caché.';
$lang['jquerycdn_o_0'] = 'No CDN, sólo entrega local';
diff --git a/lib/plugins/config/lang/fi/lang.php b/lib/plugins/config/lang/fi/lang.php
index b2a97facd..e8d7c8f4c 100644
--- a/lib/plugins/config/lang/fi/lang.php
+++ b/lib/plugins/config/lang/fi/lang.php
@@ -3,8 +3,8 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
- * @author otto@valjakko.net
- * @author Otto Vainio <otto@valjakko.net>
+ * @author Tuomo Hartikainen <tuomo.hartikainen@heksia.fi>
+ * @author otto <otto@valjakko.net>
* @author Teemu Mattila <ghcsystems@gmail.com>
* @author Sami Olmari <sami@olmari.fi>
* @author Wiki Doku <SugarKidder@mailinator.com>
@@ -42,7 +42,7 @@ $lang['title'] = 'Wikin nimi';
$lang['start'] = 'Alkusivun nimi';
$lang['lang'] = 'Kieli';
$lang['template'] = 'Sivumalli';
-$lang['tagline'] = 'Apuotsikko - slogan sivustonimen yhteysteen (jos template käyttää)';
+$lang['tagline'] = 'Apuotsikko - slogan sivustonimen yhteyteen (jos template tukee)';
$lang['sidebar'] = 'Sivupalkin sivunimi (jos template tukee sitä), tyhjä arvo poistaa sivupalkin';
$lang['license'] = 'Millä lisenssillä sisältö pitäisi julkaista?';
$lang['savedir'] = 'Hakemisto tietojen tallennukseen.';
@@ -114,7 +114,7 @@ $lang['subscribe_time'] = 'Aika jonka jälkeen tilauslinkit ja yhteenveto
$lang['notify'] = 'Lähetä muutosilmoitukset tähän osoitteeseen';
$lang['registernotify'] = 'Lähetä ilmoitus uusista rekisteröitymisistä tähän osoitteeseen';
$lang['mailfrom'] = 'Sähköpostiosoite automaattisia postituksia varten';
-$lang['mailprefix'] = 'Etuliite automaattisesti lähetettyihin dähköposteihin';
+$lang['mailprefix'] = 'Etuliite automaattisesti lähetettyihin sähköposteihin';
$lang['htmlmail'] = 'Lähetä paremman näköisiä, mutta isompia HTML multipart sähköposteja. Ota pois päältä, jos haluat vain tekstimuotoisia posteja.';
$lang['sitemap'] = 'Luo Google sitemap (päiviä)';
$lang['rss_type'] = 'XML-syötteen tyyppi';
diff --git a/lib/plugins/config/lang/fr/lang.php b/lib/plugins/config/lang/fr/lang.php
index dc645ed44..88e105059 100644
--- a/lib/plugins/config/lang/fr/lang.php
+++ b/lib/plugins/config/lang/fr/lang.php
@@ -3,8 +3,8 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Schplurtz le Déboulonné <Schplurtz@laposte.net>
* @author PaliPalo <palipalo@hotmail.fr>
- * @author Schplurtz le Déboulonné <schplurtz@laposte.net>
* @author Laurent Ponthieu <contact@coopindus.fr>
* @author Damien Regad <dregad@mantisbt.org>
* @author Michael Bohn <mjbohn@gmail.com>
@@ -57,6 +57,7 @@ $lang['_advanced'] = 'Paramètres avancés';
$lang['_network'] = 'Paramètres réseaux';
$lang['_msg_setting_undefined'] = 'Pas de définition de métadonnées';
$lang['_msg_setting_no_class'] = 'Pas de définition de paramètres.';
+$lang['_msg_setting_no_known_class'] = 'Classe de réglage non disponible.';
$lang['_msg_setting_no_default'] = 'Pas de valeur par défaut.';
$lang['title'] = 'Titre du wiki (nom du wiki)';
$lang['start'] = 'Nom de la page d\'accueil à utiliser pour toutes les catégories';
@@ -173,6 +174,7 @@ $lang['search_fragment_o_exact'] = 'exact';
$lang['search_fragment_o_starts_with'] = 'commence par';
$lang['search_fragment_o_ends_with'] = 'se termine par';
$lang['search_fragment_o_contains'] = 'contient';
+$lang['trustedproxy'] = 'Faire confiance aux mandataires qui correspondent à cette expression régulière pour l\'adresse IP réelle des clients qu\'ils rapportent. La valeur par défaut correspond aux réseaux locaux. Laisser vide pour ne faire confiance à aucun mandataire.';
$lang['dnslookups'] = 'DokuWiki effectuera une résolution du nom d\'hôte sur les adresses IP des utilisateurs modifiant des pages. Si vous ne possédez pas de serveur DNS, que ce dernier est lent ou que vous ne souhaitez pas utiliser cette fonctionnalité : désactivez-la.';
$lang['jquerycdn'] = 'Faut-il distribuer les scripts JQuery et JQuery UI depuis un CDN ? Cela ajoute une requête HTTP, mais les fichiers peuvent se charger plus vite et les internautes les ont peut-être déjà en cache.';
$lang['jquerycdn_o_0'] = 'Non : utilisation de votre serveur.';
diff --git a/lib/plugins/config/lang/id/intro.txt b/lib/plugins/config/lang/id/intro.txt
index 296206d02..c5a9297df 100644
--- a/lib/plugins/config/lang/id/intro.txt
+++ b/lib/plugins/config/lang/id/intro.txt
@@ -1,5 +1,7 @@
====== Manajemen Konfigurasi ======
-Gunakan halaman ini untuk mengatur konfigurasi instalasi DokuWiki Anda. Untuk bantuan dalam konfigurasi, silahkan lihat di [[doku>config]]. Unuk mengetahui lebih lanjut tentang plugin in silahkan lihat [[doku>plugin:config]].
+Gunakan halaman ini untuk mengontrol pengaturan instalasi DokuWiki anda. Untuk bantuan tentang pengaturan individual, lihat [[doku>config]]. Untuk detail lebih lanjut tentang plugin ini lihat [[doku>plugin:config]].
-Konfigurasi dengan warna merah dilindungi dan tidak bisa diubah dengan plugin ini. Konfigurasi dengan warna biru adalah nilai default, dan konfigurasi dengan latar putih telah diset khusus untuk instalasi ini. Konfigurasi berwarna putih atau b
+Pengaturan yang ditunjukkan dengan latar belakang merah muda dilindungi dan tidak dapat diubah dengan plugin ini. Pengaturan yang ditunjukkan dengan latar belakang biru adalah nilai bawaan (default) dan pengaturan yang ditunjukkan dengan latar belakang putih telah diatur secara lokal oleh anda. Pengaturan biru dan putih dapat diubah.
+
+Ingatlah untuk menekan tombol **Simpan** sebelum meninggalkan halaman ini, jika tidak perubahan anda akan hilang. \ No newline at end of file
diff --git a/lib/plugins/config/lang/ja/lang.php b/lib/plugins/config/lang/ja/lang.php
index 7af791e3f..d00e4c456 100644
--- a/lib/plugins/config/lang/ja/lang.php
+++ b/lib/plugins/config/lang/ja/lang.php
@@ -42,6 +42,7 @@ $lang['_advanced'] = '高度ãªè¨­å®š';
$lang['_network'] = 'ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯';
$lang['_msg_setting_undefined'] = '設定ã®ãŸã‚ã®ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ãŒã‚りã¾ã›ã‚“。';
$lang['_msg_setting_no_class'] = '設定クラスãŒã‚りã¾ã›ã‚“。';
+$lang['_msg_setting_no_known_class'] = 'クラス設定ãŒåˆ©ç”¨å‡ºæ¥ã¾ã›ã‚“。';
$lang['_msg_setting_no_default'] = 'åˆæœŸå€¤ãŒè¨­å®šã•れã¦ã„ã¾ã›ã‚“。';
$lang['title'] = 'Wikiタイトル(ã‚ãªãŸã®Wikiã®åå‰ï¼‰';
$lang['start'] = 'スタートページå(å„åå‰ç©ºé–“ã®å§‹ç‚¹ã¨ã—ã¦ä½¿ã‚れるページå)';
@@ -157,6 +158,7 @@ $lang['search_fragment_o_exact'] = '完全一致';
$lang['search_fragment_o_starts_with'] = '剿–¹ä¸€è‡´';
$lang['search_fragment_o_ends_with'] = '後方一致';
$lang['search_fragment_o_contains'] = '部分一致';
+$lang['trustedproxy'] = '報告ã•れる真ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆIPã«é–¢ã—ã¦ã€ã“ã“ã§æŒ‡å®šã™ã‚‹æ­£è¦è¡¨ç¾ã«åˆã†è»¢é€ãƒ—ロキシを信頼ã—ã¾ã™ã€‚ã‚らゆるプロキシを信頼ã™ã‚‹å ´åˆã¯ã€ä½•も入力ã—ãªã„ã§ãŠã„ã¦ä¸‹ã•ã„。';
$lang['dnslookups'] = 'ページを編集ã—ã¦ã„るユーザーã®IPアドレスã‹ã‚‰ãƒ›ã‚¹ãƒˆåを逆引ãã™ã‚‹ï¼ˆåˆ©ç”¨ã§ãã‚‹DNSサーãƒãƒ¼ãŒãªã„ã€ã‚ã‚‹ã„ã¯ã“ã®æ©Ÿèƒ½ãŒä¸è¦ãªå ´åˆã«ã¯ã‚ªãƒ•ã«ã—ã¾ã™ã€‚)';
$lang['jquerycdn'] = 'コンテンツ・デリãƒãƒªãƒ¼ãƒ»ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ (CDN) ã®é¸æŠžï¼ˆjQuery 㨠jQuery UI スクリプトを CDN ã‹ã‚‰ãƒ­ãƒ¼ãƒ‰ã•ã›ã‚‹å ´åˆã«ã¯ã€è¿½åŠ çš„ãª HTTP リクエストãŒç™ºç”Ÿã—ã¾ã™ãŒã€ãƒ–ラウザキャッシュãŒä½¿ç”¨ã•れるãŸã‚ã€è¡¨ç¤ºé€Ÿåº¦ã®å‘ä¸ŠãŒæœŸå¾…ã§ãã¾ã™ã€‚)';
$lang['jquerycdn_o_0'] = 'CDN を使用ã›ãšã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒ‡ãƒªãƒãƒªãƒ¼ã®ã¿ä½¿ç”¨ã™ã‚‹';
diff --git a/lib/plugins/config/lang/nl/lang.php b/lib/plugins/config/lang/nl/lang.php
index d7c799026..6346143b6 100644
--- a/lib/plugins/config/lang/nl/lang.php
+++ b/lib/plugins/config/lang/nl/lang.php
@@ -3,6 +3,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author PBU <pbu@xs4all.nl>
* @author Gerrit Uitslag <klapinklapin@gmail.com>
* @author Harriet Neitz <harrietneitz@gmail.com>
* @author mark prins <mprins@users.sf.net>
@@ -43,6 +44,7 @@ $lang['_advanced'] = 'Geavanceerde instellingen';
$lang['_network'] = 'Netwerkinstellingen';
$lang['_msg_setting_undefined'] = 'Geen metadata voor deze instelling.';
$lang['_msg_setting_no_class'] = 'Geen class voor deze instelling.';
+$lang['_msg_setting_no_known_class'] = 'Setting class niet beschikbaar';
$lang['_msg_setting_no_default'] = 'Geen standaard waarde.';
$lang['title'] = 'Titel van de wiki';
$lang['start'] = 'Naam startpagina';
@@ -158,6 +160,7 @@ $lang['search_fragment_o_exact'] = 'exact';
$lang['search_fragment_o_starts_with'] = 'begint met';
$lang['search_fragment_o_ends_with'] = 'eindigt op';
$lang['search_fragment_o_contains'] = 'bevat';
+$lang['trustedproxy'] = 'Vertrouw op doorstuurproxy\'s die overeenkomen met deze reguliere expressie over het echte client-IP dat ze rapporteren. De standaard komt overeen met lokale netwerken. Laat leeg om geen proxy te vertrouwen.';
$lang['dnslookups'] = 'DokuWiki zoekt de hostnamen van IP-adressen van gebruikers die pagina wijzigen op. Schakel deze optie uit als je geen of een langzame DNS server hebt.';
$lang['jquerycdn'] = 'Moet er een CDN gebruikt worden om de jQuery en jQuery UI bestanden te laden. Dit zorgt voor extra HTTP verzoeken, maar bestanden laden mogelijk sneller en zitten misschien al in de cache van de gebruiker.';
$lang['jquerycdn_o_0'] = 'Geen CDN gebruiken';
diff --git a/lib/plugins/config/lang/no/lang.php b/lib/plugins/config/lang/no/lang.php
index 093af8016..a20415f0e 100644
--- a/lib/plugins/config/lang/no/lang.php
+++ b/lib/plugins/config/lang/no/lang.php
@@ -3,8 +3,8 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
- * @author Rut Kristin Aanestad <dark@met.no>
* @author Torgeir Blesvik <bletor@banenor.no>
+ * @author Rut Kristin Aanestad <dark@met.no>
* @author ThorPrestboen <thor.erling.prestboen@gmail.com>
* @author Christian McKenna <mckchr@banenor.no>
* @author Thomas Nygreen <nygreen@gmail.com>
diff --git a/lib/plugins/config/lang/pt-br/lang.php b/lib/plugins/config/lang/pt-br/lang.php
index 28826d951..26eeaf28f 100644
--- a/lib/plugins/config/lang/pt-br/lang.php
+++ b/lib/plugins/config/lang/pt-br/lang.php
@@ -3,6 +3,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Schopf <pschopf@gmail.com>
* @author Frederico Gonçalves Guimarães <frederico@teia.bio.br>
* @author Márcio Gomes Gonçalves <gomes@metha.com.br>
* @author Felipe Castro <fefcas@gmail.com>
@@ -47,6 +48,7 @@ $lang['_advanced'] = 'Configurações avançadas';
$lang['_network'] = 'Configurações de rede';
$lang['_msg_setting_undefined'] = 'Nenhum metadado configurado.';
$lang['_msg_setting_no_class'] = 'Nenhuma classe definida.';
+$lang['_msg_setting_no_known_class'] = 'Classe de configuração não disponível.';
$lang['_msg_setting_no_default'] = 'Nenhum valor padrão.';
$lang['title'] = 'Título do wiki';
$lang['start'] = 'Nome da página inicial';
@@ -162,6 +164,7 @@ $lang['search_fragment_o_exact'] = 'exato';
$lang['search_fragment_o_starts_with'] = 'começa com';
$lang['search_fragment_o_ends_with'] = 'termina com';
$lang['search_fragment_o_contains'] = 'contém';
+$lang['trustedproxy'] = 'Confie nos proxies de encaminhamento que correspondem a essa expressão regular sobre o verdadeiro IP do cliente que eles relatam. O padrão corresponde às redes locais. Deixe em branco para não confiar em proxy.';
$lang['dnslookups'] = 'O DokuWiki procurará pelo nome de host dos endereços IP remotos dos usuários que estão editando as páginas. Caso você tenha um DNS lento, ele não esteja funcionando ou, ainda, você não queira esse recurso, desabilite essa opção.';
$lang['jquerycdn'] = 'Os scripts jQuery e jQuery UI devem ser carregados a partir de uma CND? Isso adiciona requisições HTTP adicionais, mas os arquivos podem carregar mais rapidamente e os usuários podem já tê-los no cache.';
$lang['jquerycdn_o_0'] = 'Sem CDN, somente entrega local';
diff --git a/lib/plugins/config/lang/pt/lang.php b/lib/plugins/config/lang/pt/lang.php
index 7a8f21104..435c31eb0 100644
--- a/lib/plugins/config/lang/pt/lang.php
+++ b/lib/plugins/config/lang/pt/lang.php
@@ -3,8 +3,8 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Schopf <pschopf@gmail.com>
* @author Mario AlexandTeixeira dos Santos <masterofclan@gmail.com>
- * @author Paulo Ricardo Schopf <pschopf@gmail.com>
* @author Maykon Oliveira <maykonoliveira850@gmail.com>
* @author José Vieira <jmsv63@gmail.com>
* @author José Monteiro <Jose.Monteiro@DoWeDo-IT.com>
@@ -43,6 +43,7 @@ $lang['_advanced'] = 'Configurações Avançadas';
$lang['_network'] = 'Configuração de Rede';
$lang['_msg_setting_undefined'] = 'Nenhum metadado configurado.';
$lang['_msg_setting_no_class'] = 'Nenhuma classe definida.';
+$lang['_msg_setting_no_known_class'] = 'Classe de configuração não disponível.';
$lang['_msg_setting_no_default'] = 'Sem valor por omissão.';
$lang['title'] = 'Título deste Wiki';
$lang['start'] = 'Nome da Página Inicial';
@@ -158,6 +159,7 @@ $lang['search_fragment_o_exact'] = 'exato';
$lang['search_fragment_o_starts_with'] = 'começa com';
$lang['search_fragment_o_ends_with'] = 'termina com';
$lang['search_fragment_o_contains'] = 'contém';
+$lang['trustedproxy'] = 'Confie nos proxies de encaminhamento que correspondem a essa expressão regular sobre o verdadeiro IP do cliente que eles relatam. O padrão corresponde às redes locais. Deixe em branco para não confiar em proxy.';
$lang['dnslookups'] = 'O DokuWiki irá procurar nomes de host para endereços IP remotos de usuários editando páginas. Se você tiver um servidor DNS lento, inoperante ou não quiser esse recurso, desabilite essa opção';
$lang['jquerycdn'] = 'Os arquivos de script jQuery e jQuery UI devem ser carregados de um CDN? Isso gera solicitações HTTP adicionais mas os arquivos são carregados mais rapidamente e os usuários já podem tê-los armazenados em cache.';
$lang['jquerycdn_o_0'] = 'Sem CDN, somente entrega local';
diff --git a/lib/plugins/config/lang/ru/lang.php b/lib/plugins/config/lang/ru/lang.php
index 6be33f5ca..067d9ddc6 100644
--- a/lib/plugins/config/lang/ru/lang.php
+++ b/lib/plugins/config/lang/ru/lang.php
@@ -3,9 +3,9 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Yuriy Skalko <yuriy.skalko@gmail.com>
* @author Aleksandr Selivanov <alexgearbox@yandex.ru>
* @author Vyacheslav Strenadko <vyacheslav.strenadko@gmail.com>
- * @author Yuriy Skalko <yuriy.skalko@gmail.com>
* @author Zhassulan <zyesmukanov@gmail.com>
* @author Denis Simakov <akinoame1@gmail.com>
* @author Andrew Pleshakov <beotiger@mail.ru>
@@ -164,6 +164,7 @@ $lang['search_fragment_o_exact'] = 'точно';
$lang['search_fragment_o_starts_with'] = 'начинаетÑÑ Ð½Ð°';
$lang['search_fragment_o_ends_with'] = 'заканчиваетÑÑ';
$lang['search_fragment_o_contains'] = 'Ñодержит';
+$lang['trustedproxy'] = 'ДоверÑть прокÑи-Ñерверам, ÑоответÑтвующим Ñтому регулÑрному выражению, в отношении реального IP-адреÑа клиента, который они Ñообщают. Значение по умолчанию ÑоответÑтвует локальным ÑетÑм. ОÑтавьте пуÑтым, чтобы не доверÑть никаким прокÑи-Ñерверам.';
$lang['dnslookups'] = '«Докувики» ищет DNS-имена пользователей, редактирующих Ñтраницы. ЕÑли у Ð²Ð°Ñ Ð½ÐµÑ‚ DNS-Ñервера или он работает медленно, рекомендуем отключить Ñту опцию.';
$lang['jquerycdn'] = 'ТребуетÑÑ Ð»Ð¸ загрузка jQuery-Ñкриптов (Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ jQuery UI-Ñкрипты) из CDN Ñети? Ð”Ð°Ð½Ð½Ð°Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ñ ÑƒÐ²ÐµÐ»Ð¸Ñ‡Ð¸Ð²Ð°ÐµÑ‚ количеÑтво HTTP запроÑов, но загрузка файлов будет проходить быÑтрее и пользователи Ñмогут кÑшировать запроÑÑ‹.';
$lang['jquerycdn_o_0'] = 'Ðе иÑпользовать CDN. ИÑпользовать только локальную доÑтавку';
diff --git a/lib/plugins/config/lang/sk/lang.php b/lib/plugins/config/lang/sk/lang.php
index bbfa97a25..c69605dad 100644
--- a/lib/plugins/config/lang/sk/lang.php
+++ b/lib/plugins/config/lang/sk/lang.php
@@ -3,6 +3,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Peter Mydliar <peto.mydliar@gmail.com>
* @author Martin Michalek <michalek.dev@gmail.com>
* @author Tibor RepÄek <tiborepcek@gmail.com>
* @author Michal Mesko <michal.mesko@gmail.com>
@@ -83,6 +84,7 @@ $lang['disableactions_subscription'] = 'Povoliť/Zrušiť informovanie o zmenác
$lang['disableactions_wikicode'] = 'Pozrieť zdroj/Exportovať zdroj';
$lang['disableactions_profile_delete'] = 'ZruÅ¡enie vlastného úÄtu';
$lang['disableactions_other'] = 'Iné akcie (oddelené Äiarkou)';
+$lang['disableactions_rss'] = 'RSS';
$lang['auth_security_timeout'] = 'Časový limit pri prihlasovaní (v sekundách)';
$lang['securecookie'] = 'Mal by prehliadaÄ posielaÅ¥ cookies nastavené cez HTTPS posielaÅ¥ iba cez HTTPS (bezpeÄné) pripojenie? Vypnite túto voľbu iba v prípade, ak je prihlasovanie do VaÅ¡ej wiki zabezpeÄené SSL, ale prezeranie wiki je nezabezpeÄené.';
$lang['remote'] = 'Povolenie vzdialeného API. Umožnuje iným aplikáciám pristupovať k wiki cez XML-RPC alebo iným spôsobom.';
@@ -122,6 +124,9 @@ $lang['rss_content'] = 'Čo zobrazovať v XML feede?';
$lang['rss_update'] = 'Časový interval obnovy XML feedu (sek.)';
$lang['rss_show_summary'] = 'XML zdroj ukáže prehľad v názve';
$lang['rss_media'] = 'Aký typ zmien by mal byť zobrazený v XML feede?';
+$lang['rss_media_o_both'] = 'oboje';
+$lang['rss_media_o_pages'] = 'strany';
+$lang['rss_media_o_media'] = 'média';
$lang['updatecheck'] = 'KontrolovaÅ¥ aktualizácie a bezpeÄnostné upozornenia? DokuWiki potrebuje pre túto funkciu prístup k update.dokuwiki.org.';
$lang['userewrite'] = 'Používať nice URLs';
$lang['useslash'] = 'PoužívaÅ¥ lomku (/) ako oddeľovaÄ v URL';
diff --git a/lib/plugins/config/settings/config.metadata.php b/lib/plugins/config/settings/config.metadata.php
index 9a9b6d901..cd818cb88 100644
--- a/lib/plugins/config/settings/config.metadata.php
+++ b/lib/plugins/config/settings/config.metadata.php
@@ -125,7 +125,8 @@ $meta['autopasswd'] = array('onoff');
$meta['authtype'] = array('authtype','_caution' => 'danger');
$meta['passcrypt'] = array('multichoice','_choices' => array(
'smd5','md5','apr1','sha1','ssha','lsmd5','crypt','mysql','my411','kmd5','pmd5','hmd5',
- 'mediawiki','bcrypt','djangomd5','djangosha1','djangopbkdf2_sha1','djangopbkdf2_sha256','sha512'
+ 'mediawiki','bcrypt','djangomd5','djangosha1','djangopbkdf2_sha1','djangopbkdf2_sha256',
+ 'sha512','argon2i','argon2id'
));
$meta['defaultgroup']= array('string');
$meta['superuser'] = array('string','_caution' => 'danger');
@@ -227,6 +228,10 @@ $meta['renderer_xhtml'] = array('renderer','_format' => 'xhtml','_choices' => ar
$meta['readdircache'] = array('numeric');
$meta['search_nslimit'] = array('numeric', '_min' => 0);
$meta['search_fragment'] = array('multichoice','_choices' => array('exact', 'starts_with', 'ends_with', 'contains'),);
+$meta['trustedproxy'] = array('regex');
+
+$meta['_feature_flags'] = ['fieldset'];
+$meta['defer_js'] = ['onoff'];
$meta['_network'] = array('fieldset');
$meta['dnslookups'] = array('onoff');
@@ -237,4 +242,3 @@ $meta['proxy____user'] = array('string');
$meta['proxy____pass'] = array('password','_code' => 'base64');
$meta['proxy____ssl'] = array('onoff');
$meta['proxy____except'] = array('string');
-
diff --git a/lib/plugins/extension/action.php b/lib/plugins/extension/action.php
index 3255f24b0..3bb044825 100644
--- a/lib/plugins/extension/action.php
+++ b/lib/plugins/extension/action.php
@@ -16,7 +16,6 @@ class action_plugin_extension extends DokuWiki_Action_Plugin
*/
public function register(Doku_Event_Handler $controller)
{
-
$controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'info');
}
@@ -26,7 +25,7 @@ class action_plugin_extension extends DokuWiki_Action_Plugin
* @param Doku_Event $event
* @param $param
*/
- public function info(Doku_Event &$event, $param)
+ public function info(Doku_Event $event, $param)
{
global $USERINFO;
global $INPUT;
@@ -69,7 +68,7 @@ class action_plugin_extension extends DokuWiki_Action_Plugin
);
header('Content-Type: application/json');
- json_encode($return);
+ echo json_encode($return);
break;
case 'info':
diff --git a/lib/plugins/extension/admin.php b/lib/plugins/extension/admin.php
index 421b7138f..ded688a9b 100644
--- a/lib/plugins/extension/admin.php
+++ b/lib/plugins/extension/admin.php
@@ -51,9 +51,11 @@ class admin_plugin_extension extends DokuWiki_Admin_Plugin
/* @var helper_plugin_extension_repository $repository */
$repository = $this->loadHelper('extension_repository');
- if(!$repository->hasAccess(!$INPUT->bool('purge'))) {
- $url = $this->gui->tabURL('', array('purge' => 1));
- msg($this->getLang('repo_error').' [<a href="'.$url.'">'.$this->getLang('repo_retry').'</a>]', -1);
+ if (!$repository->hasAccess(!$INPUT->bool('purge'))) {
+ $url = $this->gui->tabURL('', ['purge' => 1], '&');
+ msg($this->getLang('repo_error').
+ ' [<a href="'.$url.'">'.$this->getLang('repo_retry').'</a>]', -1
+ );
}
if (!in_array('ssl', stream_get_transports())) {
@@ -75,12 +77,9 @@ class admin_plugin_extension extends DokuWiki_Admin_Plugin
$extension->setExtension($extname);
$installed = $extension->installOrUpdate();
foreach ($installed as $ext => $info) {
- msg(
- sprintf(
- $this->getLang('msg_' . $info['type'] . '_' . $info['action'] . '_success'),
- $info['base']
- ),
- 1
+ msg(sprintf(
+ $this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'),
+ $info['base']), 1
);
}
break;
@@ -88,20 +87,14 @@ class admin_plugin_extension extends DokuWiki_Admin_Plugin
$extension->setExtension($extname);
$status = $extension->uninstall();
if ($status) {
- msg(
- sprintf(
- $this->getLang('msg_delete_success'),
- hsc($extension->getDisplayName())
- ),
- 1
+ msg(sprintf(
+ $this->getLang('msg_delete_success'),
+ hsc($extension->getDisplayName())), 1
);
} else {
- msg(
- sprintf(
- $this->getLang('msg_delete_failed'),
- hsc($extension->getDisplayName())
- ),
- -1
+ msg(sprintf(
+ $this->getLang('msg_delete_failed'),
+ hsc($extension->getDisplayName())), -1
);
}
break;
@@ -111,7 +104,10 @@ class admin_plugin_extension extends DokuWiki_Admin_Plugin
if ($status !== true) {
msg($status, -1);
} else {
- msg(sprintf($this->getLang('msg_enabled'), hsc($extension->getDisplayName())), 1);
+ msg(sprintf(
+ $this->getLang('msg_enabled'),
+ hsc($extension->getDisplayName())), 1
+ );
}
break;
case 'disable':
@@ -120,29 +116,38 @@ class admin_plugin_extension extends DokuWiki_Admin_Plugin
if ($status !== true) {
msg($status, -1);
} else {
- msg(sprintf($this->getLang('msg_disabled'), hsc($extension->getDisplayName())), 1);
+ msg(sprintf(
+ $this->getLang('msg_disabled'),
+ hsc($extension->getDisplayName())), 1
+ );
}
break;
}
}
}
- send_redirect($this->gui->tabURL('', array(), '&', true));
+ send_redirect($this->gui->tabURL('', [], '&', true));
} elseif ($INPUT->post->str('installurl') && checkSecurityToken()) {
$installed = $extension->installFromURL($INPUT->post->str('installurl'));
foreach ($installed as $ext => $info) {
- msg(sprintf($this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'), $info['base']), 1);
+ msg(sprintf(
+ $this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'),
+ $info['base']), 1
+ );
}
- send_redirect($this->gui->tabURL('', array(), '&', true));
+ send_redirect($this->gui->tabURL('', [], '&', true));
} elseif (isset($_FILES['installfile']) && checkSecurityToken()) {
$installed = $extension->installFromUpload('installfile');
foreach ($installed as $ext => $info) {
- msg(sprintf($this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'), $info['base']), 1);
+ msg(sprintf(
+ $this->getLang('msg_'.$info['type'].'_'.$info['action'].'_success'),
+ $info['base']), 1
+ );
}
- send_redirect($this->gui->tabURL('', array(), '&', true));
+ send_redirect($this->gui->tabURL('', [], '&', true));
}
} catch (Exception $e) {
msg($e->getMessage(), -1);
- send_redirect($this->gui->tabURL('', array(), '&', true));
+ send_redirect($this->gui->tabURL('', [], '&', true));
}
}
@@ -151,8 +156,8 @@ class admin_plugin_extension extends DokuWiki_Admin_Plugin
*/
public function html()
{
- ptln('<h1>'.$this->getLang('menu').'</h1>');
- ptln('<div id="extension__manager">');
+ echo '<h1>'.$this->getLang('menu').'</h1>'.DOKU_LF;
+ echo '<div id="extension__manager">'.DOKU_LF;
$this->gui->tabNavigation();
@@ -171,7 +176,7 @@ class admin_plugin_extension extends DokuWiki_Admin_Plugin
$this->gui->tabPlugins();
}
- ptln('</div>');
+ echo '</div>'.DOKU_LF;
}
}
diff --git a/lib/plugins/extension/helper/extension.php b/lib/plugins/extension/helper/extension.php
index 0186620d0..3e7087eba 100644
--- a/lib/plugins/extension/helper/extension.php
+++ b/lib/plugins/extension/helper/extension.php
@@ -126,11 +126,11 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin
return in_array(
$this->id,
array(
- 'authad', 'authldap', 'authmysql', 'authpdo',
- 'authpgsql', 'authplain', 'acl', 'info', 'extension',
- 'revert', 'popularity', 'config', 'safefnrecode', 'styling',
- 'testing', 'template:dokuwiki'
- )
+ 'authad', 'authldap', 'authpdo', 'authplain',
+ 'acl', 'config', 'extension', 'info', 'popularity', 'revert',
+ 'safefnrecode', 'styling', 'testing', 'usermanager',
+ 'template:dokuwiki',
+ )
);
}
@@ -306,7 +306,8 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin
public function getURL()
{
if (!empty($this->localInfo['url'])) return $this->localInfo['url'];
- return 'https://www.dokuwiki.org/'.($this->isTemplate() ? 'template' : 'plugin').':'.$this->getBase();
+ return 'https://www.dokuwiki.org/'.
+ ($this->isTemplate() ? 'template' : 'plugin').':'.$this->getBase();
}
/**
@@ -772,8 +773,8 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin
if (is_readable($infopath)) {
$this->localInfo = confToHash($infopath);
} elseif (!$this->isTemplate() && $this->isEnabled()) {
- $path = $this->getInstallDir().'/';
- $plugin = null;
+ $path = $this->getInstallDir().'/';
+ $plugin = null;
foreach (PluginController::PLUGIN_TYPES as $type) {
if (file_exists($path.$type.'.php')) {
@@ -895,7 +896,8 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin
* @param string $defaultName fallback for name of download
* @return bool|string if failed false, otherwise true or the name of the file in the given dir
*/
- protected function downloadToFile($url,$file,$defaultName=''){
+ protected function downloadToFile($url, $file, $defaultName = '')
+ {
global $conf;
$http = new DokuHTTPClient();
$http->max_bodysize = 0;
@@ -909,10 +911,10 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin
$name = '';
if (isset($http->resp_headers['content-disposition'])) {
$content_disposition = $http->resp_headers['content-disposition'];
- $match=array();
+ $match = array();
if (is_string($content_disposition) &&
- preg_match('/attachment;\s*filename\s*=\s*"([^"]*)"/i', $content_disposition, $match)) {
-
+ preg_match('/attachment;\s*filename\s*=\s*"([^"]*)"/i', $content_disposition, $match)
+ ) {
$name = \dokuwiki\Utf8\PhpString::basename($match[1]);
}
@@ -927,10 +929,10 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin
$fileexists = file_exists($file);
$fp = @fopen($file,"w");
- if(!$fp) return false;
- fwrite($fp,$data);
+ if (!$fp) return false;
+ fwrite($fp, $data);
fclose($fp);
- if(!$fileexists and $conf['fperm']) chmod($file, $conf['fperm']);
+ if (!$fileexists and $conf['fperm']) chmod($file, $conf['fperm']);
return $name;
}
@@ -964,7 +966,9 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin
// download
if (!$file = $this->downloadToFile($url, $tmp.'/', $file)) {
io_rmdir($tmp, true);
- throw new Exception(sprintf($this->getLang('error_download'), '<bdi>'.hsc($url).'</bdi>'));
+ throw new Exception(sprintf($this->getLang('error_download'),
+ '<bdi>'.hsc($url).'</bdi>')
+ );
}
return $tmp.'/'.$file;
@@ -1055,7 +1059,9 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin
'action' => $action
);
} else {
- throw new Exception(sprintf($this->getLang('error_copy').DOKU_LF, '<bdi>'.$item['base'].'</bdi>'));
+ throw new Exception(sprintf($this->getLang('error_copy').DOKU_LF,
+ '<bdi>'.$item['base'].'</bdi>')
+ );
}
}
@@ -1129,13 +1135,13 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin
// files where found but no info.txt - use old method
if ($found_files) {
- $info = array();
- $info['tmp'] = $this_dir;
+ $info = array();
+ $info['tmp'] = $this_dir;
// does this look like a template or should we use the default type?
if ($found_template_parts >= 2) {
- $info['type'] = 'template';
+ $info['type'] = 'template';
} else {
- $info['type'] = $default_type;
+ $info['type'] = $default_type;
}
$result['old'][] = $info;
@@ -1187,7 +1193,8 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin
return true;
}
- // the only case when we don't get one of the recognized archive types is when the archive file can't be read
+ // the only case when we don't get one of the recognized archive types is
+ // when the archive file can't be read
throw new Exception($this->getLang('error_decompress').' Couldn\'t read archive file');
}
@@ -1238,10 +1245,10 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin
closedir($dh);
return $ok;
} else {
- $exists = file_exists($dst);
+ $existed = file_exists($dst);
if (!@copy($src, $dst)) return false;
- if (!$exists && !empty($conf['fperm'])) chmod($dst, $conf['fperm']);
+ if (!$existed && $conf['fperm']) chmod($dst, $conf['fperm']);
@touch($dst, filemtime($src));
}
diff --git a/lib/plugins/extension/helper/gui.php b/lib/plugins/extension/helper/gui.php
index aa9e2ec45..d02c02a89 100644
--- a/lib/plugins/extension/helper/gui.php
+++ b/lib/plugins/extension/helper/gui.php
@@ -6,14 +6,13 @@
* @author Andreas Gohr <andi@splitbrain.org>
*/
-use dokuwiki\Extension\PluginController;
+use dokuwiki\Form\Form;
/**
* Class helper_plugin_extension_list takes care of the overall GUI
*/
class helper_plugin_extension_gui extends DokuWiki_Plugin
{
-
protected $tabs = array('plugins', 'templates', 'search', 'install');
/** @var string the extension that should have an open info window FIXME currently broken */
@@ -35,26 +34,28 @@ class helper_plugin_extension_gui extends DokuWiki_Plugin
*/
public function tabPlugins()
{
- /* @var PluginController $plugin_controller */
- global $plugin_controller;
-
echo '<div class="panelHeader">';
echo $this->locale_xhtml('intro_plugins');
echo '</div>';
- $pluginlist = $plugin_controller->getList('', true);
- sort($pluginlist);
+ $pluginlist = plugin_list('', true);
/* @var helper_plugin_extension_extension $extension */
$extension = $this->loadHelper('extension_extension');
/* @var helper_plugin_extension_list $list */
$list = $this->loadHelper('extension_list');
+
+ $form = new Form([
+ 'action' => $this->tabURL('', [], '&'),
+ 'id' => 'extension__list',
+ ]);
$list->startForm();
foreach ($pluginlist as $name) {
$extension->setExtension($name);
$list->addRow($extension, $extension->getID() == $this->infoFor);
}
$list->endForm();
- $list->render();
+ $form->addHTML($list->render(true));
+ echo $form->toHTML();
}
/**
@@ -75,13 +76,19 @@ class helper_plugin_extension_gui extends DokuWiki_Plugin
$extension = $this->loadHelper('extension_extension');
/* @var helper_plugin_extension_list $list */
$list = $this->loadHelper('extension_list');
+
+ $form = new Form([
+ 'action' => $this->tabURL('', [], '&'),
+ 'id' => 'extension__list',
+ ]);
$list->startForm();
foreach ($tpllist as $name) {
$extension->setExtension("template:$name");
$list->addRow($extension, $extension->getID() == $this->infoFor);
}
$list->endForm();
- $list->render();
+ $form->addHTML($list->render(true));
+ echo $form->toHTML();
}
/**
@@ -94,10 +101,18 @@ class helper_plugin_extension_gui extends DokuWiki_Plugin
echo $this->locale_xhtml('intro_search');
echo '</div>';
- $form = new Doku_Form(array('action' => $this->tabURL('', array(), '&'), 'class' => 'search'));
- $form->addElement(form_makeTextField('q', $INPUT->str('q'), $this->getLang('search_for')));
- $form->addElement(form_makeButton('submit', '', $this->getLang('search')));
- $form->printForm();
+ $form = new Form([
+ 'action' => $this->tabURL('', [], '&'),
+ 'class' => 'search',
+ ]);
+ $form->addTagOpen('div')->addClass('no');
+ $form->addTextInput('q', $this->getLang('search_for'))
+ ->addClass('edit')
+ ->val($INPUT->str('q'));
+ $form->addButton('submit', $this->getLang('search'))
+ ->attrs(['type' => 'submit', 'title' => $this->getLang('search')]);
+ $form->addTagClose('div');
+ echo $form->toHTML();
if (!$INPUT->bool('q')) return;
@@ -109,6 +124,11 @@ class helper_plugin_extension_gui extends DokuWiki_Plugin
$extension = $this->loadHelper('extension_extension');
/* @var helper_plugin_extension_list $list */
$list = $this->loadHelper('extension_list');
+
+ $form = new Form([
+ 'action' => $this->tabURL('', [], '&'),
+ 'id' => 'extension__list',
+ ]);
$list->startForm();
if ($result) {
foreach ($result as $name) {
@@ -119,7 +139,8 @@ class helper_plugin_extension_gui extends DokuWiki_Plugin
$list->nothingFound();
}
$list->endForm();
- $list->render();
+ $form->addHTML($list->render(true));
+ echo $form->toHTML();
}
/**
@@ -131,17 +152,24 @@ class helper_plugin_extension_gui extends DokuWiki_Plugin
echo $this->locale_xhtml('intro_install');
echo '</div>';
- $form = new Doku_Form(
- array(
- 'action' => $this->tabURL('', array(), '&'),
+ $form = new Form([
+ 'action' => $this->tabURL('', [], '&'),
'enctype' => 'multipart/form-data',
- 'class' => 'install'
- )
- );
- $form->addElement(form_makeTextField('installurl', '', $this->getLang('install_url'), '', 'block'));
- $form->addElement(form_makeFileField('installfile', $this->getLang('install_upload'), '', 'block'));
- $form->addElement(form_makeButton('submit', '', $this->getLang('btn_install')));
- $form->printForm();
+ 'class' => 'install',
+ ]);
+ $form->addTagOpen('div')->addClass('no');
+ $form->addTextInput('installurl', $this->getLang('install_url'))
+ ->addClass('block')
+ ->attrs(['type' => 'url']);
+ $form->addTag('br');
+ $form->addTextInput('installfile', $this->getLang('install_upload'))
+ ->addClass('block')
+ ->attrs(['type' => 'file']);
+ $form->addTag('br');
+ $form->addButton('', $this->getLang('btn_install'))
+ ->attrs(['type' => 'submit', 'title' => $this->getLang('btn_install')]);
+ $form->addTagClose('div');
+ echo $form->toHTML();
}
/**
@@ -187,7 +215,7 @@ class helper_plugin_extension_gui extends DokuWiki_Plugin
* @param bool $absolute create absolute URLs?
* @return string
*/
- public function tabURL($tab = '', $params = array(), $sep = '&amp;', $absolute = false)
+ public function tabURL($tab = '', $params = [], $sep = '&', $absolute = false)
{
global $ID;
global $INPUT;
diff --git a/lib/plugins/extension/helper/list.php b/lib/plugins/extension/helper/list.php
index d895941cb..647575b10 100644
--- a/lib/plugins/extension/helper/list.php
+++ b/lib/plugins/extension/helper/list.php
@@ -30,13 +30,6 @@ class helper_plugin_extension_list extends DokuWiki_Plugin
*/
public function startForm()
{
- $this->form .= '<form id="extension__list" accept-charset="utf-8" method="post" action="">';
- $hidden = array(
- 'do'=>'admin',
- 'page'=>'extension',
- 'sectok'=>getSecurityToken()
- );
- $this->addHidden($hidden);
$this->form .= '<ul class="extensionList">';
}
@@ -96,7 +89,6 @@ class helper_plugin_extension_list extends DokuWiki_Plugin
public function endForm()
{
$this->form .= '</ul>';
- $this->form .= '</form>'.DOKU_LF;
}
/**
@@ -110,9 +102,12 @@ class helper_plugin_extension_list extends DokuWiki_Plugin
/**
* Print the form
+ *
+ * @param bool $returnonly whether to return html or print
*/
- public function render()
+ public function render($returnonly = false)
{
+ if ($returnonly) return $this->form;
echo $this->form;
}
@@ -153,13 +148,30 @@ class helper_plugin_extension_list extends DokuWiki_Plugin
*/
public function makeHomepageLink(helper_plugin_extension_extension $extension)
{
- $text = $this->getLang('homepage_link');
- $url = hsc($extension->getURL());
- return '<a href="'.$url.'" title="'.$url.'" class ="urlextern">'.$text.'</a> ';
+ global $conf;
+ $url = $extension->getURL();
+ if (strtolower(parse_url($url, PHP_URL_HOST)) == 'www.dokuwiki.org') {
+ $linktype = 'interwiki';
+ } else {
+ $linktype = 'extern';
+ }
+ $param = array(
+ 'href' => $url,
+ 'title' => $url,
+ 'class' => ($linktype == 'extern') ? 'urlextern' : 'interwiki iw_doku',
+ 'target' => $conf['target'][$linktype],
+ 'rel' => ($linktype == 'extern') ? 'noopener' : '',
+ );
+ if ($linktype == 'extern' && $conf['relnofollow']) {
+ $param['rel'] = implode(' ', [$param['rel'], 'ugc nofollow']);
+ }
+ $html = ' <a '. buildAttributes($param, true).'>'.
+ $this->getLang('homepage_link').'</a>';
+ return $html;
}
/**
- * Generate the class name for the row of the extensio
+ * Generate the class name for the row of the extension
*
* @param helper_plugin_extension_extension $extension The extension object
* @return string The class name
@@ -190,14 +202,18 @@ class helper_plugin_extension_list extends DokuWiki_Plugin
$mailid = $extension->getEmailID();
if ($mailid) {
$url = $this->gui->tabURL('search', array('q' => 'authorid:'.$mailid));
- return '<bdi><a href="'.$url.'" class="author" title="'.$this->getLang('author_hint').'" >'.
- '<img src="//www.gravatar.com/avatar/'.$mailid.'?s=20&amp;d=mm" width="20" height="20" alt="" /> '.
- hsc($extension->getAuthor()).'</a></bdi>';
+ $html = '<a href="'.$url.'" class="author" title="'.$this->getLang('author_hint').'" >'.
+ '<img src="//www.gravatar.com/avatar/'.$mailid.
+ '?s=20&amp;d=mm" width="20" height="20" alt="" /> '.
+ hsc($extension->getAuthor()).'</a>';
} else {
- return '<bdi><span class="author">'.hsc($extension->getAuthor()).'</span></bdi>';
+ $html = '<span class="author">'.hsc($extension->getAuthor()).'</span>';
}
+ $html = '<bdi>'.$html.'</bdi>';
+ } else {
+ $html = '<em class="author">'.$this->getLang('unknown_author').'</em>'.DOKU_LF;
}
- return "<em class=\"author\">".$this->getLang('unknown_author')."</em>".DOKU_LF;
+ return $html;
}
/**
@@ -227,7 +243,8 @@ class helper_plugin_extension_list extends DokuWiki_Plugin
$img = '<img alt="" width="120" height="70" src="'.DOKU_BASE.
'lib/plugins/extension/images/plugin.png" />';
}
- return '<div class="screenshot" >'.$img.'<span></span></div>'.DOKU_LF;
+ $html = '<div class="screenshot" >'.$img.'<span></span></div>'.DOKU_LF;
+ return $html;
}
/**
@@ -239,33 +256,33 @@ class helper_plugin_extension_list extends DokuWiki_Plugin
*/
public function makeLegend(helper_plugin_extension_extension $extension, $showinfo = false)
{
- $return = '<div>';
- $return .= '<h2>';
- $return .= sprintf(
+ $html = '<div>';
+ $html .= '<h2>';
+ $html .= sprintf(
$this->getLang('extensionby'),
'<bdi>'.hsc($extension->getDisplayName()).'</bdi>',
$this->makeAuthor($extension)
);
- $return .= '</h2>'.DOKU_LF;
+ $html .= '</h2>'.DOKU_LF;
- $return .= $this->makeScreenshot($extension);
+ $html .= $this->makeScreenshot($extension);
$popularity = $extension->getPopularity();
if ($popularity !== false && !$extension->isBundled()) {
$popularityText = sprintf($this->getLang('popularity'), round($popularity*100, 2));
- $return .= '<div class="popularity" title="'.$popularityText.'">'.
+ $html .= '<div class="popularity" title="'.$popularityText.'">'.
'<div style="width: '.($popularity * 100).'%;">'.
'<span class="a11y">'.$popularityText.'</span>'.
'</div></div>'.DOKU_LF;
}
if ($extension->getDescription()) {
- $return .= '<p><bdi>';
- $return .= hsc($extension->getDescription()).' ';
- $return .= '</bdi></p>'.DOKU_LF;
+ $html .= '<p><bdi>';
+ $html .= hsc($extension->getDescription()).' ';
+ $html .= '</bdi></p>'.DOKU_LF;
}
- $return .= $this->makeLinkbar($extension);
+ $html .= $this->makeLinkbar($extension);
if ($showinfo) {
$url = $this->gui->tabURL('');
@@ -274,16 +291,16 @@ class helper_plugin_extension_list extends DokuWiki_Plugin
$url = $this->gui->tabURL('', array('info' => $extension->getID()));
$class = '';
}
- $return .= ' <a href="'.$url.'#extensionplugin__'.$extension->getID().
+ $html .= ' <a href="'.$url.'#extensionplugin__'.$extension->getID().
'" class="info '.$class.'" title="'.$this->getLang('btn_info').
'" data-extid="'.$extension->getID().'">'.$this->getLang('btn_info').'</a>';
if ($showinfo) {
- $return .= $this->makeInfo($extension);
+ $html .= $this->makeInfo($extension);
}
- $return .= $this->makeNoticeArea($extension);
- $return .= '</div>'.DOKU_LF;
- return $return;
+ $html .= $this->makeNoticeArea($extension);
+ $html .= '</div>'.DOKU_LF;
+ return $html;
}
/**
@@ -294,29 +311,46 @@ class helper_plugin_extension_list extends DokuWiki_Plugin
*/
public function makeLinkbar(helper_plugin_extension_extension $extension)
{
- $return = '<div class="linkbar">';
- $return .= $this->makeHomepageLink($extension);
- if ($extension->getBugtrackerURL()) {
- $return .= ' <a href="'.hsc($extension->getBugtrackerURL()).
- '" title="'.hsc($extension->getBugtrackerURL()).'" class ="bugs">'.
- $this->getLang('bugs_features').'</a> ';
+ global $conf;
+ $html = '<div class="linkbar">';
+ $html .= $this->makeHomepageLink($extension);
+
+ $bugtrackerURL = $extension->getBugtrackerURL();
+ if ($bugtrackerURL) {
+ if (strtolower(parse_url($bugtrackerURL, PHP_URL_HOST)) == 'www.dokuwiki.org') {
+ $linktype = 'interwiki';
+ } else {
+ $linktype = 'extern';
+ }
+ $param = array(
+ 'href' => $bugtrackerURL,
+ 'title' => $bugtrackerURL,
+ 'class' => 'bugs',
+ 'target' => $conf['target'][$linktype],
+ 'rel' => ($linktype == 'extern') ? 'noopener' : '',
+ );
+ if ($conf['relnofollow']) {
+ $param['rel'] = implode(' ', [$param['rel'], 'ugc nofollow']);
+ }
+ $html .= ' <a '.buildAttributes($param, true).'>'.
+ $this->getLang('bugs_features').'</a>';
}
if ($extension->getTags()) {
$first = true;
- $return .= '<span class="tags">'.$this->getLang('tags').' ';
+ $html .= ' <span class="tags">'.$this->getLang('tags').' ';
foreach ($extension->getTags() as $tag) {
if (!$first) {
- $return .= ', ';
+ $html .= ', ';
} else {
$first = false;
}
- $url = $this->gui->tabURL('search', array('q' => 'tag:'.$tag));
- $return .= '<bdi><a href="'.$url.'">'.hsc($tag).'</a></bdi>';
+ $url = $this->gui->tabURL('search', ['q' => 'tag:'.$tag]);
+ $html .= '<bdi><a href="'.$url.'">'.hsc($tag).'</a></bdi>';
}
- $return .= '</span>';
+ $html .= '</span>';
}
- $return .= '</div>'.DOKU_LF;
- return $return;
+ $html .= '</div>'.DOKU_LF;
+ return $html;
}
/**
@@ -327,10 +361,10 @@ class helper_plugin_extension_list extends DokuWiki_Plugin
*/
public function makeNoticeArea(helper_plugin_extension_extension $extension)
{
- $return = '';
+ $html = '';
$missing_dependencies = $extension->getMissingDependencies();
if (!empty($missing_dependencies)) {
- $return .= '<div class="msg error">' .
+ $html .= '<div class="msg error">' .
sprintf(
$this->getLang('missing_dependency'),
'<bdi>' . implode(', ', $missing_dependencies) . '</bdi>'
@@ -338,7 +372,7 @@ class helper_plugin_extension_list extends DokuWiki_Plugin
'</div>';
}
if ($extension->isInWrongFolder()) {
- $return .= '<div class="msg error">' .
+ $html .= '<div class="msg error">' .
sprintf(
$this->getLang('wrong_folder'),
'<bdi>' . hsc($extension->getInstallName()) . '</bdi>',
@@ -347,22 +381,22 @@ class helper_plugin_extension_list extends DokuWiki_Plugin
'</div>';
}
if (($securityissue = $extension->getSecurityIssue()) !== false) {
- $return .= '<div class="msg error">'.
+ $html .= '<div class="msg error">'.
sprintf($this->getLang('security_issue'), '<bdi>'.hsc($securityissue).'</bdi>').
'</div>';
}
if (($securitywarning = $extension->getSecurityWarning()) !== false) {
- $return .= '<div class="msg notify">'.
+ $html .= '<div class="msg notify">'.
sprintf($this->getLang('security_warning'), '<bdi>'.hsc($securitywarning).'</bdi>').
'</div>';
}
if ($extension->updateAvailable()) {
- $return .= '<div class="msg notify">'.
+ $html .= '<div class="msg notify">'.
sprintf($this->getLang('update_available'), hsc($extension->getLastUpdate())).
'</div>';
}
if ($extension->hasDownloadURLChanged()) {
- $return .= '<div class="msg notify">' .
+ $html .= '<div class="msg notify">' .
sprintf(
$this->getLang('url_change'),
'<bdi>' . hsc($extension->getDownloadURL()) . '</bdi>',
@@ -370,7 +404,7 @@ class helper_plugin_extension_list extends DokuWiki_Plugin
) .
'</div>';
}
- return $return.DOKU_LF;
+ return $html.DOKU_LF;
}
/**
@@ -392,7 +426,8 @@ class helper_plugin_extension_list extends DokuWiki_Plugin
$name = shorten($base, $long, 55);
- return '<a href="'.hsc($url).'" class="urlextern">'.hsc($name).'</a>';
+ $html = '<a href="'.hsc($url).'" class="urlextern">'.hsc($name).'</a>';
+ return $html;
}
/**
@@ -404,88 +439,98 @@ class helper_plugin_extension_list extends DokuWiki_Plugin
public function makeInfo(helper_plugin_extension_extension $extension)
{
$default = $this->getLang('unknown');
- $return = '<dl class="details">';
+ $html = '<dl class="details">';
- $return .= '<dt>'.$this->getLang('status').'</dt>';
- $return .= '<dd>'.$this->makeStatus($extension).'</dd>';
+ $html .= '<dt>'.$this->getLang('status').'</dt>';
+ $html .= '<dd>'.$this->makeStatus($extension).'</dd>';
if ($extension->getDonationURL()) {
- $return .= '<dt>'.$this->getLang('donate').'</dt>';
- $return .= '<dd>';
- $return .= '<a href="'.$extension->getDonationURL().'" class="donate">'.
+ $html .= '<dt>'.$this->getLang('donate').'</dt>';
+ $html .= '<dd>';
+ $html .= '<a href="'.$extension->getDonationURL().'" class="donate">'.
$this->getLang('donate_action').'</a>';
- $return .= '</dd>';
+ $html .= '</dd>';
}
if (!$extension->isBundled()) {
- $return .= '<dt>'.$this->getLang('downloadurl').'</dt>';
- $return .= '<dd><bdi>';
- $return .= ($extension->getDownloadURL() ? $this->shortlink($extension->getDownloadURL()) : $default);
- $return .= '</bdi></dd>';
-
- $return .= '<dt>'.$this->getLang('repository').'</dt>';
- $return .= '<dd><bdi>';
- $return .= ($extension->getSourcerepoURL() ? $this->shortlink($extension->getSourcerepoURL()) : $default);
- $return .= '</bdi></dd>';
+ $html .= '<dt>'.$this->getLang('downloadurl').'</dt>';
+ $html .= '<dd><bdi>';
+ $html .= ($extension->getDownloadURL()
+ ? $this->shortlink($extension->getDownloadURL())
+ : $default);
+ $html .= '</bdi></dd>';
+
+ $html .= '<dt>'.$this->getLang('repository').'</dt>';
+ $html .= '<dd><bdi>';
+ $html .= ($extension->getSourcerepoURL()
+ ? $this->shortlink($extension->getSourcerepoURL())
+ : $default);
+ $html .= '</bdi></dd>';
}
if ($extension->isInstalled()) {
if ($extension->getInstalledVersion()) {
- $return .= '<dt>'.$this->getLang('installed_version').'</dt>';
- $return .= '<dd>';
- $return .= hsc($extension->getInstalledVersion());
- $return .= '</dd>';
+ $html .= '<dt>'.$this->getLang('installed_version').'</dt>';
+ $html .= '<dd>';
+ $html .= hsc($extension->getInstalledVersion());
+ $html .= '</dd>';
}
if (!$extension->isBundled()) {
- $return .= '<dt>'.$this->getLang('install_date').'</dt>';
- $return .= '<dd>';
- $return .= ($extension->getUpdateDate() ? hsc($extension->getUpdateDate()) : $this->getLang('unknown'));
- $return .= '</dd>';
+ $html .= '<dt>'.$this->getLang('install_date').'</dt>';
+ $html .= '<dd>';
+ $html .= ($extension->getUpdateDate()
+ ? hsc($extension->getUpdateDate())
+ : $this->getLang('unknown'));
+ $html .= '</dd>';
}
}
if (!$extension->isInstalled() || $extension->updateAvailable()) {
- $return .= '<dt>'.$this->getLang('available_version').'</dt>';
- $return .= '<dd>';
- $return .= ($extension->getLastUpdate() ? hsc($extension->getLastUpdate()) : $this->getLang('unknown'));
- $return .= '</dd>';
+ $html .= '<dt>'.$this->getLang('available_version').'</dt>';
+ $html .= '<dd>';
+ $html .= ($extension->getLastUpdate()
+ ? hsc($extension->getLastUpdate())
+ : $this->getLang('unknown'));
+ $html .= '</dd>';
}
- $return .= '<dt>'.$this->getLang('provides').'</dt>';
- $return .= '<dd><bdi>';
- $return .= ($extension->getTypes() ? hsc(implode(', ', $extension->getTypes())) : $default);
- $return .= '</bdi></dd>';
+ $html .= '<dt>'.$this->getLang('provides').'</dt>';
+ $html .= '<dd><bdi>';
+ $html .= ($extension->getTypes()
+ ? hsc(implode(', ', $extension->getTypes()))
+ : $default);
+ $html .= '</bdi></dd>';
if (!$extension->isBundled() && $extension->getCompatibleVersions()) {
- $return .= '<dt>'.$this->getLang('compatible').'</dt>';
- $return .= '<dd>';
+ $html .= '<dt>'.$this->getLang('compatible').'</dt>';
+ $html .= '<dd>';
foreach ($extension->getCompatibleVersions() as $date => $version) {
- $return .= '<bdi>'.$version['label'].' ('.$date.')</bdi>, ';
+ $html .= '<bdi>'.$version['label'].' ('.$date.')</bdi>, ';
}
- $return = rtrim($return, ', ');
- $return .= '</dd>';
+ $html = rtrim($html, ', ');
+ $html .= '</dd>';
}
if ($extension->getDependencies()) {
- $return .= '<dt>'.$this->getLang('depends').'</dt>';
- $return .= '<dd>';
- $return .= $this->makeLinkList($extension->getDependencies());
- $return .= '</dd>';
+ $html .= '<dt>'.$this->getLang('depends').'</dt>';
+ $html .= '<dd>';
+ $html .= $this->makeLinkList($extension->getDependencies());
+ $html .= '</dd>';
}
if ($extension->getSimilarExtensions()) {
- $return .= '<dt>'.$this->getLang('similar').'</dt>';
- $return .= '<dd>';
- $return .= $this->makeLinkList($extension->getSimilarExtensions());
- $return .= '</dd>';
+ $html .= '<dt>'.$this->getLang('similar').'</dt>';
+ $html .= '<dd>';
+ $html .= $this->makeLinkList($extension->getSimilarExtensions());
+ $html .= '</dd>';
}
if ($extension->getConflicts()) {
- $return .= '<dt>'.$this->getLang('conflicts').'</dt>';
- $return .= '<dd>';
- $return .= $this->makeLinkList($extension->getConflicts());
- $return .= '</dd>';
+ $html .= '<dt>'.$this->getLang('conflicts').'</dt>';
+ $html .= '<dd>';
+ $html .= $this->makeLinkList($extension->getConflicts());
+ $html .= '</dd>';
}
- $return .= '</dl>'.DOKU_LF;
- return $return;
+ $html .= '</dl>'.DOKU_LF;
+ return $html;
}
/**
@@ -496,12 +541,13 @@ class helper_plugin_extension_list extends DokuWiki_Plugin
*/
public function makeLinkList($ext)
{
- $return = '';
+ $html = '';
foreach ($ext as $link) {
- $return .= '<bdi><a href="'.
- $this->gui->tabURL('search', array('q'=>'ext:'.$link)).'">'.hsc($link).'</a></bdi>, ';
+ $html .= '<bdi><a href="'.
+ $this->gui->tabURL('search', array('q'=>'ext:'.$link)).'">'.
+ hsc($link).'</a></bdi>, ';
}
- return rtrim($return, ', ');
+ return rtrim($html, ', ');
}
/**
@@ -513,19 +559,19 @@ class helper_plugin_extension_list extends DokuWiki_Plugin
public function makeActions(helper_plugin_extension_extension $extension)
{
global $conf;
- $return = '';
+ $html = '';
$errors = '';
if ($extension->isInstalled()) {
if (($canmod = $extension->canModify()) === true) {
if (!$extension->isProtected()) {
- $return .= $this->makeAction('uninstall', $extension);
+ $html .= $this->makeAction('uninstall', $extension);
}
if ($extension->getDownloadURL()) {
if ($extension->updateAvailable()) {
- $return .= $this->makeAction('update', $extension);
+ $html .= $this->makeAction('update', $extension);
} else {
- $return .= $this->makeAction('reinstall', $extension);
+ $html .= $this->makeAction('reinstall', $extension);
}
}
} else {
@@ -534,9 +580,9 @@ class helper_plugin_extension_list extends DokuWiki_Plugin
if (!$extension->isProtected() && !$extension->isTemplate()) { // no enable/disable for templates
if ($extension->isEnabled()) {
- $return .= $this->makeAction('disable', $extension);
+ $html .= $this->makeAction('disable', $extension);
} else {
- $return .= $this->makeAction('enable', $extension);
+ $html .= $this->makeAction('enable', $extension);
}
}
@@ -553,7 +599,7 @@ class helper_plugin_extension_list extends DokuWiki_Plugin
} else {
if (($canmod = $extension->canModify()) === true) {
if ($extension->getDownloadURL()) {
- $return .= $this->makeAction('install', $extension);
+ $html .= $this->makeAction('install', $extension);
}
} else {
$errors .= '<div class="permerror">'.$this->getLang($canmod).'</div>';
@@ -561,13 +607,13 @@ class helper_plugin_extension_list extends DokuWiki_Plugin
}
if (!$extension->isInstalled() && $extension->getDownloadURL()) {
- $return .= ' <span class="version">'.$this->getLang('available_version').' ';
- $return .= ($extension->getLastUpdate()
+ $html .= ' <span class="version">'.$this->getLang('available_version').' ';
+ $html .= ($extension->getLastUpdate()
? hsc($extension->getLastUpdate())
: $this->getLang('unknown')).'</span>';
}
- return $return.' '.$errors.DOKU_LF;
+ return $html.' '.$errors.DOKU_LF;
}
/**
@@ -591,8 +637,9 @@ class helper_plugin_extension_list extends DokuWiki_Plugin
$classes = 'button '.$action;
$name = 'fn['.$action.']['.hsc($extension->getID()).']';
- return '<button class="'.$classes.'" name="'.$name.'" type="submit" '.$title.'>'.
+ $html = '<button class="'.$classes.'" name="'.$name.'" type="submit" '.$title.'>'.
$this->getLang('btn_'.$action).'</button> ';
+ return $html;
}
/**
@@ -605,7 +652,6 @@ class helper_plugin_extension_list extends DokuWiki_Plugin
{
$status = array();
-
if ($extension->isInstalled()) {
$status[] = $this->getLang('status_installed');
if ($extension->isProtected()) {
@@ -620,7 +666,9 @@ class helper_plugin_extension_list extends DokuWiki_Plugin
}
if (!$extension->canModify()) $status[] = $this->getLang('status_unmodifiable');
if ($extension->isBundled()) $status[] = $this->getLang('status_bundled');
- $status[] = $extension->isTemplate() ? $this->getLang('status_template') : $this->getLang('status_plugin');
- return join(', ', $status);
+ $status[] = $extension->isTemplate()
+ ? $this->getLang('status_template')
+ : $this->getLang('status_plugin');
+ return implode(', ', $status);
}
}
diff --git a/lib/plugins/extension/lang/de-informal/lang.php b/lib/plugins/extension/lang/de-informal/lang.php
index 4daec7f65..10401061e 100644
--- a/lib/plugins/extension/lang/de-informal/lang.php
+++ b/lib/plugins/extension/lang/de-informal/lang.php
@@ -77,19 +77,19 @@ $lang['security_issue'] = '<strong>Sicherheitsproblem:</strong> %s';
$lang['security_warning'] = '<strong>Sicherheitswarnung:</strong> %s';
$lang['update_available'] = '<strong>Update:</strong> Version %s steht zum Download bereit.';
$lang['wrong_folder'] = '<strong>Plugin wurde nicht korrekt installiert:</strong> Benenne das Plugin-Verzeichnis "%s" in "%s" um.';
-$lang['url_change'] = '<strong>URL geändert:</strong> Die Download URL wurde seit dem letzten Download geändert. Internetadresse vor Aktualisierung der Erweiterung auf Gültigkeit prüfen.<br />Neu: %s<br />Alt: %s';
+$lang['url_change'] = '<strong>URL geändert:</strong> Die Download-URL wurde seit dem letzten Download geändert. Internetadresse vor Aktualisierung der Erweiterung auf Gültigkeit prüfen.<br />Neu: %s<br />Alt: %s';
$lang['error_badurl'] = 'URLs sollten mit http oder https beginnen';
$lang['error_dircreate'] = 'Temporärer Ordner konnte nicht erstellt werden um Download zu abzuspeichern';
$lang['error_download'] = 'Download der Datei: %s nicht möglich.';
-$lang['error_decompress'] = 'Die heruntergeladene Datei konnte nicht entpackt werden. Dies kann die Folge eines fehlerhaften Downloads sein. In diesem Fall solltest du versuchen den Vorgang zu wiederholen. Es kann auch die Folge eines unbekannten Kompressionsformates sein, in diesem ​​Fall musst du die Datei selber herunterladen und manuell installieren.';
+$lang['error_decompress'] = 'Die heruntergeladene Datei konnte nicht entpackt werden. Dies kann die Folge eines fehlerhaften Downloads sein. In diesem Fall solltest du versuchen den Vorgang zu wiederholen. Es kann auch die Folge eines unbekannten Kompressionsformates sein, in diesem Fall musst du die Datei selber herunterladen und manuell installieren.';
$lang['error_findfolder'] = 'Das Erweiterungs-Verzeichnis konnte nicht identifiziert werden, lade die Datei herunter und installiere sie manuell.';
$lang['error_copy'] = 'Beim Versuch Dateien in den Ordner <em>%s</em>: zu installieren trat ein Kopierfehler auf. Die Dateizugriffsberechtigungen könnten falsch sein. Dies kann an einem unvollständig installierten Plugin liegen und beeinträchtigt somit die Stabilität deiner Wiki-Installation.';
$lang['noperms'] = 'Das Erweiterungs-Verzeichnis ist schreibgeschützt';
$lang['notplperms'] = 'Das Template-Verzeichnis ist schreibgeschützt';
$lang['nopluginperms'] = 'Das Plugin-Verzeichnis ist schreibgeschützt';
$lang['git'] = 'Diese Erweiterung wurde über git installiert und sollte daher nicht hier aktualisiert werden.';
-$lang['auth'] = 'Dieses Auth Plugin ist in der Konfiguration nicht aktiviert, Du solltest es deaktivieren.';
+$lang['auth'] = 'Dieses Auth-Plugin ist in der Konfiguration nicht aktiviert, Du solltest es deaktivieren.';
$lang['install_url'] = 'Von URL installieren:';
$lang['install_upload'] = 'Erweiterung hochladen:';
-$lang['repo_error'] = 'Es konnte keine Verbindung zum Plugin-Verzeichnis hergestellt werden. Stelle sicher dass der Server Verbindung mit www.dokuwiki.org aufnehmen darf und überprüfe deine Proxy-Einstellungen.';
-$lang['nossl'] = 'Deine PHP-Installation scheint SSL nicht zu unterstützen. Das Herunterladen vieler DokuWiki Erweiterungen wird scheitern.';
+$lang['repo_error'] = 'Es konnte keine Verbindung zum Plugin-Verzeichnis hergestellt werden. Stelle sicher, dass der Server Verbindung mit www.dokuwiki.org aufnehmen darf und überprüfe deine Proxy-Einstellungen.';
+$lang['nossl'] = 'Deine PHP-Installation scheint SSL nicht zu unterstützen. Das Herunterladen vieler DokuWiki-Erweiterungen wird scheitern.';
diff --git a/lib/plugins/extension/lang/de/lang.php b/lib/plugins/extension/lang/de/lang.php
index 4a34f5955..f2dd77cc4 100644
--- a/lib/plugins/extension/lang/de/lang.php
+++ b/lib/plugins/extension/lang/de/lang.php
@@ -85,19 +85,19 @@ $lang['security_issue'] = '<strong>Sicherheitsproblem:</strong> %s';
$lang['security_warning'] = '<strong>Sicherheitswarnung:</strong> %s';
$lang['update_available'] = '<strong>Update:</strong> Version %s steht zum Download bereit.';
$lang['wrong_folder'] = '<strong>Plugin wurde nicht korrekt installiert:</strong> Benennen Sie das Plugin-Verzeichnis "%s" in "%s" um.';
-$lang['url_change'] = '<strong>URL geändert:</strong> Die Download URL wurde seit dem letzten Download geändert. Internetadresse vor Aktualisierung der Erweiterung auf Gültigkeit prüfen.<br />Neu: %s<br />Alt: %s';
+$lang['url_change'] = '<strong>URL geändert:</strong> Die Download-URL wurde seit dem letzten Download geändert. Internetadresse vor Aktualisierung der Erweiterung auf Gültigkeit prüfen.<br />Neu: %s<br />Alt: %s';
$lang['error_badurl'] = 'URLs sollten mit http oder https beginnen';
$lang['error_dircreate'] = 'Temporärer Ordner konnte nicht erstellt werden, um Download zu abzuspeichern';
$lang['error_download'] = 'Download der Datei: %s nicht möglich.';
-$lang['error_decompress'] = 'Die heruntergeladene Datei konnte nicht entpackt werden. Dies kann die Folge eines fehlerhaften Downloads sein. In diesem Fall sollten Sie versuchen den Vorgang zu wiederholen. Es kann auch die Folge eines unbekannten Kompressionsformates sein, in diesem ​​Fall müssen Sie die Datei selber herunterladen und manuell installieren.';
+$lang['error_decompress'] = 'Die heruntergeladene Datei konnte nicht entpackt werden. Dies kann die Folge eines fehlerhaften Downloads sein. In diesem Fall sollten Sie versuchen den Vorgang zu wiederholen. Es kann auch die Folge eines unbekannten Kompressionsformates sein, in diesem Fall müssen Sie die Datei selber herunterladen und manuell installieren.';
$lang['error_findfolder'] = 'Das Erweiterungs-Verzeichnis konnte nicht identifiziert werden, laden und installieren Sie die Datei manuell.';
$lang['error_copy'] = 'Beim Versuch Dateien in den Ordner <em>%s</em>: zu installieren trat ein Kopierfehler auf. Die Dateizugriffsberechtigungen könnten falsch sein. Dies kann an einem unvollständig installierten Plugin liegen und beeinträchtigt somit die Stabilität Ihre Wiki-Installation.';
$lang['noperms'] = 'Das Erweiterungs-Verzeichnis ist schreibgeschützt';
$lang['notplperms'] = 'Das Template-Verzeichnis ist schreibgeschützt';
$lang['nopluginperms'] = 'Das Plugin-Verzeichnis ist schreibgeschützt';
$lang['git'] = 'Diese Erweiterung wurde über git installiert und sollte daher nicht hier aktualisiert werden.';
-$lang['auth'] = 'Dieses Auth Plugin ist in der Konfiguration nicht aktiviert, Sie sollten es deaktivieren.';
+$lang['auth'] = 'Dieses Auth-Plugin ist in der Konfiguration nicht aktiviert, Sie sollten es deaktivieren.';
$lang['install_url'] = 'Von Webadresse (URL) installieren';
$lang['install_upload'] = 'Erweiterung hochladen:';
-$lang['repo_error'] = 'Es konnte keine Verbindung zum Plugin-Verzeichnis hergestellt werden. Stellen sie sicher das der Server Verbindung mit www.dokuwiki.org aufnehmen darf und überprüfen sie ihre Proxy Einstellungen.';
-$lang['nossl'] = 'Ihr PHP scheint SSL nicht zu unterstützen. Das Herunterladen vieler DokuWiki Erweiterungen wird scheitern.';
+$lang['repo_error'] = 'Es konnte keine Verbindung zum Plugin-Verzeichnis hergestellt werden. Stellen Sie sicher, dass der Server Verbindung mit www.dokuwiki.org aufnehmen darf und überprüfen Sie ihre Proxy-Einstellungen.';
+$lang['nossl'] = 'Ihr PHP scheint SSL nicht zu unterstützen. Das Herunterladen vieler DokuWiki-Erweiterungen wird scheitern.';
diff --git a/lib/plugins/extension/lang/fi/lang.php b/lib/plugins/extension/lang/fi/lang.php
index a154f2563..08052fe47 100644
--- a/lib/plugins/extension/lang/fi/lang.php
+++ b/lib/plugins/extension/lang/fi/lang.php
@@ -2,7 +2,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
+ *
* @author Jussi Takala <jussi.takala@live.fi>
*/
$lang['tab_plugins'] = 'Asennetut liitännäiset';
diff --git a/lib/plugins/extension/lang/pt/lang.php b/lib/plugins/extension/lang/pt/lang.php
index ee2f1ad1d..fbc98f347 100644
--- a/lib/plugins/extension/lang/pt/lang.php
+++ b/lib/plugins/extension/lang/pt/lang.php
@@ -3,8 +3,8 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Schopf <pschopf@gmail.com>
* @author Mario AlexandTeixeira dos Santos <masterofclan@gmail.com>
- * @author Paulo Ricardo Schopf <pschopf@gmail.com>
* @author Maykon Oliveira <maykonoliveira850@gmail.com>
* @author José Vieira <jmsv63@gmail.com>
* @author Guido Salatino <guidorafael23@gmail.com>
diff --git a/lib/plugins/extension/script.js b/lib/plugins/extension/script.js
index 8627db420..7c915808e 100644
--- a/lib/plugins/extension/script.js
+++ b/lib/plugins/extension/script.js
@@ -5,7 +5,7 @@ jQuery(function(){
/**
* Confirm uninstalling
*/
- $extmgr.find('button.uninstall').click(function(e){
+ $extmgr.find('button.uninstall').on('click', function(e){
if(!window.confirm(LANG.plugins.extension.reallydel)){
e.preventDefault();
return false;
@@ -17,7 +17,7 @@ jQuery(function(){
* very simple lightbox
* @link http://webdesign.tutsplus.com/tutorials/htmlcss-tutorials/super-simple-lightbox-with-css-and-jquery/
*/
- $extmgr.find('a.extension_screenshot').click(function(e) {
+ $extmgr.find('a.extension_screenshot').on('click', function(e) {
e.preventDefault();
//Get clicked link href
@@ -29,7 +29,7 @@ jQuery(function(){
$lightbox = jQuery('<div id="plugin__extensionlightbox"><p>Click to close</p><div></div></div>')
.appendTo(jQuery('body'))
.hide()
- .click(function(){
+ .on('click', function(){
$lightbox.hide();
});
}
@@ -46,7 +46,7 @@ jQuery(function(){
/**
* Enable/Disable extension via AJAX
*/
- $extmgr.find('button.disable, button.enable').click(function (e) {
+ $extmgr.find('button.disable, button.enable').on('click', function (e) {
e.preventDefault();
var $btn = jQuery(this);
@@ -85,7 +85,7 @@ jQuery(function(){
/**
* AJAX detail infos
*/
- $extmgr.find('a.info').click(function(e){
+ $extmgr.find('a.info').on('click', function(e){
e.preventDefault();
var $link = jQuery(this);
@@ -129,12 +129,12 @@ jQuery(function(){
var $label = jQuery( '<label></label>' )
.appendTo($displayOpts);
var $input = jQuery( '<input />', { type: 'checkbox', name: chkName })
- .change(displayOptionsHandler)
+ .on('change', displayOptionsHandler)
.appendTo($label);
var previous = DokuCookie.getValue('ext_'+chkName);
if(typeof previous === "undefined" || previous == '1') {
- $input.click();
+ $input.trigger('click');
}
jQuery( '<span/>' )
diff --git a/lib/plugins/info/syntax.php b/lib/plugins/info/syntax.php
index 3fa35e733..19e49bfcd 100644
--- a/lib/plugins/info/syntax.php
+++ b/lib/plugins/info/syntax.php
@@ -189,7 +189,7 @@ class syntax_plugin_info extends DokuWiki_Syntax_Plugin
foreach ($method['params'] as $desc => $type) {
$params[] = hsc($desc).'</td><td>'.hsc($type);
}
- $doc .= join($params, '</td></tr><tr><td>').'</td></tr>';
+ $doc .= join('</td></tr><tr><td>', $params).'</td></tr>';
}
if ($method['return']) {
$doc .= '<tr><th>Return value</th><td>'.hsc(key($method['return'])).
diff --git a/lib/plugins/popularity/lang/fi/lang.php b/lib/plugins/popularity/lang/fi/lang.php
index ec0fc4071..bea4f758b 100644
--- a/lib/plugins/popularity/lang/fi/lang.php
+++ b/lib/plugins/popularity/lang/fi/lang.php
@@ -2,7 +2,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
+ *
* @author Otto Vainio <otto@valjakko.net>
* @author Teemu Mattila <ghcsystems@gmail.com>
* @author Sami Olmari <sami@olmari.fi>
diff --git a/lib/plugins/revert/lang/cs/lang.php b/lib/plugins/revert/lang/cs/lang.php
index 7ea496b8b..cd833e465 100644
--- a/lib/plugins/revert/lang/cs/lang.php
+++ b/lib/plugins/revert/lang/cs/lang.php
@@ -3,6 +3,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Petr Kajzar <petr.kajzar@lf1.cuni.cz>
* @author Robert Surý <rsurycz@seznam.cz>
* @author Martin Hořínek <hev@hev.cz>
* @author Jonáš Dyba <jonas.dyba@gmail.com>
diff --git a/lib/plugins/revert/lang/fi/lang.php b/lib/plugins/revert/lang/fi/lang.php
index d14f527f9..02b4d35b2 100644
--- a/lib/plugins/revert/lang/fi/lang.php
+++ b/lib/plugins/revert/lang/fi/lang.php
@@ -2,9 +2,8 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author otto@valjakko.net
- * @author Otto Vainio <otto@valjakko.net>
+ *
+ * @author otto <otto@valjakko.net>
* @author Teemu Mattila <ghcsystems@gmail.com>
* @author Sami Olmari <sami@olmari.fi>
*/
diff --git a/lib/plugins/revert/lang/no/lang.php b/lib/plugins/revert/lang/no/lang.php
index 942d54a94..3e65a94b5 100644
--- a/lib/plugins/revert/lang/no/lang.php
+++ b/lib/plugins/revert/lang/no/lang.php
@@ -3,8 +3,8 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
- * @author Rut Kristin Aanestad <dark@met.no>
* @author Torgeir Blesvik <bletor@banenor.no>
+ * @author Rut Kristin Aanestad <dark@met.no>
* @author ThorPrestboen <thor.erling.prestboen@gmail.com>
* @author Christian McKenna <mckchr@banenor.no>
* @author Thomas Nygreen <nygreen@gmail.com>
diff --git a/lib/plugins/styling/lang/sk/lang.php b/lib/plugins/styling/lang/sk/lang.php
index 005835898..fcc32ad69 100644
--- a/lib/plugins/styling/lang/sk/lang.php
+++ b/lib/plugins/styling/lang/sk/lang.php
@@ -3,11 +3,16 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Peter Mydliar <peto.mydliar@gmail.com>
* @author Martin Michalek <michalek.dev@gmail.com>
*/
+$lang['menu'] = 'Nastavenie typov šablón';
+$lang['js']['popup'] = 'Otvor vo vyskakovacom okne';
+$lang['error'] = 'Táto šablóna nepodporuje túto funkciu.';
$lang['btn_preview'] = 'Náhľad zmien';
$lang['btn_save'] = 'Uloženie zmien';
$lang['btn_reset'] = 'Zruš prevedené zmeny';
+$lang['btn_revert'] = 'Vrátiť späť k základnej šablóne.';
$lang['__text__'] = 'Primárna farba textu';
$lang['__background__'] = 'Primárna farba pozadia';
$lang['__text_alt__'] = 'Alternatívna farba textu';
diff --git a/lib/plugins/styling/script.js b/lib/plugins/styling/script.js
index 3859190c7..909e999b8 100644
--- a/lib/plugins/styling/script.js
+++ b/lib/plugins/styling/script.js
@@ -64,7 +64,7 @@ jQuery(function () {
var $btn = jQuery('<button>' + LANG.plugins.styling.popup + '</button>');
$form.prepend($btn);
- $btn.click(function (e) {
+ $btn.on('click', function (e) {
var windowFeatures = "menubar=no,location=no,resizable=yes,scrollbars=yes,status=false,width=500,height=500";
window.open(DOKU_BASE + 'lib/plugins/styling/popup.php', 'styling_popup', windowFeatures);
e.preventDefault();
diff --git a/lib/plugins/usermanager/_test/csv_import.test.php b/lib/plugins/usermanager/_test/csv_import.test.php
index 299e0183d..13034a012 100644
--- a/lib/plugins/usermanager/_test/csv_import.test.php
+++ b/lib/plugins/usermanager/_test/csv_import.test.php
@@ -14,13 +14,14 @@ require_once(dirname(__FILE__).'/mocks.class.php');
*
* At present, users imported in individual tests remain in the user list for subsequent tests
*/
-class plugin_usermanager_csv_import_test extends DokuWikiTest {
-
+class plugin_usermanager_csv_import_test extends DokuWikiTest
+{
private $old_files;
protected $usermanager;
protected $importfile;
- function setUp() {
+ public function setUp()
+ {
$this->importfile = tempnam(TMP_DIR, 'csv');
$this->old_files = $_FILES;
@@ -38,22 +39,27 @@ class plugin_usermanager_csv_import_test extends DokuWikiTest {
parent::setUp();
}
- function tearDown() {
+ public function tearDown()
+ {
$_FILES = $this->old_files;
parent::tearDown();
}
- function doImportTest($importCsv, $expectedResult, $expectedNewUsers, $expectedFailures) {
+ public function doImportTest($importCsv, $expectedResult, $expectedNewUsers, $expectedFailures)
+ {
global $auth;
$before_users = $auth->retrieveUsers();
- io_savefile($this->importfile, $importCsv);
+ io_saveFile($this->importfile, $importCsv);
$result = $this->usermanager->tryImport();
$after_users = $auth->retrieveUsers();
+
+ $before_users = array_map('serialize', $before_users);
+ $after_users = array_map('serialize', $after_users);
$import_count = count($after_users) - count($before_users);
- $new_users = array_diff_key($after_users, $before_users);
- $diff_users = array_diff_assoc($after_users, $before_users);
+ $new_users = array_map('unserialize', array_diff_key($after_users, $before_users));
+ $diff_users = array_map('unserialize', array_diff_assoc($after_users, $before_users));
$expectedCount = count($expectedNewUsers);
@@ -66,7 +72,8 @@ class plugin_usermanager_csv_import_test extends DokuWikiTest {
$this->assertEquals($expectedFailures, $this->usermanager->getImportFailures()); // failures as expected
}
- function test_cantImport(){
+ public function test_cantImport()
+ {
global $auth;
$oldauth = $auth;
@@ -82,7 +89,8 @@ importuser,"Ford Prefect",ford@example.com,user
$auth = $oldauth;
}
- function test_import() {
+ public function test_import()
+ {
$csv = 'User,"Real Name",Email,Groups
importuser,"Ford Prefect",ford@example.com,user
';
@@ -97,7 +105,8 @@ importuser,"Ford Prefect",ford@example.com,user
$this->doImportTest($csv, true, $expected, array());
}
- function test_importExisting() {
+ public function test_importExisting()
+ {
$csv = 'User,"Real Name",Email,Groups
importuser,"Ford Prefect",ford@example.com,user
';
@@ -117,7 +126,8 @@ importuser,"Ford Prefect",ford@example.com,user
$this->doImportTest($csv, true, array(), $failures);
}
- function test_importUtf8() {
+ public function test_importUtf8()
+ {
$csv = 'User,"Real Name",Email,Groups
importutf8,"Førd Prefect",ford@example.com,user
';
@@ -135,7 +145,8 @@ importutf8,"Førd Prefect",ford@example.com,user
/**
* utf8: u+00F8 (ø) <=> 0xF8 :iso-8859-1
*/
- function test_importIso8859() {
+ public function test_importIso8859()
+ {
$csv = 'User,"Real Name",Email,Groups
importiso8859,"F'.chr(0xF8).'rd Prefect",ford@example.com,user
';
@@ -150,14 +161,16 @@ importiso8859,"F'.chr(0xF8).'rd Prefect",ford@example.com,user
$this->doImportTest($csv, true, $expected, array());
}
- private function stripPasswords($array){
+ private function stripPasswords($array)
+ {
foreach ($array as $user => $data) {
unset($array[$user]['pass']);
}
return $array;
}
- private function countPasswords($array){
+ private function countPasswords($array)
+ {
$count = 0;
foreach ($array as $user => $data) {
if (!empty($data['pass'])) {
@@ -166,6 +179,4 @@ importiso8859,"F'.chr(0xF8).'rd Prefect",ford@example.com,user
}
return $count;
}
-
}
-
diff --git a/lib/plugins/usermanager/lang/cs/lang.php b/lib/plugins/usermanager/lang/cs/lang.php
index 3ed18006a..326ae7edf 100644
--- a/lib/plugins/usermanager/lang/cs/lang.php
+++ b/lib/plugins/usermanager/lang/cs/lang.php
@@ -3,6 +3,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Petr Kajzar <petr.kajzar@lf1.cuni.cz>
* @author Tomas Valenta <t.valenta@sh.cvut.cz>
* @author Zbynek Krivka <zbynek.krivka@seznam.cz>
* @author Bohumir Zamecnik <bohumir@zamecnik.org>
@@ -75,7 +76,7 @@ $lang['import_error_upload'] = 'Import selhal. CSV soubor nemohl být nahrán
$lang['import_error_readfail'] = 'Import selhal. Nelze Äíst nahraný soubor.';
$lang['import_error_create'] = 'Nelze vytvořit uživatele';
$lang['import_notify_fail'] = 'Importovanému uživateli %s s e-mailem %s nemohlo být zasláno upozornění.';
-$lang['import_downloadfailures'] = 'Stáhnout chyby pro nápravu jako CVS';
+$lang['import_downloadfailures'] = 'Stáhnout chyby pro nápravu jako CSV';
$lang['addUser_error_missing_pass'] = 'BuÄ prosím nastavte heslo nebo aktivujte upozorňování uživatel aby fungovalo vytváření hesel.';
$lang['addUser_error_pass_not_identical'] = 'Zadaná hesla nebyla shodná.';
$lang['addUser_error_modPass_disabled'] = 'Změna hesel je momentálně zakázána.';
diff --git a/lib/plugins/usermanager/lang/fi/lang.php b/lib/plugins/usermanager/lang/fi/lang.php
index dba67fb61..d376c8100 100644
--- a/lib/plugins/usermanager/lang/fi/lang.php
+++ b/lib/plugins/usermanager/lang/fi/lang.php
@@ -2,9 +2,8 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
- * @author otto@valjakko.net
- * @author Otto Vainio <otto@valjakko.net>
+ *
+ * @author otto <otto@valjakko.net>
* @author Teemu Mattila <ghcsystems@gmail.com>
* @author Sami Olmari <sami@olmari.fi>
* @author Jussi Takala <jussi.takala@live.fi>
diff --git a/lib/plugins/usermanager/lang/id/lang.php b/lib/plugins/usermanager/lang/id/lang.php
index 425b2ff59..0fa847a94 100644
--- a/lib/plugins/usermanager/lang/id/lang.php
+++ b/lib/plugins/usermanager/lang/id/lang.php
@@ -2,7 +2,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
- *
+ *
* @author Irwan Butar Butar <irwansah.putra@gmail.com>
* @author Yustinus Waruwu <juswaruwu@gmail.com>
*/
diff --git a/lib/plugins/usermanager/lang/pt/lang.php b/lib/plugins/usermanager/lang/pt/lang.php
index 86bbe9de5..0af594f6c 100644
--- a/lib/plugins/usermanager/lang/pt/lang.php
+++ b/lib/plugins/usermanager/lang/pt/lang.php
@@ -3,8 +3,8 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Schopf <pschopf@gmail.com>
* @author Mario AlexandTeixeira dos Santos <masterofclan@gmail.com>
- * @author Paulo Ricardo Schopf <pschopf@gmail.com>
* @author Maykon Oliveira <maykonoliveira850@gmail.com>
* @author José Vieira <jmsv63@gmail.com>
* @author José Monteiro <Jose.Monteiro@DoWeDo-IT.com>
diff --git a/lib/plugins/usermanager/lang/sk/lang.php b/lib/plugins/usermanager/lang/sk/lang.php
index 96f8fb60e..d244408a7 100644
--- a/lib/plugins/usermanager/lang/sk/lang.php
+++ b/lib/plugins/usermanager/lang/sk/lang.php
@@ -3,6 +3,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Peter Mydliar <peto.mydliar@gmail.com>
* @author Martin Michalek <michalek.dev@gmail.com>
* @author Ondrej Végh <ov@vsieti.sk>
* @author Michal Mesko <michal.mesko@gmail.com>
@@ -67,6 +68,7 @@ $lang['import_error_readfail'] = 'Import neúspeÅ¡ný. Nie je možné preÄítaÅ
$lang['import_error_create'] = 'Nie je možné vytvoriť pouzívateľa';
$lang['import_notify_fail'] = 'Správa nemohla byť zaslaná importovanému používatelovi, %s s emailom %s.';
$lang['import_downloadfailures'] = 'StiahnuÅ¥ chyby vo formáte CSV za úÄelom opravy';
+$lang['addUser_error_pass_not_identical'] = 'Zadané heslo nie je identické.';
$lang['addUser_error_modPass_disabled'] = 'Zmena hesla nie je momentálne povolená';
$lang['addUser_error_name_missing'] = 'Prosím zadajte meno nového používateľa.';
$lang['addUser_error_modName_disabled'] = 'Zmena mena nie je momentálne povolená.';
diff --git a/lib/plugins/usermanager/script.js b/lib/plugins/usermanager/script.js
index de013242b..3b7ad0964 100644
--- a/lib/plugins/usermanager/script.js
+++ b/lib/plugins/usermanager/script.js
@@ -2,7 +2,7 @@
* Add JavaScript confirmation to the User Delete button
*/
jQuery(function(){
- jQuery('#usrmgr__del').click(function(){
+ jQuery('#usrmgr__del').on('click', function(){
return confirm(LANG.del_confirm);
});
});
diff --git a/lib/scripts/behaviour.js b/lib/scripts/behaviour.js
index 18308d68a..f9aad3d02 100644
--- a/lib/scripts/behaviour.js
+++ b/lib/scripts/behaviour.js
@@ -85,14 +85,14 @@ var dw_behaviour = {
* Looks for an element with the ID focus__this at sets focus to it
*/
focusMarker: function(){
- jQuery('#focus__this').focus();
+ jQuery('#focus__this').trigger('focus');
},
/**
* Remove all search highlighting when clicking on a highlighted term
*/
removeHighlightOnClick: function(){
- jQuery('span.search_hit').click(
+ jQuery('span.search_hit').on('click',
function(e){
jQuery(e.target).removeClass('search_hit', 1000);
}
@@ -110,7 +110,7 @@ var dw_behaviour = {
*/
quickSelect: function(){
jQuery('select.quickselect')
- .change(function(e){ e.target.form.submit(); })
+ .on('change', function(e){ e.target.form.submit(); })
.closest('form').find(':button').not('.show').hide();
},
@@ -120,7 +120,7 @@ var dw_behaviour = {
* @author Michael Klier <chi@chimeric.de>
*/
checkWindowsShares: function() {
- if(!LANG.nosmblinks || navigator.userAgent.match(/(Trident|MSIE)/)) {
+ if(!LANG.nosmblinks || navigator.userAgent.match(/(Trident|MSIE|Edge)/)) {
// No warning requested or none necessary
return;
}
@@ -146,7 +146,7 @@ var dw_behaviour = {
$digest = $form.find("input[name='sub_style'][value='digest']");
$form.find("input[name='sub_target']")
- .click(
+ .on('click',
function () {
var $this = jQuery(this), show_list;
if (!$this.prop('checked')) {
@@ -161,7 +161,7 @@ var dw_behaviour = {
}
)
.filter(':checked')
- .click();
+ .trigger('click');
},
/**
@@ -177,15 +177,15 @@ var dw_behaviour = {
var $button = jQuery('button', $revisions);
if($checked.length < 2) {
- $all.removeAttr('disabled');
- $button.attr('disabled', true);
+ $all.prop('disabled', false);
+ $button.prop('disabled', true);
} else {
- $all.attr('disabled', true);
- $button.removeAttr('disabled');
+ $all.prop('disabled', true);
+ $button.prop('disabled', false);
$checked.each(function(i) {
- jQuery(this).removeAttr('disabled');
+ jQuery(this).prop('disabled', false);
if(i>1) {
- jQuery(this).attr('checked', false);
+ jQuery(this).prop('checked', false);
}
});
}
diff --git a/lib/scripts/edit.js b/lib/scripts/edit.js
index 87490d9eb..f53a6d4ae 100644
--- a/lib/scripts/edit.js
+++ b/lib/scripts/edit.js
@@ -238,7 +238,7 @@ jQuery(function () {
sel.start = 0;
sel.end = 0;
DWsetSelection(sel);
- $edit_text.focus();
+ $edit_text.trigger('focus');
doku_edit_text_content = $edit_text.val();
}
@@ -260,13 +260,13 @@ jQuery(function () {
window.onunload = deleteDraft;
// reset change memory var on submit
- jQuery('#edbtn__save').click(
+ jQuery('#edbtn__save').on('click',
function() {
window.onbeforeunload = '';
textChanged = false;
}
);
- jQuery('#edbtn__preview').click(
+ jQuery('#edbtn__preview').on('click',
function() {
window.onbeforeunload = '';
textChanged = false;
@@ -275,8 +275,7 @@ jQuery(function () {
);
var $summary = jQuery('#edit__summary');
- $summary.change(doku_summaryCheck);
- $summary.keyup(doku_summaryCheck);
+ $summary.on('change keyup', doku_summaryCheck);
if (textChanged) doku_summaryCheck();
});
diff --git a/lib/scripts/editor.js b/lib/scripts/editor.js
index c9cb312b0..0df556172 100644
--- a/lib/scripts/editor.js
+++ b/lib/scripts/editor.js
@@ -60,7 +60,7 @@ var dw_editor = {
jQuery(document.createElement('img'))
.attr('src', DOKU_BASE+'lib/images/' + img[0] + '.gif')
.attr('alt', '')
- .click(img[1])
+ .on('click', img[1])
.appendTo($ctl);
});
},
@@ -140,7 +140,7 @@ var dw_editor = {
if((e.keyCode == 13 || e.keyCode == 10) && e.ctrlKey) { // Ctrl-Enter (With Chrome workaround)
// Submit current edit
- jQuery('#edbtn__save').click();
+ jQuery('#edbtn__save').trigger('click');
e.preventDefault(); // prevent enter key
return false;
}else if(e.keyCode == 13){ // Enter
diff --git a/lib/scripts/fileuploaderextended.js b/lib/scripts/fileuploaderextended.js
index ba2aa3ea5..b7f9f5f30 100644
--- a/lib/scripts/fileuploaderextended.js
+++ b/lib/scripts/fileuploaderextended.js
@@ -149,7 +149,7 @@ qq.extend(qq.FileUploaderExtended.prototype, {
self._handler._options.onUpload();
jQuery(".qq-upload-name-input").each(function (i) {
- jQuery(this).attr('disabled', 'disabled');
+ jQuery(this).prop('disabled', true);
});
});
},
diff --git a/lib/scripts/linkwiz.js b/lib/scripts/linkwiz.js
index da1e072a1..d82ca9681 100644
--- a/lib/scripts/linkwiz.js
+++ b/lib/scripts/linkwiz.js
@@ -57,7 +57,7 @@ var dw_linkwiz = {
}
// attach event handlers
- jQuery('#link__wiz .ui-dialog-titlebar-close').click(dw_linkwiz.hide);
+ jQuery('#link__wiz .ui-dialog-titlebar-close').on('click', dw_linkwiz.hide);
dw_linkwiz.$entry.keyup(dw_linkwiz.onEntry);
jQuery(dw_linkwiz.result).on('click', 'a', dw_linkwiz.onResultClick);
},
diff --git a/lib/scripts/media.js b/lib/scripts/media.js
index e61cedeee..6f36d3b2e 100644
--- a/lib/scripts/media.js
+++ b/lib/scripts/media.js
@@ -107,7 +107,7 @@ var dw_mediamanager = {
dw_mediamanager.update_resizable();
dw_mediamanager.layout_width = $page.width();
- jQuery(window).resize(dw_mediamanager.window_resize);
+ jQuery(window).on('resize', dw_mediamanager.window_resize);
},
init_options: function () {
@@ -194,7 +194,7 @@ var dw_mediamanager = {
.addClass('button')
.attr('id', "media__" + opt.id + "btn" + (i + 1))
.attr('title', LANG['media' + text])
- .click(bind(dw_mediamanager.setOpt, opt.id));
+ .on('click', bind(dw_mediamanager.setOpt, opt.id));
$img = jQuery(document.createElement('img'))
.attr('src', DOKU_BASE + 'lib/images/media_' + opt.id + '_' + text + '.png');
@@ -735,7 +735,7 @@ var dw_mediamanager = {
// remove old callback from the insert button and set the new one.
var $sendbtn = jQuery('#media__sendbtn');
- $sendbtn.off().click(bind(dw_mediamanager.insert, id));
+ $sendbtn.off().on('click', bind(dw_mediamanager.insert, id));
dw_mediamanager.unforbid('ext');
if (ext === '.swf') {
@@ -801,7 +801,7 @@ var dw_mediamanager = {
$box = jQuery(document.createElement('input'))
.attr('type', 'checkbox')
.attr('id', 'media__' + opt[0])
- .click(bind(dw_mediamanager.toggleOption, opt[0]));
+ .on('click', bind(dw_mediamanager.toggleOption, opt[0]));
if (DokuCookie.getValue(opt[0])) {
$box.prop('checked', true);
diff --git a/lib/scripts/page.js b/lib/scripts/page.js
index 2332af4de..284c2038b 100644
--- a/lib/scripts/page.js
+++ b/lib/scripts/page.js
@@ -9,7 +9,7 @@ dw_page = {
*/
init: function(){
dw_page.sectionHighlight();
- jQuery('a.fn_top').mouseover(dw_page.footnoteDisplay);
+ jQuery('a.fn_top').on('mouseover', dw_page.footnoteDisplay);
dw_page.makeToggle('#dw__toc h3','#dw__toc > div');
},
@@ -20,7 +20,7 @@ dw_page = {
*/
sectionHighlight: function() {
jQuery('form.btn_secedit')
- .mouseover(function(){
+ .on('mouseover', function(){
var $tgt = jQuery(this).parent(),
nr = $tgt.attr('class').match(/(\s+|^)editbutton_(\d+)(\s+|$)/)[2],
$highlight = jQuery(), // holder for elements in the section to be highlighted
@@ -36,7 +36,7 @@ dw_page = {
// and move the elements to be highlighted inside the section highlight wrapper
$highlight.detach().appendTo($highlightWrap);
})
- .mouseout(function(){
+ .on('mouseout', function(){
// find the section highlight wrapper...
var $highlightWrap = jQuery('.section_highlight');
// ...move its children in front of it (as siblings)...
@@ -63,7 +63,7 @@ dw_page = {
.attr('id', popup_id)
.addClass('insitu-footnote JSpopup')
.attr('aria-hidden', 'true')
- .mouseleave(function () {jQuery(this).hide().attr('aria-hidden', 'true');})
+ .on('mouseleave', function () {jQuery(this).hide().attr('aria-hidden', 'true');})
.attr('role', 'tooltip');
jQuery('.dokuwiki:first').append($fndiv);
}
@@ -179,7 +179,7 @@ dw_page = {
// click function
$handle.css('cursor','pointer')
- .click($handle[0].setState)
+ .on('click', $handle[0].setState)
.prepend($clicky);
// initial state
diff --git a/lib/scripts/qsearch.js b/lib/scripts/qsearch.js
index 18e51506c..f95515b93 100644
--- a/lib/scripts/qsearch.js
+++ b/lib/scripts/qsearch.js
@@ -57,7 +57,7 @@ jQuery.fn.dw_qsearch = function (overrides) {
);
};
- dw_qsearch.$inObj.keyup(
+ dw_qsearch.$inObj.on('keyup',
function () {
if (dw_qsearch.timer) {
window.clearTimeout(dw_qsearch.timer);
@@ -68,7 +68,7 @@ jQuery.fn.dw_qsearch = function (overrides) {
);
// attach eventhandler to output field
- dw_qsearch.$outObj.click(dw_qsearch.clear_results);
+ dw_qsearch.$outObj.on('click', dw_qsearch.clear_results);
},
/**
diff --git a/lib/scripts/script.js b/lib/scripts/script.js
index 97edef0b7..0e03dcf37 100644
--- a/lib/scripts/script.js
+++ b/lib/scripts/script.js
@@ -26,5 +26,5 @@ function closePopups(){
}
jQuery(function () {
- jQuery(document).click(closePopups);
+ jQuery(document).on('click', closePopups);
});
diff --git a/lib/scripts/search.js b/lib/scripts/search.js
index 540165255..111dca99a 100644
--- a/lib/scripts/search.js
+++ b/lib/scripts/search.js
@@ -30,7 +30,7 @@ jQuery(function () {
});
if (DokuCookie.getValue('sa') === 'on') {
- $toggleAssistanceButton.click();
+ $toggleAssistanceButton.trigger('click');
}
$searchForm.find('.advancedOptions .toggle div.current').on('click', function () {
diff --git a/lib/tpl/dokuwiki/lang/sk/lang.php b/lib/tpl/dokuwiki/lang/sk/lang.php
index 72a070544..5b27ba213 100644
--- a/lib/tpl/dokuwiki/lang/sk/lang.php
+++ b/lib/tpl/dokuwiki/lang/sk/lang.php
@@ -3,6 +3,7 @@
/**
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
*
+ * @author Peter Mydliar <peto.mydliar@gmail.com>
* @author Martin Michalek <michalek.dev@gmail.com>
*/
$lang['__background_site__'] = 'Farba základného pozadia (za oknom s obsahom)';
@@ -13,3 +14,4 @@ $lang['__site_width__'] = 'Šírka stránky (môže byť ľubovoľná jed
$lang['__sidebar_width__'] = 'Šírka boÄného panela (môže byÅ¥ ľubovoľná jednotka dĺžky: %, px, em, ...}';
$lang['__tablet_width__'] = 'Nižšia šírka stránky prepne zobrazenie do režimu tabletu';
$lang['__phone_width__'] = 'Nižšia šírka stránky prepne zobrazenie do režimu telefónu';
+$lang['__theme_color__'] = 'Farba témy pre webovú aplikáciu';
diff --git a/lib/tpl/dokuwiki/main.php b/lib/tpl/dokuwiki/main.php
index 2d2151f9c..67b6e61de 100644
--- a/lib/tpl/dokuwiki/main.php
+++ b/lib/tpl/dokuwiki/main.php
@@ -9,7 +9,6 @@
*/
if (!defined('DOKU_INC')) die(); /* must be run from within DokuWiki */
-header('X-UA-Compatible: IE=edge,chrome=1');
$hasSidebar = page_findnearest($conf['sidebar']);
$showSidebar = $hasSidebar && ($ACT=='show');
diff --git a/lib/tpl/dokuwiki/script.js b/lib/tpl/dokuwiki/script.js
index 5a68e8b9c..88dae9023 100644
--- a/lib/tpl/dokuwiki/script.js
+++ b/lib/tpl/dokuwiki/script.js
@@ -71,10 +71,15 @@ jQuery(function(){
);
// increase sidebar length to match content (desktop mode only)
- var $sidebar = jQuery('.desktop #dokuwiki__aside');
- if($sidebar.length) {
+ var sidebar_height = jQuery('.desktop #dokuwiki__aside').height();
+ var pagetool_height = jQuery('.desktop #dokuwiki__pagetools ul:first').height();
+ // pagetools div has no height; ul has a height
+ var content_min = Math.max(sidebar_height || 0, pagetool_height || 0);
+
+ var content_height = jQuery('#dokuwiki__content div.page').height();
+ if(content_min && content_min > content_height) {
var $content = jQuery('#dokuwiki__content div.page');
- $content.css('min-height', $sidebar.height());
+ $content.css('min-height', content_min);
}
// blur when clicked
diff --git a/lib/tpl/index.php b/lib/tpl/index.php
index a3e9a8849..4d48d5127 100644
--- a/lib/tpl/index.php
+++ b/lib/tpl/index.php
@@ -18,7 +18,7 @@ require_once(DOKU_INC.'inc/init.php');
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Template Replacements</title>
- <style type="text/css">
+ <style>
body {
background-color: #fff;
color: #000;
diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php
index 2c72175e7..fce8549f0 100644
--- a/vendor/composer/ClassLoader.php
+++ b/vendor/composer/ClassLoader.php
@@ -279,7 +279,7 @@ class ClassLoader
*/
public function setApcuPrefix($apcuPrefix)
{
- $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
+ $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
}
/**
@@ -377,11 +377,11 @@ class ClassLoader
$subPath = $class;
while (false !== $lastPos = strrpos($subPath, '\\')) {
$subPath = substr($subPath, 0, $lastPos);
- $search = $subPath.'\\';
+ $search = $subPath . '\\';
if (isset($this->prefixDirsPsr4[$search])) {
+ $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
foreach ($this->prefixDirsPsr4[$search] as $dir) {
- $length = $this->prefixLengthsPsr4[$first][$search];
- if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+ if (file_exists($file = $dir . $pathEnd)) {
return $file;
}
}
diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php
index 55787b617..403be68f0 100644
--- a/vendor/composer/autoload_files.php
+++ b/vendor/composer/autoload_files.php
@@ -6,6 +6,7 @@ $vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
+ 'fdc0e9724ddc47859c8bf0c1ea0a623a' => $vendorDir . '/openpsa/universalfeedcreator/lib/constants.php',
'5255c38a0faeba867671b61dfda6d864' => $vendorDir . '/paragonie/random_compat/lib/random.php',
'decc78cc4436b1292c6c0d151b19445c' => $vendorDir . '/phpseclib/phpseclib/phpseclib/bootstrap.php',
);
diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php
index 3f7b01e01..db89c9eb9 100644
--- a/vendor/composer/autoload_static.php
+++ b/vendor/composer/autoload_static.php
@@ -7,6 +7,7 @@ namespace Composer\Autoload;
class ComposerStaticInita19a915ee98347a0c787119619d2ff9b
{
public static $files = array (
+ 'fdc0e9724ddc47859c8bf0c1ea0a623a' => __DIR__ . '/..' . '/openpsa/universalfeedcreator/lib/constants.php',
'5255c38a0faeba867671b61dfda6d864' => __DIR__ . '/..' . '/paragonie/random_compat/lib/random.php',
'decc78cc4436b1292c6c0d151b19445c' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/bootstrap.php',
);
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 23ae5c1e0..63d6f11a7 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -1,158 +1,108 @@
[
{
- "name": "geshi/geshi",
- "version": "v1.0.9.0",
- "version_normalized": "1.0.9.0",
+ "name": "aziraphale/email-address-validator",
+ "version": "2.0.1",
+ "version_normalized": "2.0.1.0",
"source": {
"type": "git",
- "url": "https://github.com/GeSHi/geshi-1.0.git",
- "reference": "5a7b461338d322d941986a656d4d1651452e73dd"
+ "url": "https://github.com/aziraphale/email-address-validator.git",
+ "reference": "fa25bc22c1c0b6491657c91473fae3e40719a650"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/GeSHi/geshi-1.0/zipball/5a7b461338d322d941986a656d4d1651452e73dd",
- "reference": "5a7b461338d322d941986a656d4d1651452e73dd",
+ "url": "https://api.github.com/repos/aziraphale/email-address-validator/zipball/fa25bc22c1c0b6491657c91473fae3e40719a650",
+ "reference": "fa25bc22c1c0b6491657c91473fae3e40719a650",
"shasum": ""
},
"require-dev": {
"phpunit/phpunit": "^5.7"
},
- "time": "2017-05-05T05:51:25+00:00",
+ "time": "2017-05-22T14:05:57+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
- "classmap": [
- "src/geshi/",
- "src/geshi.php"
- ]
+ "psr-0": {
+ "EmailAddressValidator": ""
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "GPL-2.0+"
+ "MIT"
],
"authors": [
{
- "name": "Benny Baumann",
- "email": "BenBE@geshi.org",
- "homepage": "http://blog.benny-baumann.de/",
- "role": "Developer"
+ "name": "Dave Child",
+ "email": "dave@addedbytes.com"
+ },
+ {
+ "name": "Andrew Gillard",
+ "email": "andrew@lorddeath.net"
}
],
- "description": "Generic Syntax Highlighter",
- "homepage": "http://qbnz.com/highlighter/"
+ "description": "Fork of AddedBytes' PHP EmailAddressValidator script, now with Composer support!",
+ "homepage": "https://github.com/aziraphale/email-address-validator"
},
{
- "name": "openpsa/universalfeedcreator",
- "version": "v1.8.3",
- "version_normalized": "1.8.3.0",
+ "name": "geshi/geshi",
+ "version": "v1.0.9.1",
+ "version_normalized": "1.0.9.1",
"source": {
"type": "git",
- "url": "https://github.com/flack/UniversalFeedCreator.git",
- "reference": "6261e130446d8f787bbfd229a602fb11e6816a4e"
+ "url": "https://github.com/GeSHi/geshi-1.0.git",
+ "reference": "fd22ab78481bf90337862b590e6f7517863926b8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/flack/UniversalFeedCreator/zipball/6261e130446d8f787bbfd229a602fb11e6816a4e",
- "reference": "6261e130446d8f787bbfd229a602fb11e6816a4e",
+ "url": "https://api.github.com/repos/GeSHi/geshi-1.0/zipball/fd22ab78481bf90337862b590e6f7517863926b8",
+ "reference": "fd22ab78481bf90337862b590e6f7517863926b8",
"shasum": ""
},
- "require": {
- "php": ">=5.0"
- },
"require-dev": {
- "phpunit/phpunit": "*"
+ "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.2"
},
- "time": "2017-05-18T08:28:48+00:00",
+ "time": "2019-10-20T20:54:46+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
"classmap": [
- "lib"
+ "src/geshi/",
+ "src/geshi.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "LGPL"
- ],
- "authors": [
- {
- "name": "Andreas Flack",
- "email": "flack@contentcontrol-berlin.de",
- "homepage": "http://www.contentcontrol-berlin.de/"
- }
- ],
- "description": "RSS and Atom feed generator by Kai Blankenhorn",
- "keywords": [
- "atom",
- "georss",
- "gpx",
- "opml",
- "pie",
- "rss"
- ]
- },
- {
- "name": "aziraphale/email-address-validator",
- "version": "2.0.1",
- "version_normalized": "2.0.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/aziraphale/email-address-validator.git",
- "reference": "fa25bc22c1c0b6491657c91473fae3e40719a650"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/aziraphale/email-address-validator/zipball/fa25bc22c1c0b6491657c91473fae3e40719a650",
- "reference": "fa25bc22c1c0b6491657c91473fae3e40719a650",
- "shasum": ""
- },
- "require-dev": {
- "phpunit/phpunit": "^5.7"
- },
- "time": "2017-05-22T14:05:57+00:00",
- "type": "library",
- "installation-source": "dist",
- "autoload": {
- "psr-0": {
- "EmailAddressValidator": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
+ "GPL-2.0+"
],
"authors": [
{
- "name": "Dave Child",
- "email": "dave@addedbytes.com"
- },
- {
- "name": "Andrew Gillard",
- "email": "andrew@lorddeath.net"
+ "name": "Benny Baumann",
+ "email": "BenBE@geshi.org",
+ "homepage": "http://blog.benny-baumann.de/",
+ "role": "Developer"
}
],
- "description": "Fork of AddedBytes' PHP EmailAddressValidator script, now with Composer support!",
- "homepage": "https://github.com/aziraphale/email-address-validator"
+ "description": "Generic Syntax Highlighter",
+ "homepage": "http://qbnz.com/highlighter/"
},
{
"name": "marcusschwarz/lesserphp",
- "version": "v0.5.1",
- "version_normalized": "0.5.1.0",
+ "version": "v0.5.2",
+ "version_normalized": "0.5.2.0",
"source": {
"type": "git",
"url": "https://github.com/MarcusSchwarz/lesserphp.git",
- "reference": "e9e3d53980c0e486b07c75e12f2bae5e10bdee44"
+ "reference": "b02ee973ee1fff3237f7feaf44885596fb5ee323"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/MarcusSchwarz/lesserphp/zipball/e9e3d53980c0e486b07c75e12f2bae5e10bdee44",
- "reference": "e9e3d53980c0e486b07c75e12f2bae5e10bdee44",
+ "url": "https://api.github.com/repos/MarcusSchwarz/lesserphp/zipball/b02ee973ee1fff3237f7feaf44885596fb5ee323",
+ "reference": "b02ee973ee1fff3237f7feaf44885596fb5ee323",
"shasum": ""
},
"require-dev": {
"phpunit/phpunit": "~4.3"
},
- "time": "2016-09-30T11:13:18+00:00",
+ "time": "2018-05-28T12:54:01+00:00",
"bin": [
"plessc"
],
@@ -189,148 +139,89 @@
"homepage": "http://leafo.net/lessphp/"
},
{
- "name": "paragonie/random_compat",
- "version": "v2.0.12",
- "version_normalized": "2.0.12.0",
+ "name": "openpsa/universalfeedcreator",
+ "version": "v1.8.3.2",
+ "version_normalized": "1.8.3.2",
"source": {
"type": "git",
- "url": "https://github.com/paragonie/random_compat.git",
- "reference": "258c89a6b97de7dfaf5b8c7607d0478e236b04fb"
+ "url": "https://github.com/flack/UniversalFeedCreator.git",
+ "reference": "906745196469b13ceefa6523ef04851a78ad10f4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/paragonie/random_compat/zipball/258c89a6b97de7dfaf5b8c7607d0478e236b04fb",
- "reference": "258c89a6b97de7dfaf5b8c7607d0478e236b04fb",
+ "url": "https://api.github.com/repos/flack/UniversalFeedCreator/zipball/906745196469b13ceefa6523ef04851a78ad10f4",
+ "reference": "906745196469b13ceefa6523ef04851a78ad10f4",
"shasum": ""
},
"require": {
- "php": ">=5.2.0"
+ "php": ">=5.0"
},
"require-dev": {
- "phpunit/phpunit": "4.*|5.*"
- },
- "suggest": {
- "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
+ "phpunit/phpunit": "*"
},
- "time": "2018-04-04T21:24:14+00:00",
+ "time": "2019-09-01T17:49:46+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
+ "classmap": [
+ "lib"
+ ],
"files": [
- "lib/random.php"
+ "lib/constants.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Paragon Initiative Enterprises",
- "email": "security@paragonie.com",
- "homepage": "https://paragonie.com"
- }
- ],
- "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
- "keywords": [
- "csprng",
- "pseudorandom",
- "random"
- ]
- },
- {
- "name": "simplepie/simplepie",
- "version": "1.5.1",
- "version_normalized": "1.5.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/simplepie/simplepie.git",
- "reference": "db9fff27b6d49eed3d4047cd3211ec8dba2f5d6e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/simplepie/simplepie/zipball/db9fff27b6d49eed3d4047cd3211ec8dba2f5d6e",
- "reference": "db9fff27b6d49eed3d4047cd3211ec8dba2f5d6e",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "require-dev": {
- "phpunit/phpunit": "~4 || ~5"
- },
- "suggest": {
- "mf2/mf2": "Microformat module that allows for parsing HTML for microformats"
- },
- "time": "2017-11-12T02:03:34+00:00",
- "type": "library",
- "installation-source": "dist",
- "autoload": {
- "psr-0": {
- "SimplePie": "library"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
+ "LGPL-2.1-or-later"
],
"authors": [
{
- "name": "Ryan Parman",
- "homepage": "http://ryanparman.com/",
- "role": "Creator, alumnus developer"
- },
- {
- "name": "Geoffrey Sneddon",
- "homepage": "http://gsnedders.com/",
- "role": "Alumnus developer"
- },
- {
- "name": "Ryan McCue",
- "email": "me@ryanmccue.info",
- "homepage": "http://ryanmccue.info/",
- "role": "Developer"
+ "name": "Andreas Flack",
+ "email": "flack@contentcontrol-berlin.de",
+ "homepage": "http://www.contentcontrol-berlin.de/"
}
],
- "description": "A simple Atom/RSS parsing library for PHP",
- "homepage": "http://simplepie.org/",
+ "description": "RSS and Atom feed generator by Kai Blankenhorn",
"keywords": [
"atom",
- "feeds",
+ "georss",
+ "gpx",
+ "opml",
+ "pie",
"rss"
]
},
{
- "name": "splitbrain/php-cli",
- "version": "1.1.2",
- "version_normalized": "1.1.2.0",
+ "name": "paragonie/random_compat",
+ "version": "v2.0.18",
+ "version_normalized": "2.0.18.0",
"source": {
"type": "git",
- "url": "https://github.com/splitbrain/php-cli.git",
- "reference": "1d6f0bf9eccbfd79d1f4d185ef27573601185c23"
+ "url": "https://github.com/paragonie/random_compat.git",
+ "reference": "0a58ef6e3146256cc3dc7cc393927bcc7d1b72db"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/splitbrain/php-cli/zipball/1d6f0bf9eccbfd79d1f4d185ef27573601185c23",
- "reference": "1d6f0bf9eccbfd79d1f4d185ef27573601185c23",
+ "url": "https://api.github.com/repos/paragonie/random_compat/zipball/0a58ef6e3146256cc3dc7cc393927bcc7d1b72db",
+ "reference": "0a58ef6e3146256cc3dc7cc393927bcc7d1b72db",
"shasum": ""
},
"require": {
- "php": ">=5.3.0"
+ "php": ">=5.2.0"
},
"require-dev": {
- "phpunit/phpunit": "4.5.*"
+ "phpunit/phpunit": "4.*|5.*"
},
"suggest": {
- "psr/log": "Allows you to make the CLI available as PSR-3 logger"
+ "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
},
- "time": "2018-02-02T08:46:12+00:00",
+ "time": "2019-01-03T20:59:08+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
- "psr-4": {
- "splitbrain\\phpcli\\": "src"
- }
+ "files": [
+ "lib/random.php"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -338,34 +229,32 @@
],
"authors": [
{
- "name": "Andreas Gohr",
- "email": "andi@splitbrain.org"
+ "name": "Paragon Initiative Enterprises",
+ "email": "security@paragonie.com",
+ "homepage": "https://paragonie.com"
}
],
- "description": "Easy command line scripts for PHP with opt parsing and color output. No dependencies",
+ "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
"keywords": [
- "argparse",
- "cli",
- "command line",
- "console",
- "getopt",
- "optparse",
- "terminal"
+ "csprng",
+ "polyfill",
+ "pseudorandom",
+ "random"
]
},
{
"name": "phpseclib/phpseclib",
- "version": "2.0.11",
- "version_normalized": "2.0.11.0",
+ "version": "2.0.23",
+ "version_normalized": "2.0.23.0",
"source": {
"type": "git",
"url": "https://github.com/phpseclib/phpseclib.git",
- "reference": "7053f06f91b3de78e143d430e55a8f7889efc08b"
+ "reference": "c78eb5058d5bb1a183133c36d4ba5b6675dfa099"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/7053f06f91b3de78e143d430e55a8f7889efc08b",
- "reference": "7053f06f91b3de78e143d430e55a8f7889efc08b",
+ "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/c78eb5058d5bb1a183133c36d4ba5b6675dfa099",
+ "reference": "c78eb5058d5bb1a183133c36d4ba5b6675dfa099",
"shasum": ""
},
"require": {
@@ -383,7 +272,7 @@
"ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.",
"ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations."
},
- "time": "2018-04-15T16:55:05+00:00",
+ "time": "2019-09-17T03:41:22+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -448,18 +337,87 @@
]
},
{
+ "name": "simplepie/simplepie",
+ "version": "1.5.3",
+ "version_normalized": "1.5.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/simplepie/simplepie.git",
+ "reference": "173663382a9346acd53df60c7ffb20689c9cf1f6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/simplepie/simplepie/zipball/173663382a9346acd53df60c7ffb20689c9cf1f6",
+ "reference": "173663382a9346acd53df60c7ffb20689c9cf1f6",
+ "shasum": ""
+ },
+ "require": {
+ "ext-pcre": "*",
+ "ext-xml": "*",
+ "ext-xmlreader": "*",
+ "php": ">=5.6.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~5.4.3 || ~6.5"
+ },
+ "suggest": {
+ "ext-curl": "",
+ "ext-iconv": "",
+ "ext-intl": "",
+ "ext-mbstring": "",
+ "mf2/mf2": "Microformat module that allows for parsing HTML for microformats"
+ },
+ "time": "2019-09-22T23:21:30+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-0": {
+ "SimplePie": "library"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Ryan Parman",
+ "homepage": "http://ryanparman.com/",
+ "role": "Creator, alumnus developer"
+ },
+ {
+ "name": "Geoffrey Sneddon",
+ "homepage": "http://gsnedders.com/",
+ "role": "Alumnus developer"
+ },
+ {
+ "name": "Ryan McCue",
+ "email": "me@ryanmccue.info",
+ "homepage": "http://ryanmccue.info/",
+ "role": "Developer"
+ }
+ ],
+ "description": "A simple Atom/RSS parsing library for PHP",
+ "homepage": "http://simplepie.org/",
+ "keywords": [
+ "atom",
+ "feeds",
+ "rss"
+ ]
+ },
+ {
"name": "splitbrain/php-archive",
- "version": "1.0.10",
- "version_normalized": "1.0.10.0",
+ "version": "1.1.1",
+ "version_normalized": "1.1.1.0",
"source": {
"type": "git",
"url": "https://github.com/splitbrain/php-archive.git",
- "reference": "a46f3aaeb9f123fdb7db4e192b0600feebf7f773"
+ "reference": "10d89013572ba1f4d4ad7fcb74860242f4c3860b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/splitbrain/php-archive/zipball/a46f3aaeb9f123fdb7db4e192b0600feebf7f773",
- "reference": "a46f3aaeb9f123fdb7db4e192b0600feebf7f773",
+ "url": "https://api.github.com/repos/splitbrain/php-archive/zipball/10d89013572ba1f4d4ad7fcb74860242f4c3860b",
+ "reference": "10d89013572ba1f4d4ad7fcb74860242f4c3860b",
"shasum": ""
},
"require": {
@@ -475,7 +433,7 @@
"ext-iconv": "Used for proper filename encode handling",
"ext-mbstring": "Can be used alternatively for handling filename encoding"
},
- "time": "2018-05-01T08:03:56+00:00",
+ "time": "2018-09-09T12:13:53+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -502,5 +460,58 @@
"unzip",
"zip"
]
+ },
+ {
+ "name": "splitbrain/php-cli",
+ "version": "1.1.5",
+ "version_normalized": "1.1.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/splitbrain/php-cli.git",
+ "reference": "e982d40d074ab9f2669c3c0a2e40559b098cd894"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/splitbrain/php-cli/zipball/e982d40d074ab9f2669c3c0a2e40559b098cd894",
+ "reference": "e982d40d074ab9f2669c3c0a2e40559b098cd894",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.5.*"
+ },
+ "suggest": {
+ "psr/log": "Allows you to make the CLI available as PSR-3 logger"
+ },
+ "time": "2018-09-29T07:51:34+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "splitbrain\\phpcli\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Andreas Gohr",
+ "email": "andi@splitbrain.org"
+ }
+ ],
+ "description": "Easy command line scripts for PHP with opt parsing and color output. No dependencies",
+ "keywords": [
+ "argparse",
+ "cli",
+ "command line",
+ "console",
+ "getopt",
+ "optparse",
+ "terminal"
+ ]
}
]
diff --git a/vendor/geshi/geshi/.gitignore b/vendor/geshi/geshi/.gitignore
index 44e52f21a..75fda85d5 100644
--- a/vendor/geshi/geshi/.gitignore
+++ b/vendor/geshi/geshi/.gitignore
@@ -1,3 +1,5 @@
-dist
-build.properties
+/build.properties
+/composer.lock
+/dist/
+/vendor/
diff --git a/vendor/geshi/geshi/CHANGELOG b/vendor/geshi/geshi/CHANGELOG
index 514e1a895..93fa76cdf 100644
--- a/vendor/geshi/geshi/CHANGELOG
+++ b/vendor/geshi/geshi/CHANGELOG
@@ -12,6 +12,26 @@ modified by me for consistency/bug fixing.
Please send any bug reports to BenBE@omorphia.de, or use the bug report tracker
at sourceforge (http://sourceforge.net/tracker/?group_id=114997&atid=670231)
+Version 1.0.9.1
+ - Added language files
+ * OpenSSH config (Kevin Ernst)
+ * roff (Artur Iwicki)
+ * Wolfram (Mysterious Light)
+ - Some minor tweaks for RFC822 email support (BenBE)
+ - Introduce strip_language function (phy25)
+ - Recognize additional file extensions (RealityRipple)
+ - Code style update by avoiding create_function (cweiske)
+ - Backported CLI tool from GeSHi 1.1 branch (cweiske)
+ - Improvements to language files
+ * bash: Update list of keywords (apjanke)
+ * Haskell: Updated doc links and types from Prelude (Jeremy Singer)
+ * INI files: support single quotes (peterdd)
+ * Matlab: Add keywords and functions from recent Matlab releases (apjanke)
+ * MySQL: Some missing keywords (Abu3safeer)
+ * MySQL: Updated documentation links (splitbrain)
+ * R/S+: Fix broken linking of keywords (BenBE)
+ * SciLab: Fix broken linking of keywords (BenBE)
+ * SQL: Some missing keywords (peterdd)
Version 1.0.9.0
- Add public/protected method & property visibility.
THIS MAY BREAK YOUR CODE
diff --git a/vendor/geshi/geshi/README.md b/vendor/geshi/geshi/README.md
index 6f6756804..6c49bc17a 100644
--- a/vendor/geshi/geshi/README.md
+++ b/vendor/geshi/geshi/README.md
@@ -1,6 +1,6 @@
GeSHi - Generic Syntax Highlighter
==================================
-### Version 1.0.9.0
+### Version 1.0.9.1
Author: [Benny Baumann](http://blog.benny-baumann.de/), [Nigel McNie](http://nigel.mcnie.name/)
Email: <BenBE@geshi.org>, <nigel@geshi.org>
diff --git a/vendor/geshi/geshi/THANKS b/vendor/geshi/geshi/THANKS
index c52d7fd3b..1ed6e885d 100644
--- a/vendor/geshi/geshi/THANKS
+++ b/vendor/geshi/geshi/THANKS
@@ -187,6 +187,7 @@ PEOPE WHO MADE LANGUAGE FILES
- Octave Carnë Draug, Juan Pablo Carbajal
- OpenBSD Packet Filter David Berard
- OpenOffice.org BASIC Roberto Rossi
+- OpenSSH config Kevin Ernst
- Oracle 8 Guy Wicks
- Oracle 11i Simon Redhead
- Oxygene (Delphi Prism) Carlo Kok
@@ -227,6 +228,7 @@ PEOPE WHO MADE LANGUAGE FILES
- Reg SmokingRope
- Rexx Jon Wolfers
- Robots Christian Lescuyer
+- roff Artur Iwicki
- RPM Specification File Paul Grinberg
- Ruby Amit Gupta, Moises Deniz
- Rust Dave Hodder
@@ -272,6 +274,7 @@ PEOPE WHO MADE LANGUAGE FILES
- Whois \ RPSL format Benny Baumann
- Winbatch Craig Storey
- Windows Batch FraidZZ
+- Wolfram Mysterious Light
- X++ Simon Butcher
- XBasic José Gabriel Moya Yangüela
- Xojo Garry Pettet
diff --git a/vendor/geshi/geshi/build.xml b/vendor/geshi/geshi/build.xml
index d9bae0f33..198db1354 100644
--- a/vendor/geshi/geshi/build.xml
+++ b/vendor/geshi/geshi/build.xml
@@ -8,7 +8,7 @@
-->
<property file="build.properties" />
- <property name="version" value="1.0.9.0" />
+ <property name="version" value="1.0.9.1" />
<property name="stability" value="stable" />
<property name="zipfile" value="${phing.project.name}-${version}.zip" />
<property name="gzfile" value="${phing.project.name}-${version}.tar.gz" />
@@ -19,7 +19,7 @@
<property name="sffilepath" value="g/ge/geshi/" />
<property name="releasenotes" value="
-Version 1.0.9.0
+Version 1.0.9.1
" />
diff --git a/vendor/geshi/geshi/composer.json b/vendor/geshi/geshi/composer.json
index 95f844aed..1dd3f7eb5 100644
--- a/vendor/geshi/geshi/composer.json
+++ b/vendor/geshi/geshi/composer.json
@@ -20,6 +20,6 @@
"classmap": ["src/geshi/", "src/geshi.php"]
},
"require-dev": {
- "phpunit/phpunit": "^5.7"
+ "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.2"
}
}
diff --git a/vendor/geshi/geshi/src/geshi.php b/vendor/geshi/geshi/src/geshi.php
index c353299b3..cf5e16329 100644
--- a/vendor/geshi/geshi/src/geshi.php
+++ b/vendor/geshi/geshi/src/geshi.php
@@ -40,7 +40,7 @@
//
/** The version of this GeSHi file */
-define('GESHI_VERSION', '1.0.9.0');
+define('GESHI_VERSION', '1.0.9.1');
// Define the root directory for the GeSHi code tree
if (!defined('GESHI_ROOT')) {
@@ -628,6 +628,19 @@ class GeSHi {
}
/**
+ * Clean up the language name to prevent malicious code injection
+ *
+ * @param string $language The name of the language to strip
+ * @since 1.0.9.1
+ */
+ public function strip_language_name($language) {
+ $language = preg_replace('#[^a-zA-Z0-9\-_]#', '', $language);
+ $language = strtolower($language);
+
+ return $language;
+ }
+
+ /**
* Sets the language for this object
*
* @note since 1.0.8 this function won't reset language-settings by default anymore!
@@ -646,9 +659,7 @@ class GeSHi {
}
//Clean up the language name to prevent malicious code injection
- $language = preg_replace('#[^a-zA-Z0-9\-_]#', '', $language);
-
- $language = strtolower($language);
+ $language = $this->strip_language_name($language);
//Retreive the full filename
$file_name = $this->language_path . $language . '.php';
@@ -1472,7 +1483,7 @@ class GeSHi {
'haskell' => array('hs'),
'haxe' => array('hx'),
'html4strict' => array('html', 'htm'),
- 'ini' => array('ini', 'desktop'),
+ 'ini' => array('ini', 'desktop', 'vbp'),
'java' => array('java'),
'javascript' => array('js'),
'klonec' => array('kl1'),
@@ -1506,11 +1517,11 @@ class GeSHi {
'smarty' => array(),
'tcl' => array('tcl'),
'text' => array('txt'),
- 'vb' => array('bas'),
- 'vbnet' => array(),
+ 'vb' => array('bas', 'ctl', 'frm'),
+ 'vbnet' => array('vb', 'sln'),
'visualfoxpro' => array(),
'whitespace' => array('ws'),
- 'xml' => array('xml', 'svg', 'xrc'),
+ 'xml' => array('xml', 'svg', 'xrc', 'vbproj', 'csproj', 'userprefs', 'resx', 'stetic', 'settings', 'manifest', 'myapp'),
'z80' => array('z80', 'asm', 'inc')
);
}
@@ -1959,6 +1970,11 @@ class GeSHi {
* @since 1.0.8
*/
protected function build_parse_cache() {
+ // check whether language_data is available
+ if (empty($this->language_data)) {
+ return false;
+ }
+
// cache symbol regexp
//As this is a costy operation, we avoid doing it for multiple groups ...
//Instead we perform it for all symbols at once.
@@ -2140,7 +2156,7 @@ class GeSHi {
*
* @since 1.0.0
*/
- public function parse_code () {
+ public function parse_code() {
// Start the timer
$start_time = microtime();
@@ -2148,6 +2164,11 @@ class GeSHi {
$code = str_replace("\r\n", "\n", $this->source);
$code = str_replace("\r", "\n", $code);
+ // check whether language_data is available
+ if (empty($this->language_data)) {
+ $this->error = GESHI_ERROR_NO_SUCH_LANG;
+ }
+
// Firstly, if there is an error, we won't highlight
if ($this->error) {
//Escape the source for output
@@ -4024,7 +4045,7 @@ class GeSHi {
$parsed_code .= str_repeat('</span>', $close);
$close = 0;
}
- if ($i + 1 < $n) {
+ elseif ($i + 1 < $n) {
$parsed_code .= "\n";
}
unset($code[$i]);
@@ -4695,7 +4716,9 @@ class GeSHi {
// TODO: a|bb|c => [ac]|bb
static $callback_2;
if (!isset($callback_2)) {
- $callback_2 = create_function('$matches', 'return "[" . str_replace("|", "", $matches[1]) . "]";');
+ $callback_2 = function($matches) {
+ return "[" . str_replace("|", "", $matches[1]) . "]";
+ };
}
$list = preg_replace_callback('#\(\?\:((?:.\|)+.)\)#', $callback_2, $list);
}
diff --git a/vendor/geshi/geshi/src/geshi/4cs.php b/vendor/geshi/geshi/src/geshi/4cs.php
index cae453f66..228d523e5 100644
--- a/vendor/geshi/geshi/src/geshi/4cs.php
+++ b/vendor/geshi/geshi/src/geshi/4cs.php
@@ -4,7 +4,7 @@
* ------
* Author: Jason Curl (jason.curl@continental-corporation.com)
* Copyright: (c) 2009 Jason Curl
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/09/05
*
* 4CS language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/6502acme.php b/vendor/geshi/geshi/src/geshi/6502acme.php
index a11a108fc..5d40da987 100644
--- a/vendor/geshi/geshi/src/geshi/6502acme.php
+++ b/vendor/geshi/geshi/src/geshi/6502acme.php
@@ -4,7 +4,7 @@
* -------
* Author: Warren Willmey
* Copyright: (c) 2010 Warren Willmey.
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/05/26
*
* MOS 6502 (more specifically 6510) ACME Cross Assembler 0.93 by Marco Baye language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/6502kickass.php b/vendor/geshi/geshi/src/geshi/6502kickass.php
index 9da8f2407..1ddbc597e 100644
--- a/vendor/geshi/geshi/src/geshi/6502kickass.php
+++ b/vendor/geshi/geshi/src/geshi/6502kickass.php
@@ -4,7 +4,7 @@
* -------
* Author: Warren Willmey
* Copyright: (c) 2010 Warren Willmey.
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/06/07
*
* MOS 6502 (6510) Kick Assembler 3.13 language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/6502tasm.php b/vendor/geshi/geshi/src/geshi/6502tasm.php
index 4ce348f42..539db014f 100644
--- a/vendor/geshi/geshi/src/geshi/6502tasm.php
+++ b/vendor/geshi/geshi/src/geshi/6502tasm.php
@@ -4,7 +4,7 @@
* -------
* Author: Warren Willmey
* Copyright: (c) 2010 Warren Willmey.
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/06/02
*
* MOS 6502 (6510) TASM/64TASS (64TASS being the super set of TASM) language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/68000devpac.php b/vendor/geshi/geshi/src/geshi/68000devpac.php
index 96a9d0820..db5c85b25 100644
--- a/vendor/geshi/geshi/src/geshi/68000devpac.php
+++ b/vendor/geshi/geshi/src/geshi/68000devpac.php
@@ -4,7 +4,7 @@
* -------
* Author: Warren Willmey
* Copyright: (c) 2010 Warren Willmey.
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/06/09
*
* Motorola 68000 - HiSoft Devpac ST 2 Assembler language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/abap.php b/vendor/geshi/geshi/src/geshi/abap.php
index d9df3ea88..99536f022 100644
--- a/vendor/geshi/geshi/src/geshi/abap.php
+++ b/vendor/geshi/geshi/src/geshi/abap.php
@@ -7,7 +7,7 @@
* - Sandra Rossi (sandra.rossi@gmail.com)
* - Jacob Laursen (jlu@kmd.dk)
* Copyright: (c) 2007 Andres Picazo
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/06/04
*
* ABAP language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/actionscript.php b/vendor/geshi/geshi/src/geshi/actionscript.php
index bbafbdfc9..d350a18a7 100644
--- a/vendor/geshi/geshi/src/geshi/actionscript.php
+++ b/vendor/geshi/geshi/src/geshi/actionscript.php
@@ -4,7 +4,7 @@
* ----------------
* Author: Steffen Krause (Steffen.krause@muse.de)
* Copyright: (c) 2004 Steffen Krause, Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/06/20
*
* Actionscript language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/actionscript3.php b/vendor/geshi/geshi/src/geshi/actionscript3.php
index 20dcf5d56..351b6b0b3 100644
--- a/vendor/geshi/geshi/src/geshi/actionscript3.php
+++ b/vendor/geshi/geshi/src/geshi/actionscript3.php
@@ -4,7 +4,7 @@
* ----------------
* Author: Jordi Boggiano (j.boggiano@seld.be)
* Copyright: (c) 2007 Jordi Boggiano (http://www.seld.be/), Benny Baumann (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2007/11/26
*
* ActionScript3 language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/ada.php b/vendor/geshi/geshi/src/geshi/ada.php
index bad8595be..0eb0b7c6d 100644
--- a/vendor/geshi/geshi/src/geshi/ada.php
+++ b/vendor/geshi/geshi/src/geshi/ada.php
@@ -4,7 +4,7 @@
* -------
* Author: Tux (tux@inmail.cz)
* Copyright: (c) 2004 Tux (http://tux.a4.cz/), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/07/29
*
* Ada language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/aimms.php b/vendor/geshi/geshi/src/geshi/aimms.php
index ea49b8e63..6c653917c 100644
--- a/vendor/geshi/geshi/src/geshi/aimms.php
+++ b/vendor/geshi/geshi/src/geshi/aimms.php
@@ -4,7 +4,7 @@
* --------
* Author: Guido Diepen (guido.diepen@aimms.com)
* Copyright: (c) 2011 Guido Diepen (http://www.aimms.com)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2011/05/05
*
* AIMMS language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/algol68.php b/vendor/geshi/geshi/src/geshi/algol68.php
index f1555c61a..956d35c1b 100644
--- a/vendor/geshi/geshi/src/geshi/algol68.php
+++ b/vendor/geshi/geshi/src/geshi/algol68.php
@@ -4,7 +4,7 @@
* --------
* Author: Neville Dempsey (NevilleD.sourceforge@sgr-a.net)
* Copyright: (c) 2010 Neville Dempsey (https://sourceforge.net/projects/algol68/files/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/04/24
*
* ALGOL 68 language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/apache.php b/vendor/geshi/geshi/src/geshi/apache.php
index da1f5dd22..8db1b9a33 100644
--- a/vendor/geshi/geshi/src/geshi/apache.php
+++ b/vendor/geshi/geshi/src/geshi/apache.php
@@ -4,7 +4,7 @@
* ----------
* Author: Tux (tux@inmail.cz)
* Copyright: (c) 2004 Tux (http://tux.a4.cz/), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/29/07
*
* Apache language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/applescript.php b/vendor/geshi/geshi/src/geshi/applescript.php
index e71eb327d..c46912fc1 100644
--- a/vendor/geshi/geshi/src/geshi/applescript.php
+++ b/vendor/geshi/geshi/src/geshi/applescript.php
@@ -4,7 +4,7 @@
* --------
* Author: Stephan Klimek (http://www.initware.org)
* Copyright: Stephan Klimek (http://www.initware.org)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2005/07/20
*
* AppleScript language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/apt_sources.php b/vendor/geshi/geshi/src/geshi/apt_sources.php
index 49c51b06e..6e9790927 100644
--- a/vendor/geshi/geshi/src/geshi/apt_sources.php
+++ b/vendor/geshi/geshi/src/geshi/apt_sources.php
@@ -4,7 +4,7 @@
* ----------
* Author: Milian Wolff (mail@milianw.de)
* Copyright: (c) 2008 Milian Wolff (http://milianw.de)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/06/17
*
* Apt sources.list language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/arm.php b/vendor/geshi/geshi/src/geshi/arm.php
index 86b71e1b1..8ac526403 100644
--- a/vendor/geshi/geshi/src/geshi/arm.php
+++ b/vendor/geshi/geshi/src/geshi/arm.php
@@ -4,7 +4,7 @@
* -------
* Author: Marat Dukhan (mdukhan3.at.gatech.dot.edu)
* Copyright: (c) Marat Dukhan (mdukhan3.at.gatech.dot.edu)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2011/10/06
*
* ARM Assembler language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/asm.php b/vendor/geshi/geshi/src/geshi/asm.php
index 606f2f487..44a70ca05 100644
--- a/vendor/geshi/geshi/src/geshi/asm.php
+++ b/vendor/geshi/geshi/src/geshi/asm.php
@@ -8,7 +8,7 @@
* 2009-2011 Benny Baumann (http://qbnz.com/highlighter),
* 2011 Dennis Yurichev (dennis@conus.info),
* 2011 Marat Dukhan (mdukhan3.at.gatech.dot.edu)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/07/27
*
* x86 Assembler language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/asp.php b/vendor/geshi/geshi/src/geshi/asp.php
index 6ba8f98c2..db9daae95 100644
--- a/vendor/geshi/geshi/src/geshi/asp.php
+++ b/vendor/geshi/geshi/src/geshi/asp.php
@@ -4,7 +4,7 @@
* --------
* Author: Amit Gupta (http://blog.igeek.info/)
* Copyright: (c) 2004 Amit Gupta (http://blog.igeek.info/), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/08/13
*
* ASP language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/asymptote.php b/vendor/geshi/geshi/src/geshi/asymptote.php
index a75a6299e..a701ae957 100644
--- a/vendor/geshi/geshi/src/geshi/asymptote.php
+++ b/vendor/geshi/geshi/src/geshi/asymptote.php
@@ -4,7 +4,7 @@
* -------------
* Author: Manuel Yguel (manuel.yguel.robotics@gmail.com)
* Copyright: (c) 2012 Manuel Yguel (http://manuelyguel.eu)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2012/05/24
*
* asymptote language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/autoconf.php b/vendor/geshi/geshi/src/geshi/autoconf.php
index 9c1cf125b..f7090fed6 100644
--- a/vendor/geshi/geshi/src/geshi/autoconf.php
+++ b/vendor/geshi/geshi/src/geshi/autoconf.php
@@ -4,7 +4,7 @@
* -----
* Author: Mihai Vasilian (grayasm@gmail.com)
* Copyright: (c) 2010 Mihai Vasilian
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/01/25
*
* autoconf language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/autohotkey.php b/vendor/geshi/geshi/src/geshi/autohotkey.php
index 4a47d7302..03a03ab64 100644
--- a/vendor/geshi/geshi/src/geshi/autohotkey.php
+++ b/vendor/geshi/geshi/src/geshi/autohotkey.php
@@ -4,7 +4,7 @@
* --------
* Author: Naveen Garg (naveen.garg@gmail.com)
* Copyright: (c) 2009 Naveen Garg and GeSHi
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/06/11
*
* Autohotkey language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/autoit.php b/vendor/geshi/geshi/src/geshi/autoit.php
index 5742afef5..2286aaec9 100644
--- a/vendor/geshi/geshi/src/geshi/autoit.php
+++ b/vendor/geshi/geshi/src/geshi/autoit.php
@@ -4,7 +4,7 @@
* --------
* Author: big_daddy, guinness & Tlem
* Copyright: (c) 2006-2015
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2006/01/26
*
* AutoIt: v3.3.14.2
diff --git a/vendor/geshi/geshi/src/geshi/avisynth.php b/vendor/geshi/geshi/src/geshi/avisynth.php
index cbd8a1207..ea9fc9a78 100644
--- a/vendor/geshi/geshi/src/geshi/avisynth.php
+++ b/vendor/geshi/geshi/src/geshi/avisynth.php
@@ -4,7 +4,7 @@
* --------
* Author: Ryan Jones (sciguyryan@gmail.com)
* Copyright: (c) 2008 Ryan Jones
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/10/08
*
* AviSynth language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/awk.php b/vendor/geshi/geshi/src/geshi/awk.php
index e94e64f32..f116b81a9 100644
--- a/vendor/geshi/geshi/src/geshi/awk.php
+++ b/vendor/geshi/geshi/src/geshi/awk.php
@@ -4,7 +4,7 @@
* -------
* Author: George Pollard (porges@porg.es)
* Copyright: (c) 2009 George Pollard
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/01/28
*
* Awk language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/bascomavr.php b/vendor/geshi/geshi/src/geshi/bascomavr.php
index 96ec60908..90d8506bb 100644
--- a/vendor/geshi/geshi/src/geshi/bascomavr.php
+++ b/vendor/geshi/geshi/src/geshi/bascomavr.php
@@ -4,7 +4,7 @@
* ---------------------------------
* Author: aquaticus.info
* Copyright: (c) 2008 aquaticus.info
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/01/09
*
* BASCOM AVR language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/bash.php b/vendor/geshi/geshi/src/geshi/bash.php
index d9752155d..939b23aaa 100644
--- a/vendor/geshi/geshi/src/geshi/bash.php
+++ b/vendor/geshi/geshi/src/geshi/bash.php
@@ -4,7 +4,7 @@
* --------
* Author: Andreas Gohr (andi@splitbrain.org)
* Copyright: (c) 2004 Andreas Gohr, Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/08/20
*
* BASH language file for GeSHi.
@@ -88,10 +88,12 @@ $language_data = array (
5 => "/`[^`]*`/"
),
'KEYWORDS' => array(
+ // Control flow keywords and super-important builtins
1 => array(
'case', 'do', 'done', 'elif', 'else', 'esac', 'fi', 'for', 'function',
- 'if', 'in', 'select', 'set', 'then', 'until', 'while', 'time'
+ 'if', 'in', 'select', 'set', 'then', 'time', 'until', 'while'
),
+ // Common Unix commands
2 => array(
'aclocal', 'aconnect', 'apachectl', 'apache2ctl', 'aplay', 'apm',
'apmsleep', 'apropos', 'apt-cache', 'apt-cdrom', 'apt-config',
@@ -265,7 +267,7 @@ $language_data = array (
'jar', 'java', 'javac', 'join',
- 'kbd_mode','kbdrate', 'kdialog', 'kfile', 'kill', 'killall',
+ 'kbd_mode','kbdrate', 'kdialog', 'kfile', 'killall',
'lame', 'last', 'lastb', 'ld', 'ld86', 'ldd', 'less', 'lex', 'link',
'ln', 'loadkeys', 'loadunimap', 'locate', 'lockfile', 'login',
@@ -286,7 +288,7 @@ $language_data = array (
'ps2pdf', 'ps2ps', 'psbook', 'psmerge', 'psnup', 'psresize',
'psselect', 'pstops',
- 'rbash', 'rcs', 'rcs2log', 'read', 'readlink', 'red', 'resizecons',
+ 'rbash', 'rcs', 'rcs2log', 'readlink', 'red', 'resizecons',
'rev', 'rm', 'rmdir', 'rsh', 'run-parts',
'sash', 'scp', 'screen', 'sed', 'seq', 'sendmail', 'setfont',
@@ -365,15 +367,16 @@ $language_data = array (
'zgrep', 'zip', 'zipgrep', 'zipinfo', 'zless', 'zmore', 'znew',
'zsh', 'zsoelim'
),
+ // Builtin commands
3 => array(
- 'alias', 'bg', 'bind', 'break', 'builtin', 'cd', 'command',
- 'compgen', 'complete', 'continue', 'declare', 'dirs', 'disown',
+ 'alias', 'bg', 'bind', 'break', 'builtin', 'caller', 'cd', 'command',
+ 'compgen', 'complete', 'compopt', 'continue', 'coproc', 'declare', 'dirs', 'disown',
'echo', 'enable', 'eval', 'exec', 'exit', 'export', 'fc',
- 'fg', 'getopts', 'hash', 'help', 'history', 'jobs', 'let',
- 'local', 'logout', 'popd', 'printf', 'pushd', 'pwd', 'readonly',
- 'return', 'shift', 'shopt', 'source', 'suspend', 'test', 'times',
- 'trap', 'type', 'typeset', 'ulimit', 'umask', 'unalias', 'unset',
- 'wait'
+ 'fg', 'getopts', 'hash', 'help', 'history', 'jobs', 'kill', 'let',
+ 'local', 'logout', 'mapfile', 'popd', 'printf', 'pushd', 'pwd', 'read',
+ 'readarray', 'readonly', 'return', 'shift', 'shopt', 'source',
+ 'suspend', 'test', 'times', 'trap', 'type', 'typeset', 'ulimit',
+ 'umask', 'unalias', 'unset', 'wait'
)
),
'SYMBOLS' => array(
diff --git a/vendor/geshi/geshi/src/geshi/basic4gl.php b/vendor/geshi/geshi/src/geshi/basic4gl.php
index 499428f8b..ab4b6ef38 100644
--- a/vendor/geshi/geshi/src/geshi/basic4gl.php
+++ b/vendor/geshi/geshi/src/geshi/basic4gl.php
@@ -4,7 +4,7 @@
* ---------------------------------
* Author: Matthew Webb (bmatthew1@blueyonder.co.uk)
* Copyright: (c) 2004 Matthew Webb (http://matthew-4gl.wikispaces.com)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2007/09/15
*
* Basic4GL language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/batch.php b/vendor/geshi/geshi/src/geshi/batch.php
index 03a972e8d..4f048b627 100644
--- a/vendor/geshi/geshi/src/geshi/batch.php
+++ b/vendor/geshi/geshi/src/geshi/batch.php
@@ -4,7 +4,7 @@
* ------------
* Author: FraidZZ ( fraidzz [@] bk.ru )
* Copyright: (c) 2015 FraidZZ ( http://vk.com/fraidzz , http://www.cyberforum.ru/members/340557.html )
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2015/03/28
*
* Windows batch file language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/bf.php b/vendor/geshi/geshi/src/geshi/bf.php
index 06fddfec4..4206d2f6e 100644
--- a/vendor/geshi/geshi/src/geshi/bf.php
+++ b/vendor/geshi/geshi/src/geshi/bf.php
@@ -4,7 +4,7 @@
* ----------
* Author: Benny Baumann (BenBE@geshi.org)
* Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/10/31
*
* Brainfuck language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/biblatex.php b/vendor/geshi/geshi/src/geshi/biblatex.php
index 8500cb61f..873c4ad72 100644
--- a/vendor/geshi/geshi/src/geshi/biblatex.php
+++ b/vendor/geshi/geshi/src/geshi/biblatex.php
@@ -5,7 +5,7 @@
* Author: Maïeul Rouquette from
* Quinn Taylor (quinntaylor@mac.com)
* Copyright: (c) 2009 Quinn Taylor (quinntaylor@mac.com), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/04/29
*
* BibLaTeX language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/bibtex.php b/vendor/geshi/geshi/src/geshi/bibtex.php
index 169011eeb..684f938ee 100644
--- a/vendor/geshi/geshi/src/geshi/bibtex.php
+++ b/vendor/geshi/geshi/src/geshi/bibtex.php
@@ -4,7 +4,7 @@
* -----
* Author: Quinn Taylor (quinntaylor@mac.com)
* Copyright: (c) 2009 Quinn Taylor (quinntaylor@mac.com), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/04/29
*
* BibTeX language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/blitzbasic.php b/vendor/geshi/geshi/src/geshi/blitzbasic.php
index 6311e8ad6..092aaa7df 100644
--- a/vendor/geshi/geshi/src/geshi/blitzbasic.php
+++ b/vendor/geshi/geshi/src/geshi/blitzbasic.php
@@ -4,7 +4,7 @@
* --------------
* Author: P�draig O`Connel (info@moonsword.info)
* Copyright: (c) 2005 P�draig O`Connel (http://moonsword.info)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 16.10.2005
*
* BlitzBasic language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/bnf.php b/vendor/geshi/geshi/src/geshi/bnf.php
index fafd94fa7..1d7b0535c 100644
--- a/vendor/geshi/geshi/src/geshi/bnf.php
+++ b/vendor/geshi/geshi/src/geshi/bnf.php
@@ -4,7 +4,7 @@
* --------
* Author: Rowan Rodrik van der Molen (rowan@bigsmoke.us)
* Copyright: (c) 2006 Rowan Rodrik van der Molen (http://www.bigsmoke.us/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2006/09/28
*
* BNF (Backus-Naur form) language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/boo.php b/vendor/geshi/geshi/src/geshi/boo.php
index 19c8378f9..0a35d5d53 100644
--- a/vendor/geshi/geshi/src/geshi/boo.php
+++ b/vendor/geshi/geshi/src/geshi/boo.php
@@ -4,7 +4,7 @@
* --------
* Author: Marcus Griep (neoeinstein+GeSHi@gmail.com)
* Copyright: (c) 2007 Marcus Griep (http://www.xpdm.us)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2007/09/10
*
* Boo language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/c.php b/vendor/geshi/geshi/src/geshi/c.php
index 75e1c2717..1d217ea72 100644
--- a/vendor/geshi/geshi/src/geshi/c.php
+++ b/vendor/geshi/geshi/src/geshi/c.php
@@ -7,7 +7,7 @@
* - Jack Lloyd (lloyd@randombit.net)
* - Michael Mol (mikemol@gmail.com)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/06/04
*
* C language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/c_loadrunner.php b/vendor/geshi/geshi/src/geshi/c_loadrunner.php
index c1559bc72..2d5cc7308 100644
--- a/vendor/geshi/geshi/src/geshi/c_loadrunner.php
+++ b/vendor/geshi/geshi/src/geshi/c_loadrunner.php
@@ -4,7 +4,7 @@
* ---------------------------------
* Author: Stuart Moncrieff (stuart at myloadtest dot com)
* Copyright: (c) 2010 Stuart Moncrieff (http://www.myloadtest.com/loadrunner-syntax-highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010-07-25
*
* C (for LoadRunner) language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/c_mac.php b/vendor/geshi/geshi/src/geshi/c_mac.php
index dc0318417..5a364d919 100644
--- a/vendor/geshi/geshi/src/geshi/c_mac.php
+++ b/vendor/geshi/geshi/src/geshi/c_mac.php
@@ -4,7 +4,7 @@
* ---------
* Author: M. Uli Kusterer (witness.of.teachtext@gmx.net)
* Copyright: (c) 2004 M. Uli Kusterer, Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/06/04
*
* C for Macs language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/c_winapi.php b/vendor/geshi/geshi/src/geshi/c_winapi.php
index 37db047a5..52ea4911b 100644
--- a/vendor/geshi/geshi/src/geshi/c_winapi.php
+++ b/vendor/geshi/geshi/src/geshi/c_winapi.php
@@ -7,7 +7,7 @@
* - Jack Lloyd (lloyd@randombit.net)
* - Michael Mol (mikemol@gmail.com)
* Copyright: (c) 2012 Benny Baumann (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2012/08/12
*
* C (WinAPI) language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/caddcl.php b/vendor/geshi/geshi/src/geshi/caddcl.php
index 6a205f972..72d1cd9d7 100644
--- a/vendor/geshi/geshi/src/geshi/caddcl.php
+++ b/vendor/geshi/geshi/src/geshi/caddcl.php
@@ -4,7 +4,7 @@
* ----------
* Author: Roberto Rossi (rsoftware@altervista.org)
* Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/08/30
*
* CAD DCL (Dialog Control Language) language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/cadlisp.php b/vendor/geshi/geshi/src/geshi/cadlisp.php
index 97ac8edc7..1123af1d7 100644
--- a/vendor/geshi/geshi/src/geshi/cadlisp.php
+++ b/vendor/geshi/geshi/src/geshi/cadlisp.php
@@ -4,7 +4,7 @@
* -----------
* Author: Roberto Rossi (rsoftware@altervista.org)
* Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/blog)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/08/30
*
* AutoCAD/IntelliCAD Lisp language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/ceylon.php b/vendor/geshi/geshi/src/geshi/ceylon.php
index 1c806d377..52b74c12f 100644
--- a/vendor/geshi/geshi/src/geshi/ceylon.php
+++ b/vendor/geshi/geshi/src/geshi/ceylon.php
@@ -4,7 +4,7 @@
* ----------
* Author: Lucas Werkmeister (mail@lucaswerkmeister.de)
* Copyright: (c) 2015 Lucas Werkmeister (http://lucaswerkmeister.de)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2015-01-08
*
* Ceylon language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/cfdg.php b/vendor/geshi/geshi/src/geshi/cfdg.php
index 7ad658df5..2cf72f4f7 100644
--- a/vendor/geshi/geshi/src/geshi/cfdg.php
+++ b/vendor/geshi/geshi/src/geshi/cfdg.php
@@ -4,7 +4,7 @@
* --------
* Author: John Horigan <john@glyphic.com>
* Copyright: (c) 2006 John Horigan http://www.ozonehouse.com/john/
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2006/03/11
*
* CFDG language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/cfm.php b/vendor/geshi/geshi/src/geshi/cfm.php
index 7f98c33bf..516c66606 100644
--- a/vendor/geshi/geshi/src/geshi/cfm.php
+++ b/vendor/geshi/geshi/src/geshi/cfm.php
@@ -4,7 +4,7 @@
* -------
* Author: Diego
* Copyright: (c) 2006 Diego
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2006/02/25
*
* ColdFusion language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/chaiscript.php b/vendor/geshi/geshi/src/geshi/chaiscript.php
index 13570c900..e8167820f 100644
--- a/vendor/geshi/geshi/src/geshi/chaiscript.php
+++ b/vendor/geshi/geshi/src/geshi/chaiscript.php
@@ -6,7 +6,7 @@
* Copyright: (c) 2010 Jason Turner (lefticus@gmail.com),
* (c) 2009 Jonathan Turner,
* (c) 2004 Ben Keen (ben.keen@gmail.com), Benny Baumann (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/07/03
*
* ChaiScript language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/chapel.php b/vendor/geshi/geshi/src/geshi/chapel.php
index d0436348c..4f31f886b 100644
--- a/vendor/geshi/geshi/src/geshi/chapel.php
+++ b/vendor/geshi/geshi/src/geshi/chapel.php
@@ -4,7 +4,7 @@
* -----
* Author: Richard Molitor (richard.molitor@student.kit.edu)
* Copyright: (c) 2013 Richard Molitor
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2013/06/22
*
* Chapel language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/cil.php b/vendor/geshi/geshi/src/geshi/cil.php
index 82a2052fd..152fcc2d9 100644
--- a/vendor/geshi/geshi/src/geshi/cil.php
+++ b/vendor/geshi/geshi/src/geshi/cil.php
@@ -4,7 +4,7 @@
* --------
* Author: Marcus Griep (neoeinstein+GeSHi@gmail.com)
* Copyright: (c) 2007 Marcus Griep (http://www.xpdm.us)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2007/10/24
*
* CIL (Common Intermediate Language) language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/clojure.php b/vendor/geshi/geshi/src/geshi/clojure.php
index 0a5d1dd4c..55cbc42d5 100644
--- a/vendor/geshi/geshi/src/geshi/clojure.php
+++ b/vendor/geshi/geshi/src/geshi/clojure.php
@@ -4,7 +4,7 @@
* --------
* Author: Jess Johnson (jess@grok-code.com)
* Copyright: (c) 2009 Jess Johnson (http://grok-code.com)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/09/20
*
* Clojure language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/cmake.php b/vendor/geshi/geshi/src/geshi/cmake.php
index cebf147a2..13e67ffdd 100644
--- a/vendor/geshi/geshi/src/geshi/cmake.php
+++ b/vendor/geshi/geshi/src/geshi/cmake.php
@@ -4,7 +4,7 @@
* -------
* Author: Daniel Nelson (danieln@eng.utah.edu)
* Copyright: (c) 2009 Daniel Nelson
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/04/06
*
* CMake language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/cobol.php b/vendor/geshi/geshi/src/geshi/cobol.php
index 990551a55..ac466f22d 100644
--- a/vendor/geshi/geshi/src/geshi/cobol.php
+++ b/vendor/geshi/geshi/src/geshi/cobol.php
@@ -4,7 +4,7 @@
* ----------
* Author: BenBE (BenBE@omorphia.org)
* Copyright: (c) 2007-2008 BenBE (http://www.omorphia.de/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2007/07/02
*
* COBOL language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/coffeescript.php b/vendor/geshi/geshi/src/geshi/coffeescript.php
index 9656668df..4b5feb28c 100644
--- a/vendor/geshi/geshi/src/geshi/coffeescript.php
+++ b/vendor/geshi/geshi/src/geshi/coffeescript.php
@@ -4,7 +4,7 @@
* ----------
* Author: Trevor Burnham (trevorburnham@gmail.com)
* Copyright: (c) 2010 Trevor Burnham (http://iterative.ly)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/06/08
*
* CoffeeScript language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/cpp-qt.php b/vendor/geshi/geshi/src/geshi/cpp-qt.php
index 40b7e5aa1..3d9e55df2 100644
--- a/vendor/geshi/geshi/src/geshi/cpp-qt.php
+++ b/vendor/geshi/geshi/src/geshi/cpp-qt.php
@@ -4,7 +4,7 @@
* -------
* Author: Iulian M
* Copyright: (c) 2006 Iulian M
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/09/27
*
* C++ (with Qt extensions) language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/cpp-winapi.php b/vendor/geshi/geshi/src/geshi/cpp-winapi.php
index b8bc6ccde..662e4c4e6 100644
--- a/vendor/geshi/geshi/src/geshi/cpp-winapi.php
+++ b/vendor/geshi/geshi/src/geshi/cpp-winapi.php
@@ -8,7 +8,7 @@
* - Jack Lloyd (lloyd@randombit.net)
* - Benny Baumann (BenBE@geshi.org)
* Copyright: (c) 2004 Dennis Bayer, Nigel McNie, 2012 Benny Baumann (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/09/27
*
* C++ language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/cpp.php b/vendor/geshi/geshi/src/geshi/cpp.php
index 1439dfe09..348c7cf02 100644
--- a/vendor/geshi/geshi/src/geshi/cpp.php
+++ b/vendor/geshi/geshi/src/geshi/cpp.php
@@ -7,7 +7,7 @@
* - M. Uli Kusterer (witness.of.teachtext@gmx.net)
* - Jack Lloyd (lloyd@randombit.net)
* Copyright: (c) 2004 Dennis Bayer, Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/09/27
*
* C++ language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/csharp.php b/vendor/geshi/geshi/src/geshi/csharp.php
index a5a0f1120..da72167c2 100644
--- a/vendor/geshi/geshi/src/geshi/csharp.php
+++ b/vendor/geshi/geshi/src/geshi/csharp.php
@@ -5,7 +5,7 @@
* Author: Alan Juden (alan@judenware.org)
* Revised by: Michael Mol (mikemol@gmail.com)
* Copyright: (c) 2004 Alan Juden, Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/06/04
*
* C# language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/css.php b/vendor/geshi/geshi/src/geshi/css.php
index 5d15fad4f..15450ed8b 100644
--- a/vendor/geshi/geshi/src/geshi/css.php
+++ b/vendor/geshi/geshi/src/geshi/css.php
@@ -4,7 +4,7 @@
* -------
* Author: Nigel McNie (nigel@geshi.org), Zéfling (zefling@ikilote.net)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/06/18
*
* CSS language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/cuesheet.php b/vendor/geshi/geshi/src/geshi/cuesheet.php
index 97d631c40..c9724f57d 100644
--- a/vendor/geshi/geshi/src/geshi/cuesheet.php
+++ b/vendor/geshi/geshi/src/geshi/cuesheet.php
@@ -4,7 +4,7 @@
* ----------
* Author: Benny Baumann (benbe@geshi.org)
* Copyright: (c) 2009 Benny Baumann (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/12/21
*
* Cuesheet language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/d.php b/vendor/geshi/geshi/src/geshi/d.php
index 5e3713a80..2f0e3525c 100644
--- a/vendor/geshi/geshi/src/geshi/d.php
+++ b/vendor/geshi/geshi/src/geshi/d.php
@@ -6,7 +6,7 @@
* Contributors:
* - Jimmy Cao
* Copyright: (c) 2005 Thomas Kuehne (http://thomas.kuehne.cn/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2005/04/22
*
* D language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/dart.php b/vendor/geshi/geshi/src/geshi/dart.php
index 83c00c918..4d1d824e1 100644
--- a/vendor/geshi/geshi/src/geshi/dart.php
+++ b/vendor/geshi/geshi/src/geshi/dart.php
@@ -4,7 +4,7 @@
* --------
* Author: Edward Hart (edward.dan.hart@gmail.com)
* Copyright: (c) 2013 Edward Hart
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2013/10/25
*
* Dart language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/dcl.php b/vendor/geshi/geshi/src/geshi/dcl.php
index a1489c739..660774489 100644
--- a/vendor/geshi/geshi/src/geshi/dcl.php
+++ b/vendor/geshi/geshi/src/geshi/dcl.php
@@ -4,7 +4,7 @@
* --------
* Author: Petr Hendl (petr@hendl.cz)
* Copyright: (c) 2011 Petr Hendl http://hendl.cz/geshi/
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2011/02/17
*
* DCL language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/dcpu16.php b/vendor/geshi/geshi/src/geshi/dcpu16.php
index 8c61bff8c..b5dbb2f58 100644
--- a/vendor/geshi/geshi/src/geshi/dcpu16.php
+++ b/vendor/geshi/geshi/src/geshi/dcpu16.php
@@ -4,7 +4,7 @@
* -------
* Author: Benny Baumann (BenBE@omorphia.de)
* Copyright: (c) 2007-2014 Benny Baumann (http://geshi.org/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2012/04/12
*
* DCPU/16 Assembly language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/dcs.php b/vendor/geshi/geshi/src/geshi/dcs.php
index 58bf5a0fb..72b0c37a6 100644
--- a/vendor/geshi/geshi/src/geshi/dcs.php
+++ b/vendor/geshi/geshi/src/geshi/dcs.php
@@ -4,7 +4,7 @@
* ---------------------------------
* Author: Stelio Passaris (GeSHi@stelio.net)
* Copyright: (c) 2009 Stelio Passaris (http://stelio.net/stiki/GeSHi)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/01/20
*
* DCS language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/delphi.php b/vendor/geshi/geshi/src/geshi/delphi.php
index fadb4ad71..3533f6233 100644
--- a/vendor/geshi/geshi/src/geshi/delphi.php
+++ b/vendor/geshi/geshi/src/geshi/delphi.php
@@ -4,7 +4,7 @@
* ----------
* Author: J�rja Norbert (jnorbi@vipmail.hu), Benny Baumann (BenBE@omorphia.de)
* Copyright: (c) 2004 J�rja Norbert, Benny Baumann (BenBE@omorphia.de), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/07/26
*
* Delphi (Object Pascal) language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/diff.php b/vendor/geshi/geshi/src/geshi/diff.php
index ee01e0c1f..b630be2e6 100644
--- a/vendor/geshi/geshi/src/geshi/diff.php
+++ b/vendor/geshi/geshi/src/geshi/diff.php
@@ -4,7 +4,7 @@
* --------
* Author: Conny Brunnkvist (conny@fuchsia.se), W. Tasin (tasin@fhm.edu)
* Copyright: (c) 2004 Fuchsia Open Source Solutions (http://www.fuchsia.se/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/12/29
*
* Diff-output language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/div.php b/vendor/geshi/geshi/src/geshi/div.php
index 6ae99f149..674072446 100644
--- a/vendor/geshi/geshi/src/geshi/div.php
+++ b/vendor/geshi/geshi/src/geshi/div.php
@@ -4,7 +4,7 @@
* ---------------------------------
* Author: Gabriel Lorenzo (ermakina@gmail.com)
* Copyright: (c) 2005 Gabriel Lorenzo (http://ermakina.gazpachito.net)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2005/06/19
*
* DIV language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/dos.php b/vendor/geshi/geshi/src/geshi/dos.php
index 744cb8276..1a4ebb7f4 100644
--- a/vendor/geshi/geshi/src/geshi/dos.php
+++ b/vendor/geshi/geshi/src/geshi/dos.php
@@ -4,7 +4,7 @@
* -------
* Author: Alessandro Staltari (staltari@geocities.com)
* Copyright: (c) 2005 Alessandro Staltari (http://www.geocities.com/SiliconValley/Vista/8155/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2005/07/05
*
* DOS language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/dot.php b/vendor/geshi/geshi/src/geshi/dot.php
index 77de029e1..a4e8267ff 100644
--- a/vendor/geshi/geshi/src/geshi/dot.php
+++ b/vendor/geshi/geshi/src/geshi/dot.php
@@ -4,7 +4,7 @@
* ---------------------------------
* Author: Adrien Friggeri (adrien@friggeri.net)
* Copyright: (c) 2007 Adrien Friggeri (http://www.friggeri.net)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2007/05/30
*
* dot language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/e.php b/vendor/geshi/geshi/src/geshi/e.php
index 5f321e6fd..6a04779d0 100644
--- a/vendor/geshi/geshi/src/geshi/e.php
+++ b/vendor/geshi/geshi/src/geshi/e.php
@@ -4,7 +4,7 @@
* --------
* Author: Kevin Reid (kpreid@switchb.org)
* Copyright: (c) 2010 Kevin Reid (http://switchb.org/kpreid/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/04/16
*
* E language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/ecmascript.php b/vendor/geshi/geshi/src/geshi/ecmascript.php
index 8d4ab15a5..05069ff85 100644
--- a/vendor/geshi/geshi/src/geshi/ecmascript.php
+++ b/vendor/geshi/geshi/src/geshi/ecmascript.php
@@ -4,7 +4,7 @@
* --------------
* Author: Michel Mariani (http://www.tonton-pixel.com/site/)
* Copyright: (c) 2010 Michel Mariani (http://www.tonton-pixel.com/site/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/01/08
*
* ECMAScript language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/eiffel.php b/vendor/geshi/geshi/src/geshi/eiffel.php
index 14a2cc033..50cdf6f8c 100644
--- a/vendor/geshi/geshi/src/geshi/eiffel.php
+++ b/vendor/geshi/geshi/src/geshi/eiffel.php
@@ -4,7 +4,7 @@
* ----------
* Author: Zoran Simic (zsimic@axarosenberg.com)
* Copyright: (c) 2005 Zoran Simic
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2005/06/30
*
* Eiffel language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/email.php b/vendor/geshi/geshi/src/geshi/email.php
index c77d0fac3..c9bdf26f9 100644
--- a/vendor/geshi/geshi/src/geshi/email.php
+++ b/vendor/geshi/geshi/src/geshi/email.php
@@ -4,7 +4,7 @@
* ---------------
* Author: Benny Baumann (BenBE@geshi.org)
* Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/10/19
*
* Email (mbox \ eml \ RFC format) language file for GeSHi.
@@ -51,14 +51,55 @@ $language_data = array (
'HTTP', 'SMTP', 'ASMTP', 'ESMTP'
),
2 => array(
- 'Authentication-Results','Comment','Content-Description','Content-Type',
- 'Content-Disposition','Content-Transfer-Encoding','Delivered-To',
- 'Dkim-Signature','Domainkey-Signature','In-Reply-To','Message-Id',
- 'MIME-Version','OpenPGP','Received','Received-SPF','References',
- 'Reply-To', 'Resend-From','Resend-To','Return-Path','User-Agent'
+ 'Original-Recipient','Accept-Language','Alternate-Recipient',
+ 'Archived-At','Authentication-Results','Auto-Submitted',
+ 'Autoforwarded','Autosubmitted','Base','Comments',
+ 'Content-Alternative','Content-Base','Content-Description',
+ 'Content-Disposition','Content-Duration','Content-features',
+ 'Content-ID','Content-Identifier','Content-Language',
+ 'Content-Location','Content-MD5','Content-Return',
+ 'Content-Transfer-Encoding','Content-Type','Conversion',
+ 'Conversion-With-Loss','Deferred-Delivery','Delivery-Date',
+ 'Discarded-X400-IPMS-Extensions','Discarded-X400-MTS-Extensions',
+ 'Disclose-Recipients','Disposition-Notification-Options',
+ 'Disposition-Notification-To','DKIM-Signature',
+ 'DL-Expansion-History','Downgraded-Bcc','Downgraded-Cc',
+ 'Downgraded-Disposition-Notification-To',
+ 'Downgraded-Final-Recipient','Downgraded-From',
+ 'Downgraded-In-Reply-To','Downgraded-Mail-From',
+ 'Downgraded-Message-Id','Downgraded-Original-Recipient',
+ 'Downgraded-Rcpt-To','Downgraded-References',
+ 'Downgraded-Reply-To','Downgraded-Resent-Bcc',
+ 'Downgraded-Resent-Cc','Downgraded-Resent-From',
+ 'Downgraded-Resent-Reply-To','Downgraded-Resent-Sender',
+ 'Downgraded-Resent-To','Downgraded-Return-Path',
+ 'Downgraded-Sender','Downgraded-To','Encoding','Encrypted','Expires',
+ 'Expiry-Date','Generate-Delivery-Report','Importance','In-Reply-To',
+ 'Incomplete-Copy','Keywords','Language','Latest-Delivery-Time',
+ 'List-Archive','List-Help','List-ID','List-Owner','List-Post',
+ 'List-Subscribe','List-Unsubscribe','List-Unsubscribe-Post',
+ 'Message-Context','Message-ID','Message-Type','MIME-Version',
+ 'MMHS-Acp127-Message-Identifier','MMHS-Codress-Message-Indicator',
+ 'MMHS-Copy-Precedence','MMHS-Exempted-Address',
+ 'MMHS-Extended-Authorisation-Info','MMHS-Handling-Instructions',
+ 'MMHS-Message-Instructions','MMHS-Message-Type',
+ 'MMHS-Originator-PLAD','MMHS-Originator-Reference',
+ 'MMHS-Other-Recipients-Indicator-CC',
+ 'MMHS-Other-Recipients-Indicator-To','MMHS-Primary-Precedence',
+ 'MMHS-Subject-Indicator-Codes','MT-Priority','Obsoletes',
+ 'Organization','Original-Encoded-Information-Types','Original-From',
+ 'Original-Message-ID','Original-Subject','Originator-Return-Address',
+ 'PICS-Label','Prevent-NonDelivery-Report','Priority','Received',
+ 'Received-SPF','References','Reply-By','Reply-To',
+ 'Require-Recipient-Valid-Since','Resent-Bcc','Resent-Cc',
+ 'Resent-Date','Resent-From','Resent-Message-ID','Resent-Reply-To',
+ 'Resent-Sender','Resent-To','Return-Path','Sensitivity',
+ 'Solicitation','Supersedes','VBR-Info','X400-Content-Identifier',
+ 'X400-Content-Return','X400-Content-Type','X400-MTS-Identifier',
+ 'X400-Originator','X400-Received','X400-Recipients','X400-Trace'
),
3 => array(
- 'Date','From','Sender','Subject','To','CC'
+ 'Bcc','CC','Date','From','Sender','Subject','To'
),
4 => array(
'by', 'for', 'from', 'id', 'with'
@@ -102,6 +143,7 @@ $language_data = array (
),
'SCRIPT' => array(
0 => 'color: #000040;',
+ 1 => 'color: #002040;',
),
'REGEXPS' => array(
1 => 'color: #000000; font-weight: bold;',
@@ -190,10 +232,12 @@ $language_data = array (
),
'STRICT_MODE_APPLIES' => GESHI_ALWAYS,
'SCRIPT_DELIMITERS' => array(
- 0 => "/(?P<start>^)[A-Za-z][a-zA-Z0-9\-]*\s*:\s*(?:.|(?=\n\s)\n)*(?P<end>$)/m"
+ 0 => "/(?P<start>^)[A-Za-z][a-zA-Z0-9\-]*\s*:\s*(?:.|(?=\n\s)\n)*(?P<end>$)/m",
+ 1 => "/(?P<start>^)--[a-zA-Z0-9_=\-]+[a-zA-Z0-9_](?:--)?(?P<end>$)/m"
),
'HIGHLIGHT_STRICT_BLOCK' => array(
0 => true,
+ 1 => false
),
'TAB_WIDTH' => 4,
'PARSER_CONTROL' => array(
diff --git a/vendor/geshi/geshi/src/geshi/epc.php b/vendor/geshi/geshi/src/geshi/epc.php
index b3ea4ae21..7882d00ae 100644
--- a/vendor/geshi/geshi/src/geshi/epc.php
+++ b/vendor/geshi/geshi/src/geshi/epc.php
@@ -4,7 +4,7 @@
* --------
* Author: Thorsten Muehlfelder (muehlfelder@enertex.de)
* Copyright: (c) 2010 Enertex Bayern GmbH
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/08/26
*
* Enerscript language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/erlang.php b/vendor/geshi/geshi/src/geshi/erlang.php
index a15383283..8053d8719 100644
--- a/vendor/geshi/geshi/src/geshi/erlang.php
+++ b/vendor/geshi/geshi/src/geshi/erlang.php
@@ -7,7 +7,7 @@
* - Uwe Dauernheim (uwe@dauernheim.net)
* - Dan Forest-Barbier (dan@twisted.in)
* Copyright: (c) 2008 Uwe Dauernheim (http://www.kreisquadratur.de/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008-09-27
*
* Erlang language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/euphoria.php b/vendor/geshi/geshi/src/geshi/euphoria.php
index 5888d0f51..35c99ecb9 100644
--- a/vendor/geshi/geshi/src/geshi/euphoria.php
+++ b/vendor/geshi/geshi/src/geshi/euphoria.php
@@ -4,7 +4,7 @@
* ---------------------------------
* Author: Nicholas Koceja (nerketur@hotmail.com)
* Copyright: (c) 2010 Nicholas Koceja
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 11/24/2010
*
* Euphoria language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/ezt.php b/vendor/geshi/geshi/src/geshi/ezt.php
index 505241239..a02ebc41d 100644
--- a/vendor/geshi/geshi/src/geshi/ezt.php
+++ b/vendor/geshi/geshi/src/geshi/ezt.php
@@ -4,7 +4,7 @@
* -----------
* Author: Ramesh Vishveshwar (ramesh.vishveshwar@gmail.com)
* Copyright: (c) 2012 Ramesh Vishveshwar (http://thecodeisclear.in)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2012/09/01
*
* Easytrieve language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/f1.php b/vendor/geshi/geshi/src/geshi/f1.php
index 1203e1bed..c6f93cc8c 100644
--- a/vendor/geshi/geshi/src/geshi/f1.php
+++ b/vendor/geshi/geshi/src/geshi/f1.php
@@ -4,7 +4,7 @@
* -------
* Author: Juro Bystricky (juro@f1compiler.com)
* Copyright: K2 Software Corp.
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/07/06
*
* Formula One language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/falcon.php b/vendor/geshi/geshi/src/geshi/falcon.php
index ad5f3a69d..6160cba34 100644
--- a/vendor/geshi/geshi/src/geshi/falcon.php
+++ b/vendor/geshi/geshi/src/geshi/falcon.php
@@ -4,7 +4,7 @@
* ---------------------------------
* Author: billykater (billykater+geshi@gmail.com)
* Copyright: (c) 2010 billykater (http://falconpl.org/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/06/07
*
* Falcon language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/fo.php b/vendor/geshi/geshi/src/geshi/fo.php
index 8628bb10b..c9dca6c2f 100644
--- a/vendor/geshi/geshi/src/geshi/fo.php
+++ b/vendor/geshi/geshi/src/geshi/fo.php
@@ -4,7 +4,7 @@
* --------
* Author: Tan-Vinh Nguyen (tvnguyen@web.de)
* Copyright: (c) 2009 Tan-Vinh Nguyen
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/03/23
*
* fo language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/fortran.php b/vendor/geshi/geshi/src/geshi/fortran.php
index e463cb9af..6e41e9d06 100644
--- a/vendor/geshi/geshi/src/geshi/fortran.php
+++ b/vendor/geshi/geshi/src/geshi/fortran.php
@@ -4,7 +4,7 @@
* -----------
* Author: Cedric Arrabie (cedric.arrabie@univ-pau.fr)
* Copyright: (C) 2006 Cetric Arrabie
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2006/04/22
*
* Fortran language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/freebasic.php b/vendor/geshi/geshi/src/geshi/freebasic.php
index cc6bd7b77..952d8f1f5 100644
--- a/vendor/geshi/geshi/src/geshi/freebasic.php
+++ b/vendor/geshi/geshi/src/geshi/freebasic.php
@@ -4,7 +4,7 @@
* -------------
* Author: Roberto Rossi
* Copyright: (c) 2005 Roberto Rossi (http://rsoftware.altervista.org)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2005/08/19
*
* FreeBasic (http://www.freebasic.net/) language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/freeswitch.php b/vendor/geshi/geshi/src/geshi/freeswitch.php
index 14f2b93a7..a4729a4ca 100644
--- a/vendor/geshi/geshi/src/geshi/freeswitch.php
+++ b/vendor/geshi/geshi/src/geshi/freeswitch.php
@@ -4,7 +4,7 @@
* --------
* Author: James Rose (james.gs@stubbornroses.com)
* Copyright: (c) 2006 Christian Lescuyer http://xtian.goelette.info
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2011/11/18
*
* FreeSWITCH language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/fsharp.php b/vendor/geshi/geshi/src/geshi/fsharp.php
index 5fc987841..c88c4c217 100644
--- a/vendor/geshi/geshi/src/geshi/fsharp.php
+++ b/vendor/geshi/geshi/src/geshi/fsharp.php
@@ -4,7 +4,7 @@
* ----------
* Author: julien ortin (jo_spam-divers@yahoo.fr)
* Copyright: (c) 2009 julien ortin
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/09/20
*
* F# language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/gambas.php b/vendor/geshi/geshi/src/geshi/gambas.php
index 8510b86a9..9993a6cd4 100644
--- a/vendor/geshi/geshi/src/geshi/gambas.php
+++ b/vendor/geshi/geshi/src/geshi/gambas.php
@@ -5,7 +5,7 @@
* Author: Jesus Guardon (jguardon@telefonica.net)
* Copyright: (c) 2009 Jesus Guardon (http://gambas-es.org),
* Benny Baumann (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/08/20
*
* GAMBAS language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/gdb.php b/vendor/geshi/geshi/src/geshi/gdb.php
index d05a9ca9d..250e2777b 100644
--- a/vendor/geshi/geshi/src/geshi/gdb.php
+++ b/vendor/geshi/geshi/src/geshi/gdb.php
@@ -4,7 +4,7 @@
* --------
* Author: Milian Wolff (mail@milianw.de)
* Copyright: (c) 2009 Milian Wolff
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/06/24
*
* GDB language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/genero.php b/vendor/geshi/geshi/src/geshi/genero.php
index 4d3cc3638..afdf9d9b6 100644
--- a/vendor/geshi/geshi/src/geshi/genero.php
+++ b/vendor/geshi/geshi/src/geshi/genero.php
@@ -4,7 +4,7 @@
* ----------
* Author: Lars Gersmann (lars.gersmann@gmail.com)
* Copyright: (c) 2007 Lars Gersmann, Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2007/07/01
*
* Genero (FOURJ's Genero 4GL) language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/genie.php b/vendor/geshi/geshi/src/geshi/genie.php
index dabc38913..05b356581 100644
--- a/vendor/geshi/geshi/src/geshi/genie.php
+++ b/vendor/geshi/geshi/src/geshi/genie.php
@@ -4,7 +4,7 @@
* ----------
* Author: Nicolas Joseph (nicolas.joseph@valaide.org)
* Copyright: (c) 2009 Nicolas Joseph
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/04/29
*
* Genie language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/gettext.php b/vendor/geshi/geshi/src/geshi/gettext.php
index 871f5ae67..4161cb8fb 100644
--- a/vendor/geshi/geshi/src/geshi/gettext.php
+++ b/vendor/geshi/geshi/src/geshi/gettext.php
@@ -4,7 +4,7 @@
* --------
* Author: Milian Wolff (mail@milianw.de)
* Copyright: (c) 2008 Milian Wolff
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/05/25
*
* GNU Gettext .po/.pot language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/glsl.php b/vendor/geshi/geshi/src/geshi/glsl.php
index d67adb2b5..eab78e9a7 100644
--- a/vendor/geshi/geshi/src/geshi/glsl.php
+++ b/vendor/geshi/geshi/src/geshi/glsl.php
@@ -4,7 +4,7 @@
* -----
* Author: Benny Baumann (BenBE@omorphia.de)
* Copyright: (c) 2008 Benny Baumann (BenBE@omorphia.de)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/03/20
*
* glSlang language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/gml.php b/vendor/geshi/geshi/src/geshi/gml.php
index 2cb0cd2e6..30b900ebf 100644
--- a/vendor/geshi/geshi/src/geshi/gml.php
+++ b/vendor/geshi/geshi/src/geshi/gml.php
@@ -4,7 +4,7 @@
* -------
* Author: José Jorge Enríquez <jenriquez@users.sourceforge.net>, Timon Knigge <timonknigge@live.nl>
* Copyright: (c) 2005 José Jorge Enríquez Rodríguez (http://www.zonamakers.com), (c) 2013 Timon Knigge (http://www.bluemoonproductions.nl)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2005/06/21
*
* GML language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/gnuplot.php b/vendor/geshi/geshi/src/geshi/gnuplot.php
index 55e1055d9..3af5f9350 100644
--- a/vendor/geshi/geshi/src/geshi/gnuplot.php
+++ b/vendor/geshi/geshi/src/geshi/gnuplot.php
@@ -4,7 +4,7 @@
* ----------
* Author: Milian Wolff (mail@milianw.de)
* Copyright: (c) 2008 Milian Wolff (http://milianw.de)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/07/07
*
* Gnuplot script language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/go.php b/vendor/geshi/geshi/src/geshi/go.php
index 5c9212beb..83d3cabc8 100644
--- a/vendor/geshi/geshi/src/geshi/go.php
+++ b/vendor/geshi/geshi/src/geshi/go.php
@@ -4,7 +4,7 @@
* --------
* Author: Markus Jarderot (mizardx at gmail dot com)
* Copyright: (c) 2010 Markus Jarderot
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/05/20
*
* Go language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/groovy.php b/vendor/geshi/geshi/src/geshi/groovy.php
index 9f201bbdf..f8a228e28 100644
--- a/vendor/geshi/geshi/src/geshi/groovy.php
+++ b/vendor/geshi/geshi/src/geshi/groovy.php
@@ -4,7 +4,7 @@
* ----------
* Author: Ivan F. Villanueva B. (geshi_groovy@artificialidea.com)
* Copyright: (c) 2006 Ivan F. Villanueva B.(http://www.artificialidea.com)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2006/04/29
*
* Groovy language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/gwbasic.php b/vendor/geshi/geshi/src/geshi/gwbasic.php
index 9bf2c1592..0fd7a2991 100644
--- a/vendor/geshi/geshi/src/geshi/gwbasic.php
+++ b/vendor/geshi/geshi/src/geshi/gwbasic.php
@@ -4,7 +4,7 @@
* ----------
* Author: José Gabriel Moya Yangüela (josemoya@gmail.com)
* Copyright: (c) 2010 José Gabriel Moya Yangüela (http://doc.apagada.com)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/01/30
*
* GwBasic language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/haskell.php b/vendor/geshi/geshi/src/geshi/haskell.php
index 7b7c904a3..1a2244741 100644
--- a/vendor/geshi/geshi/src/geshi/haskell.php
+++ b/vendor/geshi/geshi/src/geshi/haskell.php
@@ -6,7 +6,7 @@
* Based on haskell.php by Jason Dagit (dagit@codersbase.com), which was
* based on ocaml.php by Flaie (fireflaie@gmail.com).
* Copyright: (c) 2005 Flaie, Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2014/05/12
*
* Haskell language file for GeSHi.
@@ -105,7 +105,7 @@ $language_data = array (
4 => array (
'Bool', 'Maybe', 'Either', 'Ordering',
'Char', 'String',
- 'Int', 'Integer', 'Float', 'Double', 'Rational',
+ 'Int', 'Integer', 'Float', 'Double', 'Rational', 'Word',
'ShowS', 'ReadS',
'IO', 'IOError', 'IOException'
),
@@ -114,7 +114,9 @@ $language_data = array (
'Ord', 'Eq', 'Enum', 'Bounded',
'Num', 'Real', 'Integral', 'Fractional',
'Floating', 'RealFrac', 'RealFloat',
- 'Monad', 'Functor',
+ 'Semigroup', 'Monoid',
+ 'Monad', 'Applicative', 'Functor',
+ 'Foldable', 'Traversable',
'Show', 'Read'
)
),
@@ -172,13 +174,13 @@ $language_data = array (
/* some of keywords are Prelude functions */
1 => '',
/* link to the wanted library */
- 2 => 'http://haskell.org/ghc/docs/latest/html/libraries/base/{FNAME}.html',
+ 2 => 'http://hackage.haskell.org/package/base/docs/{FNAME}.html',
/* link to Prelude functions */
- 3 => 'http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:{FNAME}',
+ 3 => 'http://hackage.haskell.org/package/base/docs/Prelude.html#v:{FNAME}',
/* link to Prelude types */
- 4 => 'http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:{FNAME}',
+ 4 => 'http://hackage.haskell.org/package/base/docs/Prelude.html#t:{FNAME}',
/* link to Prelude exceptions */
- 5 => 'http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#t:{FNAME}'
+ 5 => 'http://hackage.haskell.org/package/base/docs/Prelude.html#t:{FNAME}'
),
'OOLANG' => false,
'OBJECT_SPLITTERS' => array(
diff --git a/vendor/geshi/geshi/src/geshi/haxe.php b/vendor/geshi/geshi/src/geshi/haxe.php
index c9376bdff..f63674db0 100644
--- a/vendor/geshi/geshi/src/geshi/haxe.php
+++ b/vendor/geshi/geshi/src/geshi/haxe.php
@@ -6,7 +6,7 @@
* John Liao (colorhook@gmail.com)
* Copyright: (c) 2012 onthewings (http://www.onthewings.net/)
* 2010 colorhook (http://colorhook.com/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/10/05
*
* Haxe language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/hicest.php b/vendor/geshi/geshi/src/geshi/hicest.php
index b8639bbe2..f92f6d62f 100644
--- a/vendor/geshi/geshi/src/geshi/hicest.php
+++ b/vendor/geshi/geshi/src/geshi/hicest.php
@@ -4,7 +4,7 @@
* --------
* Author: Georg Petrich (spt@hicest.com)
* Copyright: (c) 2010 Georg Petrich (http://www.HicEst.com)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/03/15
*
* HicEst language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/hq9plus.php b/vendor/geshi/geshi/src/geshi/hq9plus.php
index 843f2d671..29878ed03 100644
--- a/vendor/geshi/geshi/src/geshi/hq9plus.php
+++ b/vendor/geshi/geshi/src/geshi/hq9plus.php
@@ -4,7 +4,7 @@
* ----------
* Author: Benny Baumann (BenBE@geshi.org)
* Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/10/31
*
* HQ9+ language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/html4strict.php b/vendor/geshi/geshi/src/geshi/html4strict.php
index 42ff9c707..56c40a19f 100644
--- a/vendor/geshi/geshi/src/geshi/html4strict.php
+++ b/vendor/geshi/geshi/src/geshi/html4strict.php
@@ -4,7 +4,7 @@
* ---------------
* Author: Nigel McNie (nigel@geshi.org)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/07/10
*
* HTML 4.01 strict language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/html5.php b/vendor/geshi/geshi/src/geshi/html5.php
index 25d33cb44..f6316f778 100644
--- a/vendor/geshi/geshi/src/geshi/html5.php
+++ b/vendor/geshi/geshi/src/geshi/html5.php
@@ -4,7 +4,7 @@
* ---------------
* Author: Nigel McNie (nigel@geshi.org)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/07/10
*
* HTML 5 language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/icon.php b/vendor/geshi/geshi/src/geshi/icon.php
index 10226902b..feb3d840f 100644
--- a/vendor/geshi/geshi/src/geshi/icon.php
+++ b/vendor/geshi/geshi/src/geshi/icon.php
@@ -4,7 +4,7 @@
* --------
* Author: Matt Oates (mattoates@gmail.com)
* Copyright: (c) 2010 Matt Oates (http://mattoates.co.uk)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/04/24
*
* Icon language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/idl.php b/vendor/geshi/geshi/src/geshi/idl.php
index f960f8b31..e7596cee2 100644
--- a/vendor/geshi/geshi/src/geshi/idl.php
+++ b/vendor/geshi/geshi/src/geshi/idl.php
@@ -4,7 +4,7 @@
* -------
* Author: Cedric Bosdonnat (cedricbosdo@openoffice.org)
* Copyright: (c) 2006 Cedric Bosdonnat
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2006/08/20
*
* Unoidl language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/ini.php b/vendor/geshi/geshi/src/geshi/ini.php
index fe0422498..bf25d4b6b 100644
--- a/vendor/geshi/geshi/src/geshi/ini.php
+++ b/vendor/geshi/geshi/src/geshi/ini.php
@@ -4,7 +4,7 @@
* --------
* Author: deguix (cevo_deguix@yahoo.com.br)
* Copyright: (c) 2005 deguix
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2005/03/27
*
* INI language file for GeSHi.
@@ -48,7 +48,7 @@ $language_data = array (
'COMMENT_MULTI' => array(),
'COMMENT_REGEXP' => array(0 => '/^\s*;.*?$/m'),
'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
- 'QUOTEMARKS' => array('"'),
+ 'QUOTEMARKS' => array('"', "'"),
'ESCAPE_CHAR' => '',
'KEYWORDS' => array(
),
diff --git a/vendor/geshi/geshi/src/geshi/inno.php b/vendor/geshi/geshi/src/geshi/inno.php
index 542719c50..32202af54 100644
--- a/vendor/geshi/geshi/src/geshi/inno.php
+++ b/vendor/geshi/geshi/src/geshi/inno.php
@@ -4,7 +4,7 @@
* ----------
* Author: Thomas Klingler (hotline@theratech.de) based on delphi.php from J�rja Norbert (jnorbi@vipmail.hu)
* Copyright: (c) 2004 J�rja Norbert, Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2005/07/29
*
* Inno Script language inkl. Delphi (Object Pascal) language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/intercal.php b/vendor/geshi/geshi/src/geshi/intercal.php
index 669050aae..5702d91ef 100644
--- a/vendor/geshi/geshi/src/geshi/intercal.php
+++ b/vendor/geshi/geshi/src/geshi/intercal.php
@@ -4,7 +4,7 @@
* ----------
* Author: Benny Baumann (BenBE@geshi.org)
* Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/10/31
*
* INTERCAL language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/io.php b/vendor/geshi/geshi/src/geshi/io.php
index 5c8b93fda..ce1c0e948 100644
--- a/vendor/geshi/geshi/src/geshi/io.php
+++ b/vendor/geshi/geshi/src/geshi/io.php
@@ -4,7 +4,7 @@
* -------
* Author: Nigel McNie (nigel@geshi.org)
* Copyright: (c) 2006 Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2006/09/23
*
* Io language file for GeSHi. Thanks to Johnathan Wright for the suggestion and help
diff --git a/vendor/geshi/geshi/src/geshi/ispfpanel.php b/vendor/geshi/geshi/src/geshi/ispfpanel.php
index 8e60eed98..37e04b67e 100644
--- a/vendor/geshi/geshi/src/geshi/ispfpanel.php
+++ b/vendor/geshi/geshi/src/geshi/ispfpanel.php
@@ -4,7 +4,7 @@
* -------------
* Author: Ramesh Vishveshwar (ramesh.vishveshwar@gmail.com)
* Copyright: (c) 2012 Ramesh Vishveshwar (http://thecodeisclear.in)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2012/09/18
*
* ISPF Panel Definition (MVS) language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/j.php b/vendor/geshi/geshi/src/geshi/j.php
index 499c489b7..c39e54f2d 100644
--- a/vendor/geshi/geshi/src/geshi/j.php
+++ b/vendor/geshi/geshi/src/geshi/j.php
@@ -4,7 +4,7 @@
* --------
* Author: Ric Sherlock (tikkanz@gmail.com)
* Copyright: (c) 2009 Ric Sherlock
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/11/10
*
* J language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/java.php b/vendor/geshi/geshi/src/geshi/java.php
index 59733b51c..71c2d713b 100644
--- a/vendor/geshi/geshi/src/geshi/java.php
+++ b/vendor/geshi/geshi/src/geshi/java.php
@@ -4,7 +4,7 @@
* --------
* Author: Nigel McNie (nigel@geshi.org)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/07/10
*
* Java language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/java5.php b/vendor/geshi/geshi/src/geshi/java5.php
index f9dbf3106..fbd0e30a5 100644
--- a/vendor/geshi/geshi/src/geshi/java5.php
+++ b/vendor/geshi/geshi/src/geshi/java5.php
@@ -4,7 +4,7 @@
* --------
* Author: Nigel McNie (nigel@geshi.org)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/07/10
*
* Java language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/javascript.php b/vendor/geshi/geshi/src/geshi/javascript.php
index bc13dc4e8..70fca9c79 100644
--- a/vendor/geshi/geshi/src/geshi/javascript.php
+++ b/vendor/geshi/geshi/src/geshi/javascript.php
@@ -4,7 +4,7 @@
* --------------
* Author: Ben Keen (ben.keen@gmail.com)
* Copyright: (c) 2004 Ben Keen (ben.keen@gmail.com), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/06/20
*
* JavaScript language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/jcl.php b/vendor/geshi/geshi/src/geshi/jcl.php
index 07e3b5084..9bc0c6c9c 100644
--- a/vendor/geshi/geshi/src/geshi/jcl.php
+++ b/vendor/geshi/geshi/src/geshi/jcl.php
@@ -4,7 +4,7 @@
* -----------
* Author: Ramesh Vishveshwar (ramesh.vishveshwar@gmail.com)
* Copyright: (c) 2012 Ramesh Vishveshwar (http://thecodeisclear.in)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2011/09/16
*
* JCL (MVS), DFSORT, IDCAMS language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/jquery.php b/vendor/geshi/geshi/src/geshi/jquery.php
index 0ffd83fb8..f8b9c118b 100644
--- a/vendor/geshi/geshi/src/geshi/jquery.php
+++ b/vendor/geshi/geshi/src/geshi/jquery.php
@@ -4,7 +4,7 @@
* --------------
* Author: Rob Loach (http://www.robloach.net)
* Copyright: (c) 2009 Rob Loach (http://www.robloach.net)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/07/20
*
* jQuery 1.3 language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/julia.php b/vendor/geshi/geshi/src/geshi/julia.php
index 93459c561..70848e62b 100644
--- a/vendor/geshi/geshi/src/geshi/julia.php
+++ b/vendor/geshi/geshi/src/geshi/julia.php
@@ -7,7 +7,7 @@
* - Magnus Lie Hetland
* - Curtis Vogt
* Copyright: (c) 2013 John Lynch
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2013/11/06
*
* Julia language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/kixtart.php b/vendor/geshi/geshi/src/geshi/kixtart.php
index 7f66e74f4..0d67f64c5 100644
--- a/vendor/geshi/geshi/src/geshi/kixtart.php
+++ b/vendor/geshi/geshi/src/geshi/kixtart.php
@@ -4,7 +4,7 @@
* --------
* Author: Riley McArdle (riley@glyff.net)
* Copyright: (c) 2007 Riley McArdle (http://www.glyff.net/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2007/08/31
*
* PHP language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/klonec.php b/vendor/geshi/geshi/src/geshi/klonec.php
index 58f2d7b43..faecffe71 100644
--- a/vendor/geshi/geshi/src/geshi/klonec.php
+++ b/vendor/geshi/geshi/src/geshi/klonec.php
@@ -4,7 +4,7 @@
* --------
* Author: AUGER Mickael
* Copyright: Synchronic
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/04/16
*
* KLone with C language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/klonecpp.php b/vendor/geshi/geshi/src/geshi/klonecpp.php
index 4b71cba3d..7f5949d9f 100644
--- a/vendor/geshi/geshi/src/geshi/klonecpp.php
+++ b/vendor/geshi/geshi/src/geshi/klonecpp.php
@@ -4,7 +4,7 @@
* --------
* Author: AUGER Mickael
* Copyright: Synchronic
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/04/16
*
* KLone with C++ language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/kotlin.php b/vendor/geshi/geshi/src/geshi/kotlin.php
index cb20ad8ac..d83e76cf9 100644
--- a/vendor/geshi/geshi/src/geshi/kotlin.php
+++ b/vendor/geshi/geshi/src/geshi/kotlin.php
@@ -4,7 +4,7 @@
* --------
* Author: Ole Sandum (oksandum@gmail.com)
* Copyright: (c) 2017 Ole Sandum
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/07/10
*
* Kotlin language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/latex.php b/vendor/geshi/geshi/src/geshi/latex.php
index d03dde924..79f1f9dec 100644
--- a/vendor/geshi/geshi/src/geshi/latex.php
+++ b/vendor/geshi/geshi/src/geshi/latex.php
@@ -4,7 +4,7 @@
* -----
* Author: efi, Matthias Pospiech (matthias@pospiech.eu)
* Copyright: (c) 2006 efi, Matthias Pospiech (matthias@pospiech.eu), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2006/09/23
*
* LaTeX language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/lb.php b/vendor/geshi/geshi/src/geshi/lb.php
index 6882ea86d..b1193c0ae 100644
--- a/vendor/geshi/geshi/src/geshi/lb.php
+++ b/vendor/geshi/geshi/src/geshi/lb.php
@@ -4,7 +4,7 @@
* --------
* Author: Chris Iverson (cj.no.one@gmail.com)
* Copyright: (c) 2010 Chris Iverson
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/07/18
*
* Liberty BASIC language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/ldif.php b/vendor/geshi/geshi/src/geshi/ldif.php
index 86be996c7..b77b8ee2e 100644
--- a/vendor/geshi/geshi/src/geshi/ldif.php
+++ b/vendor/geshi/geshi/src/geshi/ldif.php
@@ -4,7 +4,7 @@
* --------
* Author: Bruno Harbulot (Bruno.Harbulot@manchester.ac.uk)
* Copyright: (c) 2005 deguix, (c) 2010 Bruno Harbulot
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/03/01
*
* LDIF language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/lisp.php b/vendor/geshi/geshi/src/geshi/lisp.php
index 9b3dbf832..5029ca225 100644
--- a/vendor/geshi/geshi/src/geshi/lisp.php
+++ b/vendor/geshi/geshi/src/geshi/lisp.php
@@ -4,7 +4,7 @@
* --------
* Author: Roberto Rossi (rsoftware@altervista.org)
* Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/08/30
*
* Generic Lisp language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/llvm.php b/vendor/geshi/geshi/src/geshi/llvm.php
index ca375bb1f..0c19c7d92 100644
--- a/vendor/geshi/geshi/src/geshi/llvm.php
+++ b/vendor/geshi/geshi/src/geshi/llvm.php
@@ -4,7 +4,7 @@
* --------
* Author: Benny Baumann (BenBE@geshi.org), Azriel Fasten (azriel.fasten@gmail.com)
* Copyright: (c) 2010 Benny Baumann (http://qbnz.com/highlighter/), Azriel Fasten (azriel.fasten@gmail.com)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/10/14
*
* LLVM language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/locobasic.php b/vendor/geshi/geshi/src/geshi/locobasic.php
index 596cb1207..709de5d0e 100644
--- a/vendor/geshi/geshi/src/geshi/locobasic.php
+++ b/vendor/geshi/geshi/src/geshi/locobasic.php
@@ -4,7 +4,7 @@
* -------------
* Author: Nacho Cabanes
* Copyright: (c) 2009 Nacho Cabanes (http://www.nachocabanes.com)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/03/22
*
* Locomotive Basic (Amstrad CPC series) language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/logtalk.php b/vendor/geshi/geshi/src/geshi/logtalk.php
index a3ed129a3..a4af76cc5 100644
--- a/vendor/geshi/geshi/src/geshi/logtalk.php
+++ b/vendor/geshi/geshi/src/geshi/logtalk.php
@@ -5,7 +5,7 @@
*
* Author: Paulo Moura (pmoura@logtalk.org)
* Copyright: (c) 2009-2011 Paulo Moura (http://logtalk.org/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/10/24
*
* Logtalk language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/lolcode.php b/vendor/geshi/geshi/src/geshi/lolcode.php
index 39cae2014..f473c0dcf 100644
--- a/vendor/geshi/geshi/src/geshi/lolcode.php
+++ b/vendor/geshi/geshi/src/geshi/lolcode.php
@@ -4,7 +4,7 @@
* ----------
* Author: Benny Baumann (BenBE@geshi.org)
* Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/10/31
*
* LOLcode language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/lotusformulas.php b/vendor/geshi/geshi/src/geshi/lotusformulas.php
index 4f1c67819..57d34f3d5 100644
--- a/vendor/geshi/geshi/src/geshi/lotusformulas.php
+++ b/vendor/geshi/geshi/src/geshi/lotusformulas.php
@@ -4,7 +4,7 @@
* ------------------------
* Author: Richard Civil (info@richardcivil.net)
* Copyright: (c) 2008 Richard Civil (info@richardcivil.net), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/04/12
*
* @Formula/@Command language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/lotusscript.php b/vendor/geshi/geshi/src/geshi/lotusscript.php
index 069e603a6..8e41f3675 100644
--- a/vendor/geshi/geshi/src/geshi/lotusscript.php
+++ b/vendor/geshi/geshi/src/geshi/lotusscript.php
@@ -4,7 +4,7 @@
* ------------------------
* Author: Richard Civil (info@richardcivil.net)
* Copyright: (c) 2008 Richard Civil (info@richardcivil.net), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/04/12
*
* LotusScript language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/lscript.php b/vendor/geshi/geshi/src/geshi/lscript.php
index 432d54aab..a73e786b7 100644
--- a/vendor/geshi/geshi/src/geshi/lscript.php
+++ b/vendor/geshi/geshi/src/geshi/lscript.php
@@ -4,7 +4,7 @@
* ---------
* Author: Arendedwinter (admin@arendedwinter.com)
* Copyright: (c) 2008 Beau McGuigan (http://www.arendedwinter.com)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 15/11/2008
*
* Lightwave Script language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/lsl2.php b/vendor/geshi/geshi/src/geshi/lsl2.php
index 608b5e124..94f475457 100644
--- a/vendor/geshi/geshi/src/geshi/lsl2.php
+++ b/vendor/geshi/geshi/src/geshi/lsl2.php
@@ -4,7 +4,7 @@
* --------
* Author: William Fry (william.fry@nyu.edu)
* Copyright: (c) 2009 William Fry
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/02/04
*
* Linden Scripting Language (LSL2) language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/lua.php b/vendor/geshi/geshi/src/geshi/lua.php
index 313bbb535..2b8ebc409 100644
--- a/vendor/geshi/geshi/src/geshi/lua.php
+++ b/vendor/geshi/geshi/src/geshi/lua.php
@@ -4,7 +4,7 @@
* -------
* Author: Roberto Rossi (rsoftware@altervista.org)
* Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/07/10
*
* LUA language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/m68k.php b/vendor/geshi/geshi/src/geshi/m68k.php
index e2040a648..2d995c56f 100644
--- a/vendor/geshi/geshi/src/geshi/m68k.php
+++ b/vendor/geshi/geshi/src/geshi/m68k.php
@@ -4,7 +4,7 @@
* --------
* Author: Benny Baumann (BenBE@omorphia.de)
* Copyright: (c) 2007 Benny Baumann (http://www.omorphia.de/), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2007/02/06
*
* Motorola 68000 Assembler language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/magiksf.php b/vendor/geshi/geshi/src/geshi/magiksf.php
index 154cd26d3..44f069d8f 100644
--- a/vendor/geshi/geshi/src/geshi/magiksf.php
+++ b/vendor/geshi/geshi/src/geshi/magiksf.php
@@ -4,7 +4,7 @@
* --------
* Author: Sjoerd van Leent (svanleent@gmail.com)
* Copyright: (c) 2010 Sjoerd van Leent
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/02/15
*
* MagikSF language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/make.php b/vendor/geshi/geshi/src/geshi/make.php
index fa3193e7e..6ea601f21 100644
--- a/vendor/geshi/geshi/src/geshi/make.php
+++ b/vendor/geshi/geshi/src/geshi/make.php
@@ -4,7 +4,7 @@
* --------
* Author: Neil Bird <phoenix@fnxweb.com>
* Copyright: (c) 2008 Neil Bird
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/08/26
*
* make language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/mapbasic.php b/vendor/geshi/geshi/src/geshi/mapbasic.php
index d85e5741b..383bb51d2 100644
--- a/vendor/geshi/geshi/src/geshi/mapbasic.php
+++ b/vendor/geshi/geshi/src/geshi/mapbasic.php
@@ -4,7 +4,7 @@
* ------
* Author: Tomasz Berus (t.berus@gisodkuchni.pl)
* Copyright: (c) 2009 Tomasz Berus (http://sourceforge.net/projects/mbsyntax/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/11/25
*
* MapBasic language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/mathematica.php b/vendor/geshi/geshi/src/geshi/mathematica.php
index 77d8653a0..238ccdef9 100644
--- a/vendor/geshi/geshi/src/geshi/mathematica.php
+++ b/vendor/geshi/geshi/src/geshi/mathematica.php
@@ -4,7 +4,7 @@
* --------
* Author: Connor Glosser (glosser1@gmail.com)
* Copyright: (c) 2014 Connor Glosser (http://www.msu.edu/~glosser1)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2014/08/11
*
* Mathematica language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/matlab.php b/vendor/geshi/geshi/src/geshi/matlab.php
index f6e8ee5f2..84c0209c6 100644
--- a/vendor/geshi/geshi/src/geshi/matlab.php
+++ b/vendor/geshi/geshi/src/geshi/matlab.php
@@ -4,7 +4,7 @@
* -----------
* Author: Florian Knorn (floz@gmx.de)
* Copyright: (c) 2004 Florian Knorn (http://www.florian-knorn.com)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2005/02/09
*
* Matlab M-file language file for GeSHi.
@@ -53,7 +53,7 @@ $language_data = array (
'ESCAPE_CHAR' => '',
'KEYWORDS' => array(
1 => array(
- 'break', 'case', 'catch', 'continue', 'elseif', 'else', 'end', 'for',
+ 'break', 'case', 'catch', 'classdef', 'continue', 'elseif', 'else', 'end', 'for',
'function', 'global', 'if', 'otherwise', 'persistent', 'return',
'switch', 'try', 'while'
),
@@ -61,12 +61,12 @@ $language_data = array (
'all','any','exist','is','logical','mislocked',
'abs','acos','acosh','acot','acoth','acsc','acsch','airy','angle',
- 'ans','area','asec','asech','asin','asinh','atan','atan2','atanh',
+ 'ans','area','arrayfun','asec','asech','asin','asinh','atan','atan2','atanh',
'auread','autumn','auwrite','axes','axis','balance','bar','bar3',
'bar3h','barh','besselh','besseli','besselj','besselk','Bessely',
'beta','betainc','betaln','bicg','bicgstab','bin2dec','bitand',
'bitcmp','bitget','bitmax','bitor','bitset','bitshift','bitxor',
- 'blkdiag','bone','box','brighten','builtin','bwcontr','calendar',
+ 'blkdiag','bone','bounds','box','brighten','builtin','bwcontr','calendar',
'camdolly','camlight','camlookat','camorbit','campan','campos',
'camproj','camroll','camtarget','camup','camva','camzoom','capture',
'cart2pol','cart2sph','cat','caxis','cdf2rdf','ceil','cell',
@@ -78,12 +78,12 @@ $language_data = array (
'contour','contourc','contourf','contourslice','contrast','conv',
'conv2','convhull','cool','copper','copyobj','corrcoef','cos',
'cosh','cot','coth','cov','cplxpair','cputime','cross','csc','csch',
- 'cumprod','cumsum','cumtrapz','cylinder','daspect','date','datenum',
- 'datestr','datetick','datevec','dbclear','dbcont','dbdown',
+ 'cumprod','cumsum','cumtrapz','cylinder','daspect','dataset','datastore','date','datenum',
+ 'datestr','datetick','datetime','datevec','dbclear','dbcont','dbdown',
'dblquad','dbmex','dbquit','dbstack','dbstatus','dbstep','dbstop',
'dbtype','dbup','deblank','dec2bin','dec2hex','deconv','del2',
- 'delaunay','det','diag','dialog','diff','diffuse','dlmread',
- 'dlmwrite','dmperm','double','dragrect','drawnow','dsearch','eig',
+ 'delaunay','det','diag','dialog','diff','diffuse','discretize','dlmread',
+ 'dlmwrite','dmperm','double','dragrect','drawnow','dsearch','duration','eig',
'eigs','ellipj','ellipke','eomday','eps','erf','erfc','erfcx',
'erfiny','error','errorbar','errordlg','etime','eval','evalc',
'evalin','exp','expint','expm','eye','ezcontour','ezcontourf',
@@ -96,19 +96,20 @@ $language_data = array (
'fseek','ftell','full','funm','fwrite','fzero','gallery','gamma',
'gammainc','gammaln','gca','gcbo','gcd','gcf','gco','get',
'getfield','ginput','gmres','gradient','gray','graymon','grid',
- 'griddata','gsvd','gtext','hadamard','hankel','hdf','helpdlg',
+ 'griddata','gsvd','gtext','hadamard','hankel','hdf','head','helpdlg',
'hess','hex2dec','hex2num','hidden','hilb','hist','hold','hot',
'hsv','hsv2rgb','i','ifft','ifft2','ifftn','ifftshift','imag',
'image','imfinfo','imread','imwrite','ind2sub','Inf','inferiorto',
'inline','inpolygon','input','inputdlg','inputname','int16',
- 'int2str','int32','int8','interp1','interp2','interp3','interpft',
- 'interpn','intersect','inv','invhilb','ipermute','isa','ishandle',
- 'ismember','isocaps','isonormals','isosurface','j','jet','keyboard',
+ 'int2str','int32','int8','int64','interp1','interp2','interp3','interpft',
+ 'interpn','intersect','inv','invhilb','ipermute','isa','iscell',
+ 'iscellstr','isfile','isfolder','ishandle','isinf',
+ 'ismember','isnan','isocaps','isonormals','isosurface','issorted','j','jet','keyboard',
'lcm','legend','legendre','light','lighting','lightingangle',
'lin2mu','line','lines','linspace','listdlg','loadobj','log',
'log10','log2','loglog','logm','logspace','lower','lscov','lu',
'luinc','magic','mat2str','material','max','mean','median','menu',
- 'menuedit','mesh','meshc','meshgrid','min','mod','msgbox','mu2lin',
+ 'menuedit','mesh','meshc','meshgrid','min','missing','mod','msgbox','mu2lin',
'NaN','nargchk','nargin','nargout','nchoosek','ndgrid','ndims',
'newplot','nextpow2','nnls','nnz','nonzeros','norm','normest','now',
'null','num2cell','num2str','nzmax','ode113,','ode15s,','ode23s,',
@@ -120,7 +121,7 @@ $language_data = array (
'polyvalm','pow2','primes','print','printdlg','printopt','prism',
'prod','propedit','qmr','qr','qrdelete','qrinsert','qrupdate',
'quad','questdlg','quiver','quiver3','qz','rand','randn','randperm',
- 'rank','rat','rats','rbbox','rcond','real','realmax','realmin',
+ 'rank','rat','rats','rbbox','rcond','readtable','real','realmax','realmin',
'rectangle','reducepatch','reducevolume','refresh','rem','repmat',
'reset','reshape','residue','rgb2hsv','rgbplot','ribbon','rmfield',
'roots','rose','rot90','rotate','rotate3d','round','rref',
@@ -133,27 +134,27 @@ $language_data = array (
'spline','spones','spparms','sprand','sprandn','sprandsym','spring',
'sprintf','sqrt','sqrtm','squeeze','sscanf','stairs','std','stem',
'stem3','str2double','str2num','strcat','strcmp','strcmpi',
- 'stream2','stream3','streamline','strings','strjust','strmatch',
- 'strncmp','strrep','strtok','struct','struct2cell','strvcat',
+ 'stream2','stream3','streamline','string','strings','strjust','strmatch',
+ 'strncmp','strrep','strtok','struct','structfun','struct2cell','strvcat',
'sub2ind','subplot','subspace','subvolume','sum','summer',
'superiorto','surf','surf2patch','surface','surfc','surfl',
- 'surfnorm','svd','svds','symmmd','symrcm','symvar','tan','tanh',
- 'texlabel','text Create','textread','textwrap','tic','title','toc',
+ 'surfnorm','svd','svds','symmmd','symrcm','symvar','tail','tall','tan','tanh',
+ 'texlabel','text Create','textread','textwrap','tic','timeseries','timer','timetable','title','toc',
'toeplitz','trace','trapz','tril','trimesh','trisurf','triu',
'tsearch','uicontext Create','uicontextmenu','uicontrol',
- 'uigetfile','uimenu','uint32','uint8','uiputfile','uiresume',
+ 'uigetfile','uimenu','uint32','uint8','uint64','uiputfile','uiresume',
'uisetcolor','uisetfont','uiwait Used','union','unique','unwrap',
'upper','var','varargin','varargout','vectorize','view','viewmtx',
'voronoi','waitbar','waitforbuttonpress','warndlg','warning',
'waterfall','wavread','wavwrite','weekday','whitebg','wilkinson',
- 'winter','wk1read','wk1write','xlabel','xlim','ylabel','ylim',
+ 'winter','wk1read','wk1write','writetable','xlabel','xlim','ylabel','ylim',
'zeros','zlabel','zlim','zoom',
//'[Keywords 6]',
'addpath','cd','clear','copyfile','delete','diary','dir','disp',
'doc','docopt','echo','edit','fileparts','format','fullfile','help',
'helpdesk','helpwin','home','inmem','lasterr','lastwarn','length',
'load','lookfor','ls','matlabrc','matlabroot','mkdir','mlock',
- 'more','munlock','open','openvar','pack','partialpath','path',
+ 'more','munlock','numel','open','openvar','pack','partialpath','path',
'pathtool','profile','profreport','pwd','quit','rmpath','save',
'saveas','size','tempdir','tempname','type','ver','version','web',
'what','whatsnew','which','who','whos','workspace'
@@ -206,7 +207,7 @@ $language_data = array (
),
'URLS' => array(
1 => '',
- 2 => 'http://www.mathworks.com/access/helpdesk/help/techdoc/ref/{FNAMEL}.html'
+ 2 => 'https://www.mathworks.com/help/matlab/ref/{FNAMEL}.html'
),
'OOLANG' => true,
'OBJECT_SPLITTERS' => array(
diff --git a/vendor/geshi/geshi/src/geshi/mercury.php b/vendor/geshi/geshi/src/geshi/mercury.php
index 9f77e4b6e..df8c9bbea 100644
--- a/vendor/geshi/geshi/src/geshi/mercury.php
+++ b/vendor/geshi/geshi/src/geshi/mercury.php
@@ -4,7 +4,7 @@
* --------
* Author: Sebastian Godelet (sebastian.godelet+github@gmail.com)
* Copyright: (c) 2014
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2014/10/30
*
* Mercury language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/metapost.php b/vendor/geshi/geshi/src/geshi/metapost.php
index f5944cbc8..83882d8e6 100644
--- a/vendor/geshi/geshi/src/geshi/metapost.php
+++ b/vendor/geshi/geshi/src/geshi/metapost.php
@@ -4,7 +4,7 @@
* -----------
* Author: Maxime Chupin (notezik@gmail.com)
* Copyright: (c) 2011 Maxime Chupin
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2011/08/02
*
* Metapost language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/mirc.php b/vendor/geshi/geshi/src/geshi/mirc.php
index 4aea845e8..a58b45fb7 100644
--- a/vendor/geshi/geshi/src/geshi/mirc.php
+++ b/vendor/geshi/geshi/src/geshi/mirc.php
@@ -4,7 +4,7 @@
* -----
* Author: Alberto 'Birckin' de Areba (Birckin@hotmail.com)
* Copyright: (c) 2006 Alberto de Areba
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2006/05/29
*
* mIRC Scripting language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/mk-61.php b/vendor/geshi/geshi/src/geshi/mk-61.php
index 653a3363d..669799ce9 100644
--- a/vendor/geshi/geshi/src/geshi/mk-61.php
+++ b/vendor/geshi/geshi/src/geshi/mk-61.php
@@ -4,7 +4,7 @@
*
* Author: Russkiy
* Copyright: (c) 2014 Russkiy
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2014-03-11
*
*********************************************************************
diff --git a/vendor/geshi/geshi/src/geshi/mmix.php b/vendor/geshi/geshi/src/geshi/mmix.php
index 5c8178c04..21fc061d7 100644
--- a/vendor/geshi/geshi/src/geshi/mmix.php
+++ b/vendor/geshi/geshi/src/geshi/mmix.php
@@ -4,7 +4,7 @@
* -------
* Author: Benny Baumann (BenBE@geshi.org)
* Copyright: (c) 2009 Benny Baumann (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/10/16
*
* MMIX Assembler language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/modula2.php b/vendor/geshi/geshi/src/geshi/modula2.php
index 2a20973b6..850b9e645 100644
--- a/vendor/geshi/geshi/src/geshi/modula2.php
+++ b/vendor/geshi/geshi/src/geshi/modula2.php
@@ -4,7 +4,7 @@
* -----------
* Author: Benjamin Kowarsch (benjamin@modula2.net)
* Copyright: (c) 2009 Benjamin Kowarsch (benjamin@modula2.net)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/11/05
*
* Modula-2 language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/modula3.php b/vendor/geshi/geshi/src/geshi/modula3.php
index b3c223cad..1ba83f687 100644
--- a/vendor/geshi/geshi/src/geshi/modula3.php
+++ b/vendor/geshi/geshi/src/geshi/modula3.php
@@ -4,7 +4,7 @@
* ----------
* Author: mbishop (mbishop@esoteriq.org)
* Copyright: (c) 2009 mbishop (mbishop@esoteriq.org)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/01/21
*
* Modula-3 language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/mpasm.php b/vendor/geshi/geshi/src/geshi/mpasm.php
index e6cf70e6c..42c85a1cc 100644
--- a/vendor/geshi/geshi/src/geshi/mpasm.php
+++ b/vendor/geshi/geshi/src/geshi/mpasm.php
@@ -4,7 +4,7 @@
* ---------
* Author: Bakalex (bakalex@gmail.com)
* Copyright: (c) 2004 Bakalex, Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/12/6
*
* Microchip Assembler language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/mxml.php b/vendor/geshi/geshi/src/geshi/mxml.php
index 4bac67252..afc076936 100644
--- a/vendor/geshi/geshi/src/geshi/mxml.php
+++ b/vendor/geshi/geshi/src/geshi/mxml.php
@@ -4,7 +4,7 @@
* -------
* Author: David Spurr
* Copyright: (c) 2007 David Spurr (http://www.defusion.org.uk/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2007/10/04
*
* MXML language file for GeSHi. Based on the XML file by Nigel McNie
diff --git a/vendor/geshi/geshi/src/geshi/mysql.php b/vendor/geshi/geshi/src/geshi/mysql.php
index e62a122d2..afe86841c 100644
--- a/vendor/geshi/geshi/src/geshi/mysql.php
+++ b/vendor/geshi/geshi/src/geshi/mysql.php
@@ -4,7 +4,7 @@
* ---------
* Author: Marjolein Katsma (marjolein.is.back@gmail.com)
* Copyright: (c) 2008 Marjolein Katsma (http://blog.marjoleinkatsma.com/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008-12-12
*
* MySQL language file for GeSHi.
@@ -390,15 +390,15 @@ $language_data = array (
)
),
'URLS' => array(
- 1 => 'http://search.oracle.com/search/search?group=MySQL&amp;q={FNAME}',
- 2 => 'http://search.oracle.com/search/search?group=MySQL&amp;q={FNAME}',
- 3 => 'http://search.oracle.com/search/search?group=MySQL&amp;q={FNAME}',
- 4 => 'http://search.oracle.com/search/search?group=MySQL&amp;q={FNAME}',
- 5 => 'http://search.oracle.com/search/search?group=MySQL&amp;q={FNAME}',
- 6 => 'http://search.oracle.com/search/search?group=MySQL&amp;q={FNAME}',
- 7 => 'http://search.oracle.com/search/search?group=MySQL&amp;q={FNAME}',
- 8 => 'http://search.oracle.com/search/search?group=MySQL&amp;q={FNAME}',
- 9 => 'http://search.oracle.com/search/search?group=MySQL&amp;q={FNAME}',
+ 1 => 'https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt={FNAME}',
+ 2 => 'https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt={FNAME}',
+ 3 => 'https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt={FNAME}',
+ 4 => 'https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt={FNAME}',
+ 5 => 'https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt={FNAME}',
+ 6 => 'https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt={FNAME}',
+ 7 => 'https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt={FNAME}',
+ 8 => 'https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt={FNAME}',
+ 9 => 'https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt={FNAME}',
10 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/non-typed-operators.html',
11 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/non-typed-operators.html',
diff --git a/vendor/geshi/geshi/src/geshi/nagios.php b/vendor/geshi/geshi/src/geshi/nagios.php
index ac6d63a90..2358598ab 100644
--- a/vendor/geshi/geshi/src/geshi/nagios.php
+++ b/vendor/geshi/geshi/src/geshi/nagios.php
@@ -4,7 +4,7 @@
* --------
* Author: Albéric de Pertat <alberic@depertat.net>
* Copyright: (c) 2012 Albéric de Pertat (https://github.com/adepertat/geshi-nagios)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2012/01/19
*
* Nagios language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/netrexx.php b/vendor/geshi/geshi/src/geshi/netrexx.php
index 38e09fafb..a6d444b72 100644
--- a/vendor/geshi/geshi/src/geshi/netrexx.php
+++ b/vendor/geshi/geshi/src/geshi/netrexx.php
@@ -6,7 +6,7 @@
* Contributors:
* - Walter Pachl (pachl@chello.at)
* Copyright: (c) 2008 Jon Wolfers, (c) 2012 Walter Pachl
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/01/07
*
* NetRexx language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/newlisp.php b/vendor/geshi/geshi/src/geshi/newlisp.php
index b5a943152..2daa72bb6 100644
--- a/vendor/geshi/geshi/src/geshi/newlisp.php
+++ b/vendor/geshi/geshi/src/geshi/newlisp.php
@@ -4,7 +4,7 @@
* ----------
* Author: cormullion (cormullion@mac.com) Sept 2009
* Copyright: (c) 2009 Cormullion (http://unbalanced-parentheses.nfshost.com/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/09/30
*
* newLISP language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/nginx.php b/vendor/geshi/geshi/src/geshi/nginx.php
index 47ced0ab2..ab2a9fb48 100644
--- a/vendor/geshi/geshi/src/geshi/nginx.php
+++ b/vendor/geshi/geshi/src/geshi/nginx.php
@@ -7,7 +7,7 @@
* Contributors:
* - Deoren Moor (http://www.whyaskwhy.org/blog/)
* - Thomas Joiner
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/08/24
*
* nginx language file for GeSHi.
@@ -864,5 +864,10 @@ $language_data = array (
),
'STRICT_MODE_APPLIES' => GESHI_NEVER,
'SCRIPT_DELIMITERS' => array(),
- 'HIGHLIGHT_STRICT_BLOCK' => array()
+ 'HIGHLIGHT_STRICT_BLOCK' => array(),
+ 'PARSER_CONTROL' => array(
+ 'ENABLE_FLAGS' => array(
+ 'NUMBERS' => GESHI_NEVER
+ )
+ )
);
diff --git a/vendor/geshi/geshi/src/geshi/nimrod.php b/vendor/geshi/geshi/src/geshi/nimrod.php
index a85edfbbc..1be79705e 100644
--- a/vendor/geshi/geshi/src/geshi/nimrod.php
+++ b/vendor/geshi/geshi/src/geshi/nimrod.php
@@ -4,7 +4,7 @@
* ----------
* Author: Dennis Felsing (dennis@felsin9.de)
* Copyright: (c) 2014 Dennis Felsing
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2014/07/15
*
* Nimrod language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/nsis.php b/vendor/geshi/geshi/src/geshi/nsis.php
index 61da046bb..3fb54a094 100644
--- a/vendor/geshi/geshi/src/geshi/nsis.php
+++ b/vendor/geshi/geshi/src/geshi/nsis.php
@@ -4,7 +4,7 @@
* --------
* Author: deguix (cevo_deguix@yahoo.com.br), Tux (http://tux.a4.cz/), Jan T. Sott (http://github.com/idleberg)
* Copyright: (c) 2005 deguix, 2004 Tux (http://tux.a4.cz/), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2005/12/03
*
* Nullsoft Scriptable Install System language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/oberon2.php b/vendor/geshi/geshi/src/geshi/oberon2.php
index 8540cadf4..38a191594 100644
--- a/vendor/geshi/geshi/src/geshi/oberon2.php
+++ b/vendor/geshi/geshi/src/geshi/oberon2.php
@@ -4,7 +4,7 @@
* ----------
* Author: mbishop (mbishop@esoteriq.org)
* Copyright: (c) 2009 mbishop (mbishop@esoteriq.org)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/02/10
*
* Oberon-2 language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/objc.php b/vendor/geshi/geshi/src/geshi/objc.php
index 3fdf49ae1..0f6ee1d75 100644
--- a/vendor/geshi/geshi/src/geshi/objc.php
+++ b/vendor/geshi/geshi/src/geshi/objc.php
@@ -5,7 +5,7 @@
* Author: M. Uli Kusterer (witness.of.teachtext@gmx.net)
* Contributors: Quinn Taylor (quinntaylor@mac.com)
* Copyright: (c) 2008 Quinn Taylor, 2004 M. Uli Kusterer, Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/06/04
*
* Objective-C language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/objeck.php b/vendor/geshi/geshi/src/geshi/objeck.php
index 6fab2d07c..465db8911 100644
--- a/vendor/geshi/geshi/src/geshi/objeck.php
+++ b/vendor/geshi/geshi/src/geshi/objeck.php
@@ -4,7 +4,7 @@
* --------
* Author: Randy Hollines (objeck@gmail.com)
* Copyright: (c) 2010 Randy Hollines (http://code.google.com/p/objeck-lang/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/07/01
*
* Objeck Programming Language language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/ocaml-brief.php b/vendor/geshi/geshi/src/geshi/ocaml-brief.php
index f63c9e794..1d7563e70 100644
--- a/vendor/geshi/geshi/src/geshi/ocaml-brief.php
+++ b/vendor/geshi/geshi/src/geshi/ocaml-brief.php
@@ -4,7 +4,7 @@
* ----------
* Author: Flaie (fireflaie@gmail.com)
* Copyright: (c) 2005 Flaie, Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2005/08/27
*
* OCaml (Objective Caml) language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/ocaml.php b/vendor/geshi/geshi/src/geshi/ocaml.php
index 4e14082fd..e9e57ef66 100644
--- a/vendor/geshi/geshi/src/geshi/ocaml.php
+++ b/vendor/geshi/geshi/src/geshi/ocaml.php
@@ -4,7 +4,7 @@
* ----------
* Author: Flaie (fireflaie@gmail.com)
* Copyright: (c) 2005 Flaie, Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2005/08/27
*
* OCaml (Objective Caml) language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/octave.php b/vendor/geshi/geshi/src/geshi/octave.php
index a77e5da77..999ab261f 100644
--- a/vendor/geshi/geshi/src/geshi/octave.php
+++ b/vendor/geshi/geshi/src/geshi/octave.php
@@ -6,7 +6,7 @@
* Juan Pablo Carbajal (carbajal@ifi.uzh.ch)
* Copyright: (c) 2012 Carnë Draug
* (c) 2012 Juan Pablo Carbajal
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2012/05/22
*
* GNU/Octave M-file language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/oobas.php b/vendor/geshi/geshi/src/geshi/oobas.php
index e6f5efd68..b022ebf69 100644
--- a/vendor/geshi/geshi/src/geshi/oobas.php
+++ b/vendor/geshi/geshi/src/geshi/oobas.php
@@ -4,7 +4,7 @@
* ---------
* Author: Roberto Rossi (rsoftware@altervista.org)
* Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/08/30
*
* OpenOffice.org Basic language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/oorexx.php b/vendor/geshi/geshi/src/geshi/oorexx.php
index 5fde8008b..db629b53a 100644
--- a/vendor/geshi/geshi/src/geshi/oorexx.php
+++ b/vendor/geshi/geshi/src/geshi/oorexx.php
@@ -6,7 +6,7 @@
* Contributors:
* - Walter Pachl (pachl@chello.at)
* Copyright: (c) 2008 Jon Wolfers, (c) 2012 Walter Pachl
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/01/07
*
* ooRexx language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/oracle11.php b/vendor/geshi/geshi/src/geshi/oracle11.php
index 36b208279..0e2cf4a28 100644
--- a/vendor/geshi/geshi/src/geshi/oracle11.php
+++ b/vendor/geshi/geshi/src/geshi/oracle11.php
@@ -6,7 +6,7 @@
* Contributions:
* - Updated for 11i by Simon Redhead
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/06/04
*
* Oracle 11i language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/oracle8.php b/vendor/geshi/geshi/src/geshi/oracle8.php
index f13209029..f723e65bb 100644
--- a/vendor/geshi/geshi/src/geshi/oracle8.php
+++ b/vendor/geshi/geshi/src/geshi/oracle8.php
@@ -4,7 +4,7 @@
* -----------
* Author: Guy Wicks (Guy.Wicks@rbs.co.uk)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/06/04
*
* Oracle 8 language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/oxygene.php b/vendor/geshi/geshi/src/geshi/oxygene.php
index 662bba2b1..ac7e88c47 100644
--- a/vendor/geshi/geshi/src/geshi/oxygene.php
+++ b/vendor/geshi/geshi/src/geshi/oxygene.php
@@ -4,7 +4,7 @@
* ----------
* Author: Carlo Kok (ck@remobjects.com), J�rja Norbert (jnorbi@vipmail.hu), Benny Baumann (BenBE@omorphia.de)
* Copyright: (c) 2004 J�rja Norbert, Benny Baumann (BenBE@omorphia.de), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/01/11
*
* Delphi Prism (Oxygene) language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/oz.php b/vendor/geshi/geshi/src/geshi/oz.php
index 3b965663f..943eb8dd2 100644
--- a/vendor/geshi/geshi/src/geshi/oz.php
+++ b/vendor/geshi/geshi/src/geshi/oz.php
@@ -4,7 +4,7 @@
* --------
* Author: Wolfgang Meyer (Wolfgang.Meyer@gmx.net)
* Copyright: (c) 2010 Wolfgang Meyer
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/01/03
*
* Oz language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/parasail.php b/vendor/geshi/geshi/src/geshi/parasail.php
index a72d8457d..7a136b9ee 100644
--- a/vendor/geshi/geshi/src/geshi/parasail.php
+++ b/vendor/geshi/geshi/src/geshi/parasail.php
@@ -4,7 +4,7 @@
* -------
* Author: T. Taft (taft@adacore.com)
* Copyright: (c) 2012 AdaCore (http://adacore.com/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2012/08/02
*
* ParaSail language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/parigp.php b/vendor/geshi/geshi/src/geshi/parigp.php
index 9c6a143cb..fe99c10fd 100644
--- a/vendor/geshi/geshi/src/geshi/parigp.php
+++ b/vendor/geshi/geshi/src/geshi/parigp.php
@@ -4,7 +4,7 @@
* --------
* Author: Charles R Greathouse IV (charles@crg4.com)
* Copyright: 2011-2013 Charles R Greathouse IV (http://math.crg4.com/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2011/05/11
*
* PARI/GP language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/pascal.php b/vendor/geshi/geshi/src/geshi/pascal.php
index 0d95af503..ee89223cc 100644
--- a/vendor/geshi/geshi/src/geshi/pascal.php
+++ b/vendor/geshi/geshi/src/geshi/pascal.php
@@ -4,7 +4,7 @@
* ----------
* Author: Tux (tux@inamil.cz)
* Copyright: (c) 2004 Tux (http://tux.a4.cz/), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/07/26
*
* Pascal language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/pcre.php b/vendor/geshi/geshi/src/geshi/pcre.php
index 243121bcd..fd48c3962 100644
--- a/vendor/geshi/geshi/src/geshi/pcre.php
+++ b/vendor/geshi/geshi/src/geshi/pcre.php
@@ -4,7 +4,7 @@
* --------
* Author: Benny Baumann (BenBE@geshi.org)
* Copyright: (c) 2010 Benny Baumann (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/05/22
*
* PCRE language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/per.php b/vendor/geshi/geshi/src/geshi/per.php
index 8337823aa..096223580 100644
--- a/vendor/geshi/geshi/src/geshi/per.php
+++ b/vendor/geshi/geshi/src/geshi/per.php
@@ -4,7 +4,7 @@
* --------
* Author: Lars Gersmann (lars.gersmann@gmail.com)
* Copyright: (c) 2007 Lars Gersmann
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2007/06/03
*
* Per (forms) (FOURJ's Genero 4GL) language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/perl.php b/vendor/geshi/geshi/src/geshi/perl.php
index 0a05708d7..e60c4c460 100644
--- a/vendor/geshi/geshi/src/geshi/perl.php
+++ b/vendor/geshi/geshi/src/geshi/perl.php
@@ -4,7 +4,7 @@
* --------
* Author: Andreas Gohr (andi@splitbrain.org), Ben Keen (ben.keen@gmail.com)
* Copyright: (c) 2004 Andreas Gohr, Ben Keen (http://www.benjaminkeen.org/), Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/08/20
*
* Perl language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/perl6.php b/vendor/geshi/geshi/src/geshi/perl6.php
index f063a6b2c..ce2fafb3d 100644
--- a/vendor/geshi/geshi/src/geshi/perl6.php
+++ b/vendor/geshi/geshi/src/geshi/perl6.php
@@ -4,7 +4,7 @@
* ---------
* Author: Kodi Arfer (kodiarfer {at} warpmail {period} net); forked from perl.php 1.0.8 by Andreas Gohr (andi@splitbrain.org), Ben Keen (ben.keen@gmail.com)
* Copyright: (c) 2009 Kodi Arfer, (c) 2004 Andreas Gohr, Ben Keen (http://www.benjaminkeen.org/), Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/11/07
*
* Perl 6 language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/pf.php b/vendor/geshi/geshi/src/geshi/pf.php
index 2f80e23f2..440ecb34f 100644
--- a/vendor/geshi/geshi/src/geshi/pf.php
+++ b/vendor/geshi/geshi/src/geshi/pf.php
@@ -4,7 +4,7 @@
* --------
* Author: David Berard (david@nfrance.com)
* Copyright: (c) 2010 Benny Baumann (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/10/16
* Based on bash.php
*
diff --git a/vendor/geshi/geshi/src/geshi/phix.php b/vendor/geshi/geshi/src/geshi/phix.php
index a4f4e4e0b..66096a255 100644
--- a/vendor/geshi/geshi/src/geshi/phix.php
+++ b/vendor/geshi/geshi/src/geshi/phix.php
@@ -4,7 +4,7 @@
* ---------------------------------
* Author: Pete Lomax
* Copyright: (c) 2010 Nicholas Koceja
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 16/08/2015
*
* Phix language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/php-brief.php b/vendor/geshi/geshi/src/geshi/php-brief.php
index 922c9d930..f7fb4158b 100644
--- a/vendor/geshi/geshi/src/geshi/php-brief.php
+++ b/vendor/geshi/geshi/src/geshi/php-brief.php
@@ -4,7 +4,7 @@
* -------------
* Author: Nigel McNie (nigel@geshi.org)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/06/02
*
* PHP (brief version) language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/php.php b/vendor/geshi/geshi/src/geshi/php.php
index 6b2484091..dc9561a78 100644
--- a/vendor/geshi/geshi/src/geshi/php.php
+++ b/vendor/geshi/geshi/src/geshi/php.php
@@ -4,7 +4,7 @@
* --------
* Author: Nigel McNie (nigel@geshi.org)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/06/20
*
* PHP language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/pic16.php b/vendor/geshi/geshi/src/geshi/pic16.php
index bd742ad5a..da5e263d5 100644
--- a/vendor/geshi/geshi/src/geshi/pic16.php
+++ b/vendor/geshi/geshi/src/geshi/pic16.php
@@ -4,7 +4,7 @@
* -------
* Author: Phil Mattison (mattison@ohmikron.com)
* Copyright: (c) 2008 Ohmikron Corp. (http://www.ohmikron.com/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/07/30
*
* PIC16 Assembler language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/pike.php b/vendor/geshi/geshi/src/geshi/pike.php
index 12dabf20b..b07a05e34 100644
--- a/vendor/geshi/geshi/src/geshi/pike.php
+++ b/vendor/geshi/geshi/src/geshi/pike.php
@@ -4,7 +4,7 @@
* --------
* Author: Rick E. (codeblock@eighthbit.net)
* Copyright: (c) 2009 Rick E.
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/12/10
*
* Pike language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/pixelbender.php b/vendor/geshi/geshi/src/geshi/pixelbender.php
index d7bcc0802..bb9c2a4bd 100644
--- a/vendor/geshi/geshi/src/geshi/pixelbender.php
+++ b/vendor/geshi/geshi/src/geshi/pixelbender.php
@@ -4,7 +4,7 @@
* ----------------
* Author: Richard Olsson (r@richardolsson.se)
* Copyright: (c) 2008 Richard Olsson (richardolsson.se)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/11/16
*
* Pixel Bender 1.0 language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/pli.php b/vendor/geshi/geshi/src/geshi/pli.php
index 6f12c1fdc..ac52a4c17 100644
--- a/vendor/geshi/geshi/src/geshi/pli.php
+++ b/vendor/geshi/geshi/src/geshi/pli.php
@@ -4,7 +4,7 @@
* --------
* Author: Robert AH Prins (robert@prino.org)
* Copyright: (c) 2011 Robert AH Prins (http://hitchwiki.org/en/User:Prino)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2011/02/09
*
* PL/I language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/plsql.php b/vendor/geshi/geshi/src/geshi/plsql.php
index c2ad85153..70dfb13c5 100644
--- a/vendor/geshi/geshi/src/geshi/plsql.php
+++ b/vendor/geshi/geshi/src/geshi/plsql.php
@@ -4,7 +4,7 @@
* -------
* Author: Victor Engmark <victor.engmark@gmail.com>
* Copyright: (c) 2006 Victor Engmark (http://l0b0.net/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2006/10/26
*
* Oracle 9.2 PL/SQL language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/postgresql.php b/vendor/geshi/geshi/src/geshi/postgresql.php
index 2816c6c95..5a666c80d 100644
--- a/vendor/geshi/geshi/src/geshi/postgresql.php
+++ b/vendor/geshi/geshi/src/geshi/postgresql.php
@@ -5,7 +5,7 @@
* Author: Christophe Chauvet (christophe_at_kryskool_dot_org)
* Contributors: Leif Biberg Kristensen <leif_at_solumslekt_dot_org> 2010-05-03
* Copyright: (c) 2007 Christophe Chauvet (http://kryskool.org/), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2007/07/20
*
* PostgreSQL language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/postscript.php b/vendor/geshi/geshi/src/geshi/postscript.php
index 00ee93c8c..d29b8a7c8 100644
--- a/vendor/geshi/geshi/src/geshi/postscript.php
+++ b/vendor/geshi/geshi/src/geshi/postscript.php
@@ -4,7 +4,7 @@
* -----
* Author: Benny Baumann (BenBE@geshi.org)
* Copyright: (c) 2014 Benny Baumann (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2014/08/10
*
* PostScript language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/povray.php b/vendor/geshi/geshi/src/geshi/povray.php
index eb75d41c5..e71efd742 100644
--- a/vendor/geshi/geshi/src/geshi/povray.php
+++ b/vendor/geshi/geshi/src/geshi/povray.php
@@ -4,7 +4,7 @@
* --------
* Author: Carl Fürstenberg (azatoth@gmail.com)
* Copyright: © 2007 Carl Fürstenberg
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/07/11
*
* Povray language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/powerbuilder.php b/vendor/geshi/geshi/src/geshi/powerbuilder.php
index b93e7dd90..5e0cbc798 100644
--- a/vendor/geshi/geshi/src/geshi/powerbuilder.php
+++ b/vendor/geshi/geshi/src/geshi/powerbuilder.php
@@ -4,7 +4,7 @@
* ------
* Author: Doug Porter (powerbuilder.geshi@gmail.com)
* Copyright: (c) 2009 Doug Porter
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/07/13
*
* PowerBuilder (PowerScript) language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/powershell.php b/vendor/geshi/geshi/src/geshi/powershell.php
index 423045918..5b3330661 100644
--- a/vendor/geshi/geshi/src/geshi/powershell.php
+++ b/vendor/geshi/geshi/src/geshi/powershell.php
@@ -4,7 +4,7 @@
* ---------------------------------
* Author: Frode Aarebrot (frode@aarebrot.net)
* Copyright: (c) 2008 Frode Aarebrot (http://www.aarebrot.net)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/06/20
*
* PowerShell language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/proftpd.php b/vendor/geshi/geshi/src/geshi/proftpd.php
index 99ae9664d..63d392497 100644
--- a/vendor/geshi/geshi/src/geshi/proftpd.php
+++ b/vendor/geshi/geshi/src/geshi/proftpd.php
@@ -4,7 +4,7 @@
* ----------
* Author: Benny Baumann (BenBE@geshi.org)
* Copyright: (c) 2010 Benny Baumann (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2011/01/25
*
* ProFTPd language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/progress.php b/vendor/geshi/geshi/src/geshi/progress.php
index 154147286..2160a3cce 100644
--- a/vendor/geshi/geshi/src/geshi/progress.php
+++ b/vendor/geshi/geshi/src/geshi/progress.php
@@ -4,7 +4,7 @@
* --------
* Author: Marco Aurelio de Pasqual (marcop@hdi.com.br)
* Copyright: (c) 2008 Marco Aurelio de Pasqual, Benny Baumann (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/07/11
*
* Progress language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/prolog.php b/vendor/geshi/geshi/src/geshi/prolog.php
index f3c8e8f19..26d7448d8 100644
--- a/vendor/geshi/geshi/src/geshi/prolog.php
+++ b/vendor/geshi/geshi/src/geshi/prolog.php
@@ -4,7 +4,7 @@
* --------
* Author: Benny Baumann (BenBE@geshi.org)
* Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/10/02
*
* Prolog language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/properties.php b/vendor/geshi/geshi/src/geshi/properties.php
index 3cbde9d3a..89c6d625d 100644
--- a/vendor/geshi/geshi/src/geshi/properties.php
+++ b/vendor/geshi/geshi/src/geshi/properties.php
@@ -4,7 +4,7 @@
* --------
* Author: Edy Hinzen
* Copyright: (c) 2009 Edy Hinzen
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/04/03
*
* Property language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/providex.php b/vendor/geshi/geshi/src/geshi/providex.php
index 2d09be432..1a17865e2 100644
--- a/vendor/geshi/geshi/src/geshi/providex.php
+++ b/vendor/geshi/geshi/src/geshi/providex.php
@@ -4,7 +4,7 @@
* ----------
* Author: Jeff Wilder (jeff@coastallogix.com)
* Copyright: (c) 2008 Coastal Logix (http://www.coastallogix.com)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/10/18
*
* ProvideX language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/purebasic.php b/vendor/geshi/geshi/src/geshi/purebasic.php
index e40890b2c..8b9b65e34 100644
--- a/vendor/geshi/geshi/src/geshi/purebasic.php
+++ b/vendor/geshi/geshi/src/geshi/purebasic.php
@@ -4,7 +4,7 @@
* -------
* Author: GuShH
* Copyright: (c) 2009 Gustavo Julio Fiorenza
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 13/06/2009
*
* PureBasic language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/pycon.php b/vendor/geshi/geshi/src/geshi/pycon.php
index 31531a7fd..4e372ac72 100644
--- a/vendor/geshi/geshi/src/geshi/pycon.php
+++ b/vendor/geshi/geshi/src/geshi/pycon.php
@@ -4,7 +4,7 @@
* ----------
* Author: Roberto Rossi (rsoftware@altervista.org)
* Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/08/30
*
* Python language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/pys60.php b/vendor/geshi/geshi/src/geshi/pys60.php
index caedc2ff7..54a1f5955 100644
--- a/vendor/geshi/geshi/src/geshi/pys60.php
+++ b/vendor/geshi/geshi/src/geshi/pys60.php
@@ -4,7 +4,7 @@
* ----------
* Author: Sohan Basak (ronnie.basak96 @gmail.com)
* Copyright: (c) 2012 Sohan Basak (http://tothepower.tk), Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2012/05/03
*
* Python for S60 language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/python.php b/vendor/geshi/geshi/src/geshi/python.php
index 3df07ea4f..a34ed749c 100644
--- a/vendor/geshi/geshi/src/geshi/python.php
+++ b/vendor/geshi/geshi/src/geshi/python.php
@@ -4,7 +4,7 @@
* ----------
* Author: Roberto Rossi (rsoftware@altervista.org)
* Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/08/30
*
* Python language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/q.php b/vendor/geshi/geshi/src/geshi/q.php
index 926ddbf07..a6b005dd5 100644
--- a/vendor/geshi/geshi/src/geshi/q.php
+++ b/vendor/geshi/geshi/src/geshi/q.php
@@ -4,7 +4,7 @@
* -----
* Author: Ian Roddis (ian.roddis@proteanmind.net)
* Copyright: (c) 2008 Ian Roddis (http://proteanmind.net)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/01/21
*
* q/kdb+ language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/qbasic.php b/vendor/geshi/geshi/src/geshi/qbasic.php
index 0a09b4d4f..9f3be88d2 100644
--- a/vendor/geshi/geshi/src/geshi/qbasic.php
+++ b/vendor/geshi/geshi/src/geshi/qbasic.php
@@ -4,7 +4,7 @@
* ----------
* Author: Nigel McNie (nigel@geshi.org)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/06/20
*
* QBasic/QuickBASIC language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/qml.php b/vendor/geshi/geshi/src/geshi/qml.php
index 3aa345766..fe89e4596 100644
--- a/vendor/geshi/geshi/src/geshi/qml.php
+++ b/vendor/geshi/geshi/src/geshi/qml.php
@@ -4,7 +4,7 @@
* --------------
* Author: J-P Nurmi <jpnurmi@gmail.com>
* Copyright: (c) 2012-2014 J-P Nurmi <jpnurmi@gmail.com>
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2012/08/19
*
* QML language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/racket.php b/vendor/geshi/geshi/src/geshi/racket.php
index 2b25b9bba..c26ea604d 100644
--- a/vendor/geshi/geshi/src/geshi/racket.php
+++ b/vendor/geshi/geshi/src/geshi/racket.php
@@ -4,7 +4,7 @@
* ----------
* Author: Tim Brown (tim@timb.net)
* Copyright: (c) 2013 Tim Brown ((https://github.com/tim-brown/geshi-racket))
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2013-03-01
*
* Racket language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/rails.php b/vendor/geshi/geshi/src/geshi/rails.php
index f5683b85d..9ca7046e3 100644
--- a/vendor/geshi/geshi/src/geshi/rails.php
+++ b/vendor/geshi/geshi/src/geshi/rails.php
@@ -4,7 +4,7 @@
* ---------
* Author: Moises Deniz
* Copyright: (c) 2005 Moises Deniz
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2007/03/21
*
* Ruby (with Ruby on Rails Framework) language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/rbs.php b/vendor/geshi/geshi/src/geshi/rbs.php
index 76610d1e4..6e9e77526 100644
--- a/vendor/geshi/geshi/src/geshi/rbs.php
+++ b/vendor/geshi/geshi/src/geshi/rbs.php
@@ -4,7 +4,7 @@
* ------
* Author: Deng Wen Gang (deng@priity.com)
* Copyright: (c) 2013 Deng Wen Gang
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2013/01/15
*
* RBScript language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/rebol.php b/vendor/geshi/geshi/src/geshi/rebol.php
index d11447ab5..16c4ceaf4 100644
--- a/vendor/geshi/geshi/src/geshi/rebol.php
+++ b/vendor/geshi/geshi/src/geshi/rebol.php
@@ -4,7 +4,7 @@
* --------
* Author: Lecanu Guillaume (Guillaume@LyA.fr)
* Copyright: (c) 2004-2005 Lecanu Guillaume (Guillaume@LyA.fr)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/12/22
*
* Rebol language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/reg.php b/vendor/geshi/geshi/src/geshi/reg.php
index e73c961f9..c96667426 100644
--- a/vendor/geshi/geshi/src/geshi/reg.php
+++ b/vendor/geshi/geshi/src/geshi/reg.php
@@ -4,7 +4,7 @@
* -------
* Author: Sean Hanna (smokingrope@gmail.com)
* Copyright: (c) 2006 Sean Hanna
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 03/15/2006
*
* Microsoft Registry Editor language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/rexx.php b/vendor/geshi/geshi/src/geshi/rexx.php
index 9e0a73e7c..6a4f1a88f 100644
--- a/vendor/geshi/geshi/src/geshi/rexx.php
+++ b/vendor/geshi/geshi/src/geshi/rexx.php
@@ -6,7 +6,7 @@
* Contributors:
* - Walter Pachl (pachl@chello.at)
* Copyright: (c) 2008 Jon Wolfers, (c) 2012 Walter Pachl
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/01/07
*
* Rexx language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/robots.php b/vendor/geshi/geshi/src/geshi/robots.php
index 91fd87e9c..92863c3a8 100644
--- a/vendor/geshi/geshi/src/geshi/robots.php
+++ b/vendor/geshi/geshi/src/geshi/robots.php
@@ -4,7 +4,7 @@
* --------
* Author: Christian Lescuyer (cl@goelette.net)
* Copyright: (c) 2006 Christian Lescuyer http://xtian.goelette.info
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2006/02/17
*
* robots.txt language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/roff.php b/vendor/geshi/geshi/src/geshi/roff.php
new file mode 100644
index 000000000..6f8769054
--- /dev/null
+++ b/vendor/geshi/geshi/src/geshi/roff.php
@@ -0,0 +1,510 @@
+<?php
+/*************************************************************************************
+ * roff.php
+ * ---------------------------------
+ * Author: Artur Iwicki (iwicki DOT artur AT svgames DOT pl)
+ * Copyright: (c) 2017 Artur Iwicki
+ * Release Version: 1.0.9.1
+ * Date Started: 2017-11-17
+ *
+ * roff (Unix man page) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2018-12-06 (1.0.1)
+ * - Fix reqex for line-start requests (must start with [.'], not [\.'])
+ * - Add some missing whitespace escapes
+ * 2017-11-20 (1.0.0)
+ * - First Release
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'roff',
+ 'COMMENT_SINGLE' => array(
+ 1 => '\\"',
+ 2 => '\\#',
+ ),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(
+ 1 => '/^\\.\\\\"[[:print:]]*/m'
+ ),
+ 'QUOTEMARKS' => array(),
+ 'ESCAPE_CHAR' => '',
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ ),
+ 'KEYWORDS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => array(
+ '\\[-D]', '\\(-D',
+ '\\[Sd]', '\\(Sd',
+ '\\[TP]', '\\(TP',
+ '\\[Tp]', '\\(Tp',
+ '\\[ss]', '\\(ss',
+ '\\[ff]', '\\(ff',
+ '\\[fi]', '\\(fi',
+ '\\[fl]', '\\(fl',
+ '\\[Fi]', '\\(Fi',
+ '\\[Fl]', '\\(Fl',
+ '\\[/L]', '\\(/L',
+ '\\[/l]', '\\(/l',
+ '\\[/O]', '\\(/O',
+ '\\[/o]', '\\(/o',
+ '\\[AE]', '\\(AE',
+ '\\[ae]', '\\(ae',
+ '\\[OE]', '\\(OE',
+ '\\[oe]', '\\(oe',
+ '\\[IJ]', '\\(IJ',
+ '\\[ij]', '\\(ij',
+ '\\[.i]', '\\(.i',
+ '\\[.j]', '\\(.j',
+ '\\[\'A]', '\\(\'A',
+ '\\[\'C]', '\\(\'C',
+ '\\[\'E]', '\\(\'E',
+ '\\[\'I]', '\\(\'I',
+ '\\[\'O]', '\\(\'O',
+ '\\[\'U]', '\\(\'U',
+ '\\[\'Y]', '\\(\'Y',
+ '\\[\'a]', '\\(\'a',
+ '\\[\'c]', '\\(\'c',
+ '\\[\'e]', '\\(\'e',
+ '\\[\'i]', '\\(\'i',
+ '\\[\'o]', '\\(\'o',
+ '\\[\'u]', '\\(\'u',
+ '\\[\'y]', '\\(\'y',
+ '\\[:A]', '\\(:A',
+ '\\[:E]', '\\(:E',
+ '\\[:I]', '\\(:I',
+ '\\[:O]', '\\(:O',
+ '\\[:U]', '\\(:U',
+ '\\[:Y]', '\\(:Y',
+ '\\[:a]', '\\(:a',
+ '\\[:e]', '\\(:e',
+ '\\[:i]', '\\(:i',
+ '\\[:o]', '\\(:o',
+ '\\[:u]', '\\(:u',
+ '\\[:y]', '\\(:y',
+ '\\[^A]', '\\(^A',
+ '\\[^E]', '\\(^E',
+ '\\[^I]', '\\(^I',
+ '\\[^O]', '\\(^O',
+ '\\[^U]', '\\(^U',
+ '\\[^a]', '\\(^a',
+ '\\[^e]', '\\(^e',
+ '\\[^i]', '\\(^i',
+ '\\[^o]', '\\(^o',
+ '\\[^u]', '\\(^u',
+ '\\[`A]', '\\(`A',
+ '\\[`E]', '\\(`E',
+ '\\[`I]', '\\(`I',
+ '\\[`O]', '\\(`O',
+ '\\[`U]', '\\(`U',
+ '\\[`a]', '\\(`a',
+ '\\[`e]', '\\(`e',
+ '\\[`i]', '\\(`i',
+ '\\[`o]', '\\(`o',
+ '\\[`u]', '\\(`u',
+ '\\[~A]', '\\(~A',
+ '\\[~N]', '\\(~N',
+ '\\[~O]', '\\(~O',
+ '\\[~a]', '\\(~a',
+ '\\[~n]', '\\(~n',
+ '\\[~o]', '\\(~o',
+ '\\[vS]', '\\(vS',
+ '\\[vs]', '\\(vs',
+ '\\[vZ]', '\\(vZ',
+ '\\[vz]', '\\(vz',
+ '\\[,C]', '\\(,C',
+ '\\[,c]', '\\(,c',
+ '\\[oA]', '\\(oA',
+ '\\[oa]', '\\(oa',
+ '\\[a"]', '\\(a"',
+ '\\[a-]', '\\(a-',
+ '\\[a.]', '\\(a.',
+ '\\[a^]', '\\(a^',
+ '\\[aa]', '\\(aa',
+ '\\[ga]', '\\(ga',
+ '\\[ab]', '\\(ab',
+ '\\[ac]', '\\(ac',
+ '\\[ad]', '\\(ad',
+ '\\[ah]', '\\(ah',
+ '\\[ao]', '\\(ao',
+ '\\[a~]', '\\(a~',
+ '\\[ho]', '\\(ho',
+ '\\[ha]', '\\(ha',
+ '\\[ti]', '\\(ti',
+ '\\[Bq]', '\\(Bq',
+ '\\[bq]', '\\(bq',
+ '\\[lq]', '\\(lq',
+ '\\[rq]', '\\(rq',
+ '\\[oq]', '\\(oq',
+ '\\[cq]', '\\(cq',
+ '\\[aq]', '\\(aq',
+ '\\[dq]', '\\(dq',
+ '\\[Fo]', '\\(Fo',
+ '\\[Fc]', '\\(Fc',
+ '\\[fo]', '\\(fo',
+ '\\[fc]', '\\(fc',
+ '\\[r!]', '\\(r!',
+ '\\[r?]', '\\(r?',
+ '\\[em]', '\\(em',
+ '\\[en]', '\\(en',
+ '\\[hy]', '\\(hy',
+ '\\[lB]', '\\(lB',
+ '\\[rB]', '\\(rB',
+ '\\[lC]', '\\(lC',
+ '\\[rC]', '\\(rC',
+ '\\[la]', '\\(la',
+ '\\[ra]', '\\(ra',
+ '\\[bv]', '\\(bv',
+ '\\[braceex]',
+ '\\[bracketlefttp]',
+ '\\[bracketleftbt]',
+ '\\[bracketleftex]',
+ '\\[bracketrighttp]',
+ '\\[bracketrightbt]',
+ '\\[bracketrightex]',
+ '\\[lt]', '\\(lt',
+ '\\[bracelefttp]',
+ '\\[lk]', '\\(lk',
+ '\\[braceleftmid]',
+ '\\[lb]', '\\(lb',
+ '\\[braceleftbt]',
+ '\\[braceleftex]',
+ '\\[rt]', '\\(rt',
+ '\\[bracerighttp]',
+ '\\[rk]', '\\(rk',
+ '\\[bracerightmid]',
+ '\\[rb]', '\\(rb',
+ '\\[bracerightbt]',
+ '\\[bracerightex]',
+ '\\[parenlefttp]',
+ '\\[parenleftbt]',
+ '\\[parenleftex]',
+ '\\[parenrighttp]',
+ '\\[parenrightbt]',
+ '\\[parenrightex]',
+ '\\[&lt;-]', '\\(&lt;-',
+ '\\[-&gt;]', '\\(-&gt;',
+ '\\[&lt;&gt;]', '\\(&lt;&gt;',
+ '\\[da]', '\\(da',
+ '\\[ua]', '\\(ua',
+ '\\[va]', '\\(va',
+ '\\[lA]', '\\(lA',
+ '\\[rA]', '\\(rA',
+ '\\[hA]', '\\(hA',
+ '\\[dA]', '\\(dA',
+ '\\[uA]', '\\(uA',
+ '\\[vA]', '\\(vA',
+ '\\[an]', '\\(an',
+ '\\[ba]', '\\(ba',
+ '\\[br]', '\\(br',
+ '\\[ul]', '\\(ul',
+ '\\[rn]', '\\(rn',
+ '\\[ru]', '\\(ru',
+ '\\[bb]', '\\(bb',
+ '\\[sl]', '\\(sl',
+ '\\[rs]', '\\(rs',
+ '\\[ci]', '\\(ci',
+ '\\[bu]', '\\(bu',
+ '\\[dd]', '\\(dd',
+ '\\[dg]', '\\(dg',
+ '\\[lz]', '\\(lz',
+ '\\[sq]', '\\(sq',
+ '\\[ps]', '\\(ps',
+ '\\[sc]', '\\(sc',
+ '\\[lh]', '\\(lh',
+ '\\[rh]', '\\(rh',
+ '\\[at]', '\\(at',
+ '\\[sh]', '\\(sh',
+ '\\[CR]', '\\(CR',
+ '\\[OK]', '\\(OK',
+ '\\[co]', '\\(co',
+ '\\[rg]', '\\(rg',
+ '\\[tm]', '\\(tm',
+ '\\[bs]', '\\(bs',
+ '\\[Do]', '\\(Do',
+ '\\[ct]', '\\(ct',
+ '\\[eu]', '\\(eu',
+ '\\[Eu]', '\\(Eu',
+ '\\[Ye]', '\\(Ye',
+ '\\[Po]', '\\(Po',
+ '\\[Cs]', '\\(Cs',
+ '\\[Fn]', '\\(Fn',
+ '\\[de]', '\\(de',
+ '\\[%0]', '\\(%0',
+ '\\[fm]', '\\(fm',
+ '\\[sd]', '\\(sd',
+ '\\[mc]', '\\(mc',
+ '\\[Of]', '\\(Of',
+ '\\[Om]', '\\(Om',
+ '\\[AN]', '\\(AN',
+ '\\[OR]', '\\(OR',
+ '\\[no]', '\\(no',
+ '\\[tno]',
+ '\\[te]', '\\(te',
+ '\\[fa]', '\\(fa',
+ '\\[st]', '\\(st',
+ '\\[3d]', '\\(3d',
+ '\\[tf]', '\\(tf',
+ '\\[or]', '\\(or',
+ '\\[12]', '\\(12',
+ '\\[14]', '\\(14',
+ '\\[34]', '\\(34',
+ '\\[18]', '\\(18',
+ '\\[38]', '\\(38',
+ '\\[58]', '\\(58',
+ '\\[78]', '\\(78',
+ '\\[S1]', '\\(S1',
+ '\\[S2]', '\\(S2',
+ '\\[S3]', '\\(S3',
+ '\\[pl]', '\\(pl',
+ '\\[mi]', '\\(mi',
+ '\\[-+]', '\\(-+',
+ '\\[+-]', '\\(+-',
+ '\\[t+-]',
+ '\\[pc]', '\\(pc',
+ '\\[md]', '\\(md',
+ '\\[mu]', '\\(mu',
+ '\\[tmu]',
+ '\\[c*]', '\\(c*',
+ '\\[c+]', '\\(c+',
+ '\\[di]', '\\(di',
+ '\\[tdi]',
+ '\\[f/]', '\\(f/',
+ '\\[**]', '\\(**',
+ '\\[&lt;=]', '\\(&lt;=',
+ '\\[&gt;=]', '\\(&gt;=',
+ '\\[&lt;&lt;]', '\\(&lt;&lt;',
+ '\\[&gt;&gt;]', '\\(&gt;&gt;',
+ '\\[eq]', '\\(eq',
+ '\\[!=]', '\\(!=',
+ '\\[==]', '\\(==',
+ '\\[ne]', '\\(ne',
+ '\\[=~]', '\\(=~',
+ '\\[|=]', '\\(|=',
+ '\\[ap]', '\\(ap',
+ '\\[~~]', '\\(~~',
+ '\\[~=]', '\\(~=',
+ '\\[pt]', '\\(pt',
+ '\\[es]', '\\(es',
+ '\\[mo]', '\\(mo',
+ '\\[nm]', '\\(nm',
+ '\\[sb]', '\\(sb',
+ '\\[nb]', '\\(nb',
+ '\\[sp]', '\\(sp',
+ '\\[nc]', '\\(nc',
+ '\\[ib]', '\\(ib',
+ '\\[ip]', '\\(ip',
+ '\\[ca]', '\\(ca',
+ '\\[cu]', '\\(cu',
+ '\\[/_]', '\\(/_',
+ '\\[pp]', '\\(pp',
+ '\\[is]', '\\(is',
+ '\\[integral]',
+ '\\[sum]',
+ '\\[product]',
+ '\\[coproduct]',
+ '\\[gr]', '\\(gr',
+ '\\[sr]', '\\(sr',
+ '\\[sqrt]',
+ '\\[radicalex]',
+ '\\[sqrtex]',
+ '\\[lc]', '\\(lc',
+ '\\[rc]', '\\(rc',
+ '\\[lf]', '\\(lf',
+ '\\[rf]', '\\(rf',
+ '\\[if]', '\\(if',
+ '\\[Ah]', '\\(Ah',
+ '\\[Im]', '\\(Im',
+ '\\[Re]', '\\(Re',
+ '\\[wp]', '\\(wp',
+ '\\[pd]', '\\(pd',
+ '\\[-h]', '\\(-h',
+ '\\[hbar]',
+ '\\[*A]', '\\(*A',
+ '\\[*B]', '\\(*B',
+ '\\[*G]', '\\(*G',
+ '\\[*D]', '\\(*D',
+ '\\[*E]', '\\(*E',
+ '\\[*Z]', '\\(*Z',
+ '\\[*Y]', '\\(*Y',
+ '\\[*H]', '\\(*H',
+ '\\[*I]', '\\(*I',
+ '\\[*K]', '\\(*K',
+ '\\[*L]', '\\(*L',
+ '\\[*M]', '\\(*M',
+ '\\[*N]', '\\(*N',
+ '\\[*C]', '\\(*C',
+ '\\[*O]', '\\(*O',
+ '\\[*P]', '\\(*P',
+ '\\[*R]', '\\(*R',
+ '\\[*S]', '\\(*S',
+ '\\[*T]', '\\(*T',
+ '\\[*U]', '\\(*U',
+ '\\[*F]', '\\(*F',
+ '\\[*X]', '\\(*X',
+ '\\[*Q]', '\\(*Q',
+ '\\[*W]', '\\(*W',
+ '\\[*a]', '\\(*a',
+ '\\[*b]', '\\(*b',
+ '\\[*g]', '\\(*g',
+ '\\[*d]', '\\(*d',
+ '\\[*e]', '\\(*e',
+ '\\[*z]', '\\(*z',
+ '\\[*y]', '\\(*y',
+ '\\[*h]', '\\(*h',
+ '\\[*i]', '\\(*i',
+ '\\[*k]', '\\(*k',
+ '\\[*l]', '\\(*l',
+ '\\[*m]', '\\(*m',
+ '\\[*n]', '\\(*n',
+ '\\[*c]', '\\(*c',
+ '\\[*o]', '\\(*o',
+ '\\[*p]', '\\(*p',
+ '\\[*r]', '\\(*r',
+ '\\[ts]', '\\(ts',
+ '\\[*s]', '\\(*s',
+ '\\[*t]', '\\(*t',
+ '\\[*u]', '\\(*u',
+ '\\[*f]', '\\(*f',
+ '\\[*x]', '\\(*x',
+ '\\[*q]', '\\(*q',
+ '\\[*w]', '\\(*w',
+ '\\[+h]', '\\(+h',
+ '\\[+f]', '\\(+f',
+ '\\[+p]', '\\(+p',
+ '\\[+e]', '\\(+e',
+ '\\[CL]', '\\(CL',
+ '\\[SP]', '\\(SP',
+ '\\[HE]', '\\(HE',
+ '\\[DI]', '\\(DI',
+ ),
+ 1 => array(
+ // Special characters
+ '\\\\', '\\´', '\\`', '\\-',
+ '\\_', '\\.', '\\%', '\\!',
+ '\\0', '\\|', '\\^', '\\&',
+ '\\)', '\\/', '\\,', '\\~',
+ '\\:', '\\{', '\\}', '\\a',
+ '\\c', '\\d', '\\e', '\\E',
+ '\\p', '\\r', '\\t', '\\u',
+
+ // Whitespace escapes
+ '\\ ', '\\h', "\\\n",
+
+ // Text modifiers
+ '\\fB', '\\fI', '\\fR', '\\fP',
+ '\\f0', '\\f1', '\\f2', '\\f3', '\\f4', '\\f5', '\\f6', '\\f7', '\\f8', '\\f9',
+ ),
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ ),
+ 'COMMENTS' => array(
+ 1 => 'color: #ffff55;',
+ 2 => 'color: #ffff55;',
+ ),
+ 'ESCAPE_CHAR' => array(
+ ),
+ 'BRACKETS' => array(
+ ),
+ 'STRINGS' => array(
+ ),
+ 'NUMBERS' => array(
+ ),
+ 'METHODS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #00aaaa',
+ 1 => 'color: #aa00aa',
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: #ffff55;',
+ 1 => 'font-weight: bold;',
+ 2 => 'font-style: italic;',
+ 3 => 'font-weight: bold;',
+ 4 => 'font-style: italic;',
+ 5 => 'color: #55aaff;',
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'REGEXPS' => array(
+ 0 => array(
+ // Unicode characters
+ GESHI_SEARCH => '\\\\\\[u([[:xdigit:]]{4,5})\\]',
+ GESHI_REPLACE => '\\\\[\\1]',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => '',
+ ),
+ 1 => array(
+ // Bold text - formatted using .B or 'B
+ GESHI_SEARCH => "^([\\.']{1}B[[:blank:]]*\\n{0,1})([[:print:]]+)",
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '',
+ ),
+ 2 => array(
+ // Italic text - formatted using .I or 'I
+ GESHI_SEARCH => "^([\\.']{1}I[[:blank:]]*\\n{0,1})([[:print:]]+)",
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '',
+ ),
+ 3 => array(
+ // Bold text - formatted inline
+ GESHI_SEARCH => '(\\\\fB)([[:print:]]+?)(\\\\fR)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3',
+ ),
+ 4 => array (
+ // Italic text - formatted inline
+ GESHI_SEARCH => '(\\\\fI)([[:print:]]+?)(\\\\fR)',
+ GESHI_REPLACE => '\\2',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => '\\3',
+ ),
+ 5 => array(
+ // Line start macros (.TP, .SH, et cetera)
+ GESHI_SEARCH => "^([.']{1}[a-zA-Z]+)",
+ GESHI_REPLACE => '\\1',
+ GESHI_MODIFIERS => 'm',
+ GESHI_BEFORE => '',
+ GESHI_AFTER => '',
+ ),
+ ),
+ 'URLS' => array(),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(),
+);
diff --git a/vendor/geshi/geshi/src/geshi/rpmspec.php b/vendor/geshi/geshi/src/geshi/rpmspec.php
index 55d722d85..49c41069f 100644
--- a/vendor/geshi/geshi/src/geshi/rpmspec.php
+++ b/vendor/geshi/geshi/src/geshi/rpmspec.php
@@ -4,7 +4,7 @@
* ---------------------------------
* Author: Paul Grinberg (gri6507 TA unity-linux TOD org)
* Copyright: (c) 2010 Paul Grinberg
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/04/27
*
* RPM Spec language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/rsplus.php b/vendor/geshi/geshi/src/geshi/rsplus.php
index 6c8771dd4..4dad7db53 100644
--- a/vendor/geshi/geshi/src/geshi/rsplus.php
+++ b/vendor/geshi/geshi/src/geshi/rsplus.php
@@ -7,7 +7,7 @@
* - Benilton Carvalho (beniltoncarvalho@gmail.com)
* - Fernando Henrique Ferraz Pereira da Rosa (mentus@gmail.com)
* Copyright: (c) 2009 Ron Fredericks (http://www.LectureMaker.com)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/03/28
*
* R language file for GeSHi.
@@ -374,7 +374,7 @@ $language_data = array (
'getS3method', 'getTxtProgressBar', 'glob2rx', 'head', 'head.matrix', 'help', 'help.request', 'help.search',
'help.start', 'history', 'index.search', 'install.packages', 'installed.packages', 'is.relistable',
'limitedLabels', 'loadhistory', 'localeToCharset', 'ls.str', 'lsf.str', 'make.packages.html', 'make.socket',
- 'makeRweaveLatexCodeRunner', 'memory.limit', 'memory.size', 'menu', 'methods', 'mirror2html', 'modifyList',
+ 'makeRweaveLatexCodeRunner', 'memory.limit', 'memory.size', 'menu', 'mirror2html', 'modifyList',
'new.packages', 'normalizePath', 'nsl', 'object.size', 'old.packages', 'package.contents', 'package.skeleton',
'packageDescription', 'packageStatus', 'page', 'person', 'personList', 'pico', 'prompt', 'promptData',
'promptPackage', 'rc.getOption', 'rc.options', 'rc.settings', 'rc.status', 'read.csv', 'read.csv2', 'read.delim',
diff --git a/vendor/geshi/geshi/src/geshi/ruby.php b/vendor/geshi/geshi/src/geshi/ruby.php
index b47953d8e..0b8aa333c 100644
--- a/vendor/geshi/geshi/src/geshi/ruby.php
+++ b/vendor/geshi/geshi/src/geshi/ruby.php
@@ -4,7 +4,7 @@
* --------
* Author: Moises Deniz
* Copyright: (c) 2007 Moises Deniz
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2007/03/21
*
* Ruby language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/rust.php b/vendor/geshi/geshi/src/geshi/rust.php
index 46d46c817..3fb5c363f 100644
--- a/vendor/geshi/geshi/src/geshi/rust.php
+++ b/vendor/geshi/geshi/src/geshi/rust.php
@@ -4,7 +4,7 @@
* --------
* Author: Edward Hart (edward.dan.hart@gmail.com)
* Copyright: (c) 2013 Edward Hart
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2013/10/20
*
* Rust language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/sas.php b/vendor/geshi/geshi/src/geshi/sas.php
index 31446d715..3d370be08 100644
--- a/vendor/geshi/geshi/src/geshi/sas.php
+++ b/vendor/geshi/geshi/src/geshi/sas.php
@@ -4,7 +4,7 @@
* -------
* Author: Galen Johnson (solitaryr@gmail.com)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2005/12/27
*
* SAS language file for GeSHi. Based on the sas vim file.
diff --git a/vendor/geshi/geshi/src/geshi/sass.php b/vendor/geshi/geshi/src/geshi/sass.php
index a4408a991..725435aae 100644
--- a/vendor/geshi/geshi/src/geshi/sass.php
+++ b/vendor/geshi/geshi/src/geshi/sass.php
@@ -4,7 +4,7 @@
* -------
* Author: Javier Eguiluz (javier.eguiluz@gmail.com)
* Copyright: (c) 2014 Javier Eguiluz (javier.eguiluz@gmail.com)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2014/05/10
*
* SASS language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/scala.php b/vendor/geshi/geshi/src/geshi/scala.php
index d288eb0c2..d9b0bac10 100644
--- a/vendor/geshi/geshi/src/geshi/scala.php
+++ b/vendor/geshi/geshi/src/geshi/scala.php
@@ -4,7 +4,7 @@
* ----------
* Author: Franco Lombardo (franco@francolombardo.net)
* Copyright: (c) 2008 Franco Lombardo, Benny Baumann
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/02/08
*
* Scala language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/scheme.php b/vendor/geshi/geshi/src/geshi/scheme.php
index 3230d5f58..e5a289af0 100644
--- a/vendor/geshi/geshi/src/geshi/scheme.php
+++ b/vendor/geshi/geshi/src/geshi/scheme.php
@@ -4,7 +4,7 @@
* ----------
* Author: Jon Raphaelson (jonraphaelson@gmail.com)
* Copyright: (c) 2005 Jon Raphaelson, Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/08/30
*
* Scheme language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/scilab.php b/vendor/geshi/geshi/src/geshi/scilab.php
index 6b3552032..dbe8a39a6 100644
--- a/vendor/geshi/geshi/src/geshi/scilab.php
+++ b/vendor/geshi/geshi/src/geshi/scilab.php
@@ -4,7 +4,7 @@
* --------
* Author: Christophe David (geshi@christophedavid.org)
* Copyright: (c) 2008 Christophe David (geshi@christophedavid.org)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/08/04
*
* SciLab language file for GeSHi.
@@ -182,7 +182,7 @@ $language_data = array (
'rubberbox', 'salesman', 'sample', 'samplef', 'samwr', 'save', 'save_format', 'save_graph', 'savehistory',
'savematfile', 'savewave', 'sca', 'scaling', 'scanf', 'scanf_conversion', 'scf', 'schur', 'sci_files',
'sci2exp', 'sci2for', 'sci2map', 'sciargs', 'SciComplex', 'SciComplexArray', 'SciDouble', 'SciDoubleArray',
- 'scilab', 'Scilab', 'ScilabEval', 'scilink', 'scipad', 'SciString', 'SciStringArray', 'sd2sci', 'sda', 'sdf',
+ 'ScilabEval', 'scilink', 'scipad', 'SciString', 'SciStringArray', 'sd2sci', 'sda', 'sdf',
'secto3d', 'segs_properties', 'semi', 'semicolon', 'semidef', 'sensi', 'set', 'set_posfig_dim',
'setbpt', 'setdiff', 'setenv', 'seteventhandler', 'setfield', 'sethomedirectory', 'setlanguage', 'setmenu',
'sfact', 'Sfgrayplot', 'Sgrayplot', 'sgrid', 'shortest_path', 'show_arcs', 'show_graph', 'show_nodes',
diff --git a/vendor/geshi/geshi/src/geshi/scl.php b/vendor/geshi/geshi/src/geshi/scl.php
index 761a0ac1e..17bad11b3 100644
--- a/vendor/geshi/geshi/src/geshi/scl.php
+++ b/vendor/geshi/geshi/src/geshi/scl.php
@@ -4,7 +4,7 @@
* ---------------------------------
* Author: Leonhard Hösch (leonhard.hoesch@siemens.com)
* Copyright: (c) 2008 by Leonhard Hösch (siemens.de)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2012/09/25
*
* SCL language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/sdlbasic.php b/vendor/geshi/geshi/src/geshi/sdlbasic.php
index 170c665e8..b5fc9fa9f 100644
--- a/vendor/geshi/geshi/src/geshi/sdlbasic.php
+++ b/vendor/geshi/geshi/src/geshi/sdlbasic.php
@@ -4,7 +4,7 @@
* ------------
* Author: Roberto Rossi
* Copyright: (c) 2005 Roberto Rossi (http://rsoftware.altervista.org)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2005/08/19
*
* sdlBasic (http://sdlbasic.sf.net) language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/smalltalk.php b/vendor/geshi/geshi/src/geshi/smalltalk.php
index d57e54302..faa07986f 100644
--- a/vendor/geshi/geshi/src/geshi/smalltalk.php
+++ b/vendor/geshi/geshi/src/geshi/smalltalk.php
@@ -4,7 +4,7 @@
* --------
* Author: Bananeweizen (Bananeweizen@gmx.de)
* Copyright: (c) 2005 Bananeweizen (www.bananeweizen.de)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2005/03/27
*
* Smalltalk language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/smarty.php b/vendor/geshi/geshi/src/geshi/smarty.php
index cb8833f89..62b37f2af 100644
--- a/vendor/geshi/geshi/src/geshi/smarty.php
+++ b/vendor/geshi/geshi/src/geshi/smarty.php
@@ -4,7 +4,7 @@
* ----------
* Author: Alan Juden (alan@judenware.org)
* Copyright: (c) 2004 Alan Juden, Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/07/10
*
* Smarty template language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/spark.php b/vendor/geshi/geshi/src/geshi/spark.php
index 30213ec2e..0d722e7a3 100644
--- a/vendor/geshi/geshi/src/geshi/spark.php
+++ b/vendor/geshi/geshi/src/geshi/spark.php
@@ -4,7 +4,7 @@
* -------
* Author: Phil Thornley (tux@inmail.cz)
* Copyright: (c) 2004 Phil Thornley (http://www.sparksure.com)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/08/22
*
* SPARK language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/sparql.php b/vendor/geshi/geshi/src/geshi/sparql.php
index 68aaa5fd6..d5847f2bf 100644
--- a/vendor/geshi/geshi/src/geshi/sparql.php
+++ b/vendor/geshi/geshi/src/geshi/sparql.php
@@ -4,7 +4,7 @@
* -------
* Author: Karima Rafes (karima.rafes@bordercloud.com)
* Copyright: (c) 2011 Bourdercloud.com
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2011/11/05
*
* SPARQL language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/sql.php b/vendor/geshi/geshi/src/geshi/sql.php
index b38672933..73e2109f4 100644
--- a/vendor/geshi/geshi/src/geshi/sql.php
+++ b/vendor/geshi/geshi/src/geshi/sql.php
@@ -6,7 +6,7 @@
* Contributors:
* - Jürgen Thomas (Juergen.Thomas@vs-polis.de)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/06/04
*
* SQL language file for GeSHi.
@@ -69,7 +69,7 @@ $language_data = array (
'CONNECT', 'CONSTRAINT', 'CONVERT', 'COUNT', 'CREATE', 'CROSS', 'CURRENT',
'CURRENT_DATE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRENT_USER',
'DATA', 'DATABASE', 'DATABASES', 'DATE', 'DAY', 'DEC', 'DECIMAL', 'DECLARE',
- 'DEFAULT', 'DELAYED', 'DELETE', 'DESC', 'DESCRIBE', 'DISTINCT', 'DOUBLE',
+ 'DEFAULT', 'DEFERRABLE', 'DEFERRED', 'DELAYED', 'DELETE', 'DESC', 'DESCRIBE', 'DISTINCT', 'DOUBLE',
'DOMAIN', 'DROP',
'ELSE', 'ELSEIF', 'ENCLOSED', 'END', 'ESCAPED', 'EXCEPT', 'EXEC', 'EXECUTE', 'EXISTS',
'EXP', 'EXPLAIN', 'EXTRACT',
@@ -77,7 +77,7 @@ $language_data = array (
'FOREIGN', 'FROM', 'FULL', 'FUNCTION',
'GET', 'GROUP', 'GROUPING', 'GO', 'GOTO', 'GRANT', 'GRANTED',
'HAVING', 'HOUR',
- 'IDENTIFIED', 'IDENTITY', 'IF', 'IGNORE', 'IN', 'INCREMENT', 'INDEX', 'INFILE', 'INNER',
+ 'IDENTIFIED', 'IDENTITY', 'IF', 'IGNORE', 'IMMEDIATE', 'IN', 'INCREMENT', 'INDEX', 'INFILE', 'INITIALLY', 'INNER',
'INOUT', 'INPUT', 'INSERT', 'INT', 'INTEGER', 'INTERSECT', 'INTERSECTION', 'INTERVAL',
'INTO', 'IS',
'JOIN',
diff --git a/vendor/geshi/geshi/src/geshi/sshconfig.php b/vendor/geshi/geshi/src/geshi/sshconfig.php
new file mode 100644
index 000000000..d38cc4628
--- /dev/null
+++ b/vendor/geshi/geshi/src/geshi/sshconfig.php
@@ -0,0 +1,165 @@
+<?php
+/*************************************************************************************
+ * sshconfig.php
+ * --------
+ * Author: Kevin Ernst (kevin.ernst -at- cchmc.org)
+ * Copyright: (c) 2017 Kevin Ernst
+ * Release Version: 1.0.9.1
+ * Date Started: 2017/12/01
+ *
+ * OpenSSH config file (~/.ssh/config) language file for GeSHi.
+ *
+ * CHANGES
+ * -------
+ * 2017/12/02 (1.0.0)
+ * - First release; couldn't figure out how to separately highlight negated
+ * hostnames/wildcards, but it's good enough for a basic ~/.ssh/config
+ *
+ *************************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ ************************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'sshconfig',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array(),
+ 'COMMENT_REGEXP' => array(0 => '/^\s*#.*?$/m'),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '',
+ 'KEYWORDS' => array(
+ 0 => array(
+ 'Host',
+ ),
+ 1 => array(
+ "Hostname", "Match", "AddKeysToAgent", "AddressFamily", "BatchMode",
+ "BindAddress", "CanonicalDomains", "CanonicalizeFallbackLocal",
+ "CanonicalizeHostname", "CanonicalizeMaxDots",
+ "CanonicalizePermittedCNAMEs", "CertificateFile",
+ "ChallengeResponseAuthentication", "CheckHostIP", "Ciphers",
+ "ClearAllForwardings", "Compression", "ConnectionAttempts",
+ "ConnectTimeout", "ControlMaster", "ControlPath", "ControlPersist",
+ "DynamicForward", "EnableSSHKeysign", "EscapeChar",
+ "ExitOnForwardFailure", "FingerprintHash", "ForwardAgent",
+ "ForwardX11", "ForwardX11Timeout", "ForwardX11Trusted",
+ "GatewayPorts", "GlobalKnownHostsFile", "GSSAPIAuthentication",
+ "GSSAPIDelegateCredentials", "HashKnownHosts",
+ "HostbasedAuthentication", "HostbasedKeyTypes", "HostKeyAlgorithms",
+ "HostKeyAlias", "HostName", "IdentitiesOnly", "IdentityAgent",
+ "IdentityFile", "IgnoreUnknown", "Include", "IPQoS",
+ "KbdInteractiveAuthentication", "KbdInteractiveDevices",
+ "KexAlgorithms", "LocalCommand", "LocalForward", "LogLevel", "MACs",
+ "NoHostAuthenticationForLocalhost", "NumberOfPasswordPrompts",
+ "PasswordAuthentication", "PermitLocalCommand", "PKCS11Provider",
+ "Port", "PreferredAuthentications", "ProxyCommand", "ProxyJump",
+ "ProxyUseFdpass", "PubkeyAcceptedKeyTypes", "PubkeyAuthentication",
+ "RekeyLimit", "RemoteCommand", "RemoteForward", "RequestTTY",
+ "RevokedHostKeys", "SendEnv", "ServerAliveCountMax",
+ "ServerAliveInterval", "StreamLocalBindMask",
+ "StreamLocalBindUnlink", "StrictHostKeyChecking", "SyslogFacility",
+ "TCPKeepAlive", "Tunnel", "TunnelDevice", "UpdateHostKeys",
+ "UsePrivilegedPort", "User", "UserKnownHostsFile",
+ "VerifyHostKeyDNS", "VisualHostKey", "XAuthLocation",
+ ),
+ ),
+ 'SYMBOLS' => array(
+ 0 => array(
+ '%h', '%p',
+ ),
+ // these get clobbered by regexes anyway
+ //1 => array( '!'),
+ //2 => array( '*')
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 0 => true,
+ 1 => true,
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 0 => 'color: green; font-weight: bold',
+ 1 => 'color: blue',
+ ),
+ 'COMMENTS' => array(
+ 0 => 'color: #666666; font-style: italic;'
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => ''
+ ),
+ 'BRACKETS' => array(
+ 0 => ''
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: #933;'
+ ),
+ 'NUMBERS' => array(
+ 0 => ''
+ ),
+ 'METHODS' => array(
+ 0 => ''
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: lightseagreen; font-weight: bold',
+ // these two get clobbered by regexes below anyway
+ 1 => 'color: red; font-weight: bold',
+ 1 => 'color: darkmagenta; font-weight: bold',
+ ),
+ 'REGEXPS' => array(
+ 0 => 'color: darkmagenta;',
+ //1 => 'color: red; font-weight: bold',
+ 2 => 'color: magenta; font-weight: bold',
+ ),
+ 'SCRIPT' => array(
+ 0 => ''
+ )
+ ),
+ 'URLS' => array(
+ 0=> 'https://man.openbsd.org/ssh_config#{FNAME}',
+ 1=> 'https://man.openbsd.org/ssh_config#{FNAME}',
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ // Hostnames
+ 0 => array(
+ GESHI_SEARCH => '(Host(name)?.*?)(?<=\s)(.*)',
+ GESHI_REPLACE => '\\3',
+ GESHI_MODIFIERS => '',
+ GESHI_BEFORE => '\\1',
+ GESHI_AFTER => ''
+ ),
+ // Negated hostanmes (doesn't work)
+ //1 => array(
+ // GESHI_SEARCH => '([([{,<+*-\/=\s!]|&lt;)(?!(?:PIPE|SEMI|DOT|NUM|REG3XP\d*)\W)(![a-zA-Z*]\w*)(?!\w)',
+ // GESHI_SEARCH => '(?<=!)(.*?)',
+ // GESH_REPLACE => '\\2',
+ // GESHI_MODIFIERS => '',
+ // GESHI_BEFORE => '\\1',
+ // GESHI_AFTER => ''
+ // ),
+ // Wildcards
+ 2 => '\*'
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
diff --git a/vendor/geshi/geshi/src/geshi/standardml.php b/vendor/geshi/geshi/src/geshi/standardml.php
index 9979ac5e4..c48494c58 100644
--- a/vendor/geshi/geshi/src/geshi/standardml.php
+++ b/vendor/geshi/geshi/src/geshi/standardml.php
@@ -4,7 +4,7 @@
* ----------
* Author: eldesh (nephits@gmail.com)
* Copyright: (c) 2014 eldesh (http://d.hatena.ne.jp/eldesh/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2014/02/04
*
* SML (StandardML'97) language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/stonescript.php b/vendor/geshi/geshi/src/geshi/stonescript.php
index 6ea1971d8..cdf89919d 100644
--- a/vendor/geshi/geshi/src/geshi/stonescript.php
+++ b/vendor/geshi/geshi/src/geshi/stonescript.php
@@ -4,7 +4,7 @@
* --------
* Author: Archimmersion ( based on ruby.php by Moises Deniz )
* Copyright: (c) 2011 Archimmersion ( http://www.archimmersion.com )
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2011/03/30
*
* StoneScript language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/swift.php b/vendor/geshi/geshi/src/geshi/swift.php
index 4069035f5..93091bbe4 100644
--- a/vendor/geshi/geshi/src/geshi/swift.php
+++ b/vendor/geshi/geshi/src/geshi/swift.php
@@ -4,7 +4,7 @@
* ----------
* Author: Ken Woo (ikenwoo@gmail.com)
* Copyright: (c) 2015 Ken Woo
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2015/05/20
*
* Swift language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/systemverilog.php b/vendor/geshi/geshi/src/geshi/systemverilog.php
index 24ed3439b..6d3124b36 100644
--- a/vendor/geshi/geshi/src/geshi/systemverilog.php
+++ b/vendor/geshi/geshi/src/geshi/systemverilog.php
@@ -4,7 +4,7 @@
* -------
* Author: Sean O'Boyle
* Copyright: (C) 2008 IntelligentDV
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/06/25
*
* SystemVerilog IEEE 1800-2009(draft8) language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/tcl.php b/vendor/geshi/geshi/src/geshi/tcl.php
index 73b854eb5..ddaf13499 100644
--- a/vendor/geshi/geshi/src/geshi/tcl.php
+++ b/vendor/geshi/geshi/src/geshi/tcl.php
@@ -4,7 +4,7 @@
* ---------------------------------
* Author: Reid van Melle (rvanmelle@gmail.com)
* Copyright: (c) 2004 Reid van Melle (sorry@nowhere)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2006/05/05
*
* TCL/iTCL language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/tclegg.php b/vendor/geshi/geshi/src/geshi/tclegg.php
index cc787e8c5..725e1e213 100644
--- a/vendor/geshi/geshi/src/geshi/tclegg.php
+++ b/vendor/geshi/geshi/src/geshi/tclegg.php
@@ -4,7 +4,7 @@
* ---------------------------------
* Author: Reid van Melle (rvanmelle@gmail.com)
* Copyright: (c) 2004 Reid van Melle (sorry@nowhere)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2006/05/05
*
* TCL/iTCL language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/teraterm.php b/vendor/geshi/geshi/src/geshi/teraterm.php
index 7c360029d..9f04b7bcd 100644
--- a/vendor/geshi/geshi/src/geshi/teraterm.php
+++ b/vendor/geshi/geshi/src/geshi/teraterm.php
@@ -4,7 +4,7 @@
* --------
* Author: Boris Maisuradze (boris at logmett.com)
* Copyright: (c) 2008 Boris Maisuradze (http://logmett.com)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/09/26
*
* Tera Term Macro language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/texgraph.php b/vendor/geshi/geshi/src/geshi/texgraph.php
index ed579555b..1f82d4280 100644
--- a/vendor/geshi/geshi/src/geshi/texgraph.php
+++ b/vendor/geshi/geshi/src/geshi/texgraph.php
@@ -4,7 +4,7 @@
* -----------
* Author: Patrick Fradin (patrick.fradin@gmail.com)
* Copyright: (c) 2011 Patrick Fradin
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2011-09-18
*
* TeXgraph language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/text.php b/vendor/geshi/geshi/src/geshi/text.php
index 5b97cff39..217e9c073 100644
--- a/vendor/geshi/geshi/src/geshi/text.php
+++ b/vendor/geshi/geshi/src/geshi/text.php
@@ -4,7 +4,7 @@
* --------
* Author: Sean Hanna (smokingrope@gmail.com)
* Copyright: (c) 2006 Sean Hanna
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 04/23/2006
*
* Standard Text File (No Syntax Highlighting).
diff --git a/vendor/geshi/geshi/src/geshi/thinbasic.php b/vendor/geshi/geshi/src/geshi/thinbasic.php
index d4c91e246..a8b413e37 100644
--- a/vendor/geshi/geshi/src/geshi/thinbasic.php
+++ b/vendor/geshi/geshi/src/geshi/thinbasic.php
@@ -4,7 +4,7 @@
* ------
* Author: Eros Olmi (eros.olmi@thinbasic.com)
* Copyright: (c) 2006 Eros Olmi (http://www.thinbasic.com), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2006/05/12
*
* thinBasic language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/tsql.php b/vendor/geshi/geshi/src/geshi/tsql.php
index e333c9712..a20ac91b7 100644
--- a/vendor/geshi/geshi/src/geshi/tsql.php
+++ b/vendor/geshi/geshi/src/geshi/tsql.php
@@ -4,7 +4,7 @@
* --------
* Author: Duncan Lock (dunc@dflock.co.uk)
* Copyright: (c) 2006 Duncan Lock (http://dflock.co.uk/), Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2005/11/22
*
* T-SQL language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/twig.php b/vendor/geshi/geshi/src/geshi/twig.php
index 2936e0f1e..62b193d1e 100644
--- a/vendor/geshi/geshi/src/geshi/twig.php
+++ b/vendor/geshi/geshi/src/geshi/twig.php
@@ -4,7 +4,7 @@
* ----------
* Author: Keyvan Akbary (keyvan@kiwwito.com)
* Copyright: (c) 2011 Keyvan Akbary (http://www.kiwwito.com/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2011/12/05
*
* Twig template language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/typoscript.php b/vendor/geshi/geshi/src/geshi/typoscript.php
index c52ba91ea..4fa2fd9a4 100644
--- a/vendor/geshi/geshi/src/geshi/typoscript.php
+++ b/vendor/geshi/geshi/src/geshi/typoscript.php
@@ -4,7 +4,7 @@
* --------
* Author: Jan-Philipp Halle (typo3@jphalle.de)
* Copyright: (c) 2005 Jan-Philipp Halle (http://www.jphalle.de/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2005/07/29
*
* TypoScript language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/unicon.php b/vendor/geshi/geshi/src/geshi/unicon.php
index bd56f5089..736c29d48 100644
--- a/vendor/geshi/geshi/src/geshi/unicon.php
+++ b/vendor/geshi/geshi/src/geshi/unicon.php
@@ -4,7 +4,7 @@
* --------
* Author: Matt Oates (mattoates@gmail.com)
* Copyright: (c) 2010 Matt Oates (http://mattoates.co.uk)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/04/20
*
* Unicon the Unified Extended Dialect of Icon language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/upc.php b/vendor/geshi/geshi/src/geshi/upc.php
index 0b8b4859b..228940d08 100644
--- a/vendor/geshi/geshi/src/geshi/upc.php
+++ b/vendor/geshi/geshi/src/geshi/upc.php
@@ -8,7 +8,7 @@
* - Jack Lloyd (lloyd@randombit.net)
* - Michael Mol (mikemol@gmail.com)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/06/04
*
* UPC language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/urbi.php b/vendor/geshi/geshi/src/geshi/urbi.php
index f87e6c17a..236a33177 100644
--- a/vendor/geshi/geshi/src/geshi/urbi.php
+++ b/vendor/geshi/geshi/src/geshi/urbi.php
@@ -4,7 +4,7 @@
* -------
* Author: Alexandre Morgand (morgand.alexandre@gmail.com)
* Copyright: (c) 2011 Morgand (http://gostai.com)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2011/09/10
*
* Urbi language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/uscript.php b/vendor/geshi/geshi/src/geshi/uscript.php
index 216eaff71..eb385dbd2 100644
--- a/vendor/geshi/geshi/src/geshi/uscript.php
+++ b/vendor/geshi/geshi/src/geshi/uscript.php
@@ -4,7 +4,7 @@
* ---------------------------------
* Author: pospi (pospi@spadgos.com)
* Copyright: (c) 2007 pospi (http://pospi.spadgos.com)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2007/05/21
*
* UnrealScript language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/vala.php b/vendor/geshi/geshi/src/geshi/vala.php
index fd8ce68f2..d69354d81 100644
--- a/vendor/geshi/geshi/src/geshi/vala.php
+++ b/vendor/geshi/geshi/src/geshi/vala.php
@@ -4,7 +4,7 @@
* ----------
* Author: Nicolas Joseph (nicolas.joseph@valaide.org)
* Copyright: (c) 2009 Nicolas Joseph
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/04/29
*
* Vala language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/vb.php b/vendor/geshi/geshi/src/geshi/vb.php
index 2d2a7b669..3a4405315 100644
--- a/vendor/geshi/geshi/src/geshi/vb.php
+++ b/vendor/geshi/geshi/src/geshi/vb.php
@@ -5,7 +5,7 @@
* Author: Roberto Rossi (rsoftware@altervista.org)
* Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org),
* Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/08/30
*
* Visual Basic language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/vbnet.php b/vendor/geshi/geshi/src/geshi/vbnet.php
index 058b9c460..3932c5208 100644
--- a/vendor/geshi/geshi/src/geshi/vbnet.php
+++ b/vendor/geshi/geshi/src/geshi/vbnet.php
@@ -4,7 +4,7 @@
* ---------
* Author: Alan Juden (alan@judenware.org)
* Copyright: (c) 2004 Alan Juden, Nigel McNie (http://qbnz.com/highlighter)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/06/04
*
* VB.NET language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/vbscript.php b/vendor/geshi/geshi/src/geshi/vbscript.php
index 4f7366469..66796ec80 100644
--- a/vendor/geshi/geshi/src/geshi/vbscript.php
+++ b/vendor/geshi/geshi/src/geshi/vbscript.php
@@ -6,7 +6,7 @@
* Copyright: (c) 2004 Roberto Rossi (http://rsoftware.altervista.org),
* Nigel McNie (http://qbnz.com/highlighter),
* Rory Prendergast (http://www.tanium.com)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2012/08/20
*
* VBScript language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/vedit.php b/vendor/geshi/geshi/src/geshi/vedit.php
index fa79420fb..4a6e1c6dd 100644
--- a/vendor/geshi/geshi/src/geshi/vedit.php
+++ b/vendor/geshi/geshi/src/geshi/vedit.php
@@ -4,7 +4,7 @@
* --------
* Author: Pauli Lindgren (pauli0212@yahoo.com)
* Copyright: (c) 2009 Pauli Lindgren (http://koti.mbnet.fi/pkl/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/12/16
*
* Vedit macro language language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/verilog.php b/vendor/geshi/geshi/src/geshi/verilog.php
index 863230400..afcd91e46 100644
--- a/vendor/geshi/geshi/src/geshi/verilog.php
+++ b/vendor/geshi/geshi/src/geshi/verilog.php
@@ -4,7 +4,7 @@
* -----------
* Author: Günter Dannoritzer <dannoritzer@web.de>
* Copyright: (C) 2008 Günter Dannoritzer
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/05/28
*
* Verilog language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/vhdl.php b/vendor/geshi/geshi/src/geshi/vhdl.php
index edb0fd611..9ff11ec43 100644
--- a/vendor/geshi/geshi/src/geshi/vhdl.php
+++ b/vendor/geshi/geshi/src/geshi/vhdl.php
@@ -6,7 +6,7 @@
* Contributors:
* - Kevin Thibedeau (kevinpt@yahoo.com)
* Copyright: (c) 2005 Alexander Krause
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2005/06/15
*
* VHDL (VHSICADL, very high speed integrated circuit HDL) language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/vim.php b/vendor/geshi/geshi/src/geshi/vim.php
index 39ec83137..6f959a095 100644
--- a/vendor/geshi/geshi/src/geshi/vim.php
+++ b/vendor/geshi/geshi/src/geshi/vim.php
@@ -6,7 +6,7 @@
* Contributors:
* - Laurent Peuch (psycojoker@gmail.com)
* Copyright: (c) 2008 Swaroop C H (http://www.swaroopch.com)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/10/19
*
* Vim scripting language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/visualfoxpro.php b/vendor/geshi/geshi/src/geshi/visualfoxpro.php
index 9e43eaddf..cda3d5abe 100644
--- a/vendor/geshi/geshi/src/geshi/visualfoxpro.php
+++ b/vendor/geshi/geshi/src/geshi/visualfoxpro.php
@@ -4,7 +4,7 @@
* ----------------
* Author: Roberto Armellin (r.armellin@tin.it)
* Copyright: (c) 2004 Roberto Armellin, Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/09/17
*
* Visual FoxPro language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/visualprolog.php b/vendor/geshi/geshi/src/geshi/visualprolog.php
index 72ddb4510..edb186c37 100644
--- a/vendor/geshi/geshi/src/geshi/visualprolog.php
+++ b/vendor/geshi/geshi/src/geshi/visualprolog.php
@@ -4,7 +4,7 @@
* ----------
* Author: Thomas Linder Puls (puls@pdc.dk)
* Copyright: (c) 2008 Thomas Linder Puls (puls@pdc.dk)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/11/20
*
* Visual Prolog language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/whitespace.php b/vendor/geshi/geshi/src/geshi/whitespace.php
index 47ca8fd91..c11f69fd6 100644
--- a/vendor/geshi/geshi/src/geshi/whitespace.php
+++ b/vendor/geshi/geshi/src/geshi/whitespace.php
@@ -4,7 +4,7 @@
* ----------
* Author: Benny Baumann (BenBE@geshi.org)
* Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2009/10/31
*
* Whitespace language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/whois.php b/vendor/geshi/geshi/src/geshi/whois.php
index 5ca47e173..e429d2531 100644
--- a/vendor/geshi/geshi/src/geshi/whois.php
+++ b/vendor/geshi/geshi/src/geshi/whois.php
@@ -4,7 +4,7 @@
* --------
* Author: Benny Baumann (BenBE@geshi.org)
* Copyright: (c) 2008 Benny Baumann (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/09/14
*
* Whois response (RPSL format) language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/winbatch.php b/vendor/geshi/geshi/src/geshi/winbatch.php
index aa1ce5268..618fb6e26 100644
--- a/vendor/geshi/geshi/src/geshi/winbatch.php
+++ b/vendor/geshi/geshi/src/geshi/winbatch.php
@@ -4,7 +4,7 @@
* ------------
* Author: Craig Storey (storey.craig@gmail.com)
* Copyright: (c) 2004 Craig Storey (craig.xcottawa.ca)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2006/05/19
*
* WinBatch language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/wolfram.php b/vendor/geshi/geshi/src/geshi/wolfram.php
new file mode 100644
index 000000000..9ea9e3cee
--- /dev/null
+++ b/vendor/geshi/geshi/src/geshi/wolfram.php
@@ -0,0 +1,967 @@
+<?php
+/******************************************************************************
+ * wolfram.php
+ * ----------
+ * Author: Mysterious Light (youngmysteriouslight@gmail.com)
+ * Copyright: (c) 2018 Mysterious Light (youngmysteriouslight@gmail.com)
+ * Release Version: 1.0.9.1
+ * Date Started: 2018/01/12
+ *
+ * Wolfram language file for GeSHi.
+ *
+ ******************************************************************************
+ *
+ * This file is part of GeSHi.
+ *
+ * GeSHi is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GeSHi is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GeSHi; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ *****************************************************************************/
+
+$language_data = array (
+ 'LANG_NAME' => 'Wolfram',
+ 'COMMENT_SINGLE' => array(),
+ 'COMMENT_MULTI' => array('(*' => '*)'),
+ 'COMMENT_REGEXP' => array(
+ 2 => '/\\(\\*.*\\*\\)/',
+ 3 => '/\\\\\\[\\w+]/'
+ ),
+ 'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
+ 'QUOTEMARKS' => array('"'),
+ 'ESCAPE_CHAR' => '\\',
+ 'KEYWORDS' => array(
+ /* main wolfram keywords */
+ 1 => array(
+ 'AbelianGroup', '$Aborted', 'AbortKernels', 'Abort', 'Abs', 'All',
+ 'AbortProtect', 'AbsoluteCurrentValue', 'AbsoluteDashing', 'AddTo',
+ 'AbsoluteFileName', 'AbsoluteOptions', 'AbsolutePointSize', 'And',
+ 'AbsoluteThickness', 'AbsoluteTime', 'AbsoluteTiming', 'Accuracy',
+ 'AccountingForm', 'Accumulate', 'AccuracyGoal', 'ActionMenu', 'C',
+ 'Active', 'ActiveStyle', 'AcyclicGraphQ', 'AddOnHelpPath', 'Alias',
+ 'AdjacencyGraph', 'AdjacencyMatrix', 'AdjustmentBox', 'AiryAi',
+ 'AffineTransform', 'AiryAiPrime', 'AiryAiZero', 'AiryBi', 'AngerJ',
+ 'AiryBiPrime', 'AiryBiZero', 'AlgebraicIntegerQ', 'AlgebraicRules',
+ 'AlgebraicNumberDenominator', 'AlgebraicNumber', 'Algebraics', 'D',
+ 'AlgebraicNumberNorm', 'AlgebraicNumberPolynomial', 'Alignment',
+ 'AlgebraicNumberTrace', 'AlgebraicUnitQ', 'AlignmentPoint', 'Arg',
+ 'AllowGroupClose', 'AllowInlineCells', 'AllowReverseGroupClose',
+ 'AllowScriptLevelChange', 'AlphaChannel', 'AlternatingGroup', 'Do',
+ 'AlternativeHypothesis', 'Alternatives', 'AmbientLight', 'Animate',
+ 'AnchoredSearch', 'AndersonDarlingTest', 'AngleBracket', 'Annuity',
+ 'AnimationCycleOffset', 'AnimationCycleRepetitions', 'Animator',
+ 'AnimationDirection', 'AnimationDisplayTime', 'AnimationRate', 'E',
+ 'AnimationRepetitions', 'AnimationRunning', 'Annotation', 'Apart',
+ 'AnnuityDue', 'Antialiasing', 'ApartSquareFree', 'Appearance', 'I',
+ 'AppearanceElements', 'AppellF1', 'Append', 'AppendTo', 'Apply',
+ 'ArcCosh', 'ArcCos', 'ArcCoth', 'ArcCot', 'ArcCsch', 'ArcCsc', 'N',
+ 'ArcSech', 'ArcSec', 'ArcSinDistribution', 'ArcSinh', 'ArcSin',
+ 'ArcTanh', 'ArcTan', 'ArgMax', 'ArgMin', 'ArithmeticGeometricMean',
+ 'ArrayComponents', 'ArrayDepth', 'ArrayFlatten', 'Array', 'ArrayQ',
+ 'ArrayPad', 'ArrayPlot', 'ArrayRules', 'Arrowheads', 'Arrow', 'Dt',
+ 'AspectRatioFixed', 'AspectRatio', '$AssertFunction', 'Assert',
+ 'Assuming', '$Assumptions', 'Assumptions', 'AstronomicalData', 'O',
+ 'Asynchronous', 'AtomQ', 'Attributes', 'AutoAction', 'AutoDelete',
+ 'AugmentedSymmetricPolynomial', 'AutoGeneratedPackage', 'AxesEdge',
+ 'AutoIndent', 'AutoItalicWords', 'AutoloadPath', 'Automatic', 'If',
+ 'AutoMultiplicationSymbol', 'AutoOpenNotebooks', 'AutoScroll',
+ 'AutoOpenPalettes', 'AutorunSequencing', 'AutoSpacing', 'Axes',
+ 'AxesLabel', 'AxesOrigin', 'AxesStyle', 'Axis', 'Background', 'Im',
+ 'BabyMonsterGroupB', 'Back', 'Backslash', 'Backward', 'Band', 'In',
+ 'BarabasiAlbertGraphDistribution', 'BarChart3D', 'BarChart', 'Cap',
+ 'BarnesG', 'BarOrigin', 'BarSpacing', '$BaseDirectory', 'BaseForm',
+ 'Baseline', 'BaselinePosition', 'BaseStyle', '$BatchInput', 'Beep',
+ '$BatchOutput', 'BatesDistribution', 'BattleLemarieWavelet', 'CDF',
+ 'Because', 'BeckmannDistribution', 'BeginDialogPacket', 'Begin',
+ 'BeginPackage', 'BellB', 'BellY', 'BenfordDistribution', 'BesselI',
+ 'BeniniDistribution', 'BenktanderGibratDistribution', 'BernoulliB',
+ 'BenktanderWeibullDistribution', 'BernoulliDistribution', 'Beta',
+ 'BernoulliGraphDistribution', 'BernsteinBasis', 'BesselJ', 'BitOr',
+ 'BesselJZero', 'BesselK', 'BesselY', 'BesselYZero', 'BezierCurve',
+ 'BetaBinomialDistribution', 'BetaDistribution', 'BetaRegularized',
+ 'BetaNegativeBinomialDistribution', 'BetaPrimeDistribution', 'Cos',
+ 'BetweennessCentrality', 'BezierFunction', 'BilateralFilter', 'On',
+ 'Binarize', 'BinaryFormat', 'BinaryImageQ', 'BinaryReadList', 'Or',
+ 'BinaryRead', 'BinaryWrite', 'BinCounts', 'BinLists', 'Binomial',
+ 'BinomialDistribution', 'BinormalDistribution', 'BipartiteGraphQ',
+ 'BiorthogonalSplineWavelet', 'BirnbaumSaundersDistribution', 'Cot',
+ 'BitAnd', 'BitClear', 'BitGet', 'BitLength', 'BitNot', 'BitSet',
+ 'BitShiftLeft', 'BitShiftRight', 'BitXor', 'Black', 'Blank', 'Csc',
+ 'BlankNullSequence', 'BlankSequence', 'Blend', 'Block', 'Blue',
+ 'BlockRandom', 'Blur', 'BodePlot', 'Bold', 'Bookmarks', 'Booleans',
+ 'BooleanConvert', 'BooleanCountingFunction', 'BooleanFunction',
+ 'BooleanGraph', 'BooleanMaxterms', 'BooleanMinimize', 'Boole',
+ 'BooleanMinterms', 'BooleanTable', 'BooleanVariables', 'Bottom',
+ 'BorderDimensions', 'BorelTannerDistribution', 'BoundaryStyle',
+ 'BottomHatTransform', 'BoxBaselineShift', 'BoxData', 'Boxed', 'Pi',
+ 'BoxFormFormatTypes', 'BoxFrame', 'BoxMargins', 'BoxMatrix', 'Cup',
+ 'BoxRatios', 'BoxStyle', 'BoxWhiskerChart', 'BracketingBar', 'Del',
+ 'BrayCurtisDistance', 'BreadthFirstScan', 'Break', 'Brown', 'Byte',
+ 'BrownForsytheTest', 'BSplineBasis', 'BSplineCurve', 'BubbleChart',
+ 'BSplineFunction', 'BSplineSurface', 'BubbleChart3D', 'ButtonBar',
+ 'BubbleScale', 'BubbleSizes', 'ButterflyGraph', 'ButtonBox', 'Det',
+ 'ButtonBoxOptions', 'ButtonData', 'ButtonEvaluator', 'ButtonFrame',
+ 'ButtonExpandable', 'ButtonFunction', 'ButtonMargins', 'Button',
+ 'ButtonMinHeight', 'ButtonNotebook', 'ButtonNote', 'ButtonSource',
+ 'ButtonStyle', 'ByteCount', '$ByteOrdering', 'ByteOrdering', 'Dot',
+ 'CallPacket', 'CanberraDistance', 'CancelButton', '$Canceled',
+ 'Cancel', 'CandlestickChart', 'CapForm', 'CapitalDifferentialD',
+ 'CarmichaelLambda', 'Cases', 'Cashflow', 'Casoratian', 'Catalan',
+ 'CatalanNumber', 'Catch', 'CauchyDistribution', 'CayleyGraph',
+ 'CDFWavelet', 'Ceiling', 'CellArray', 'CellAutoOverwrite', 'Cell',
+ 'CellBaseline', 'CellBracketOptions', 'CellChangeTimes', 'Center',
+ 'CellContext', 'CellDingbat', 'CellDynamicExpression', 'CellFrame',
+ 'CellEditDuplicate', 'CellEpilog', 'CellEvaluationDuplicate', 'Re',
+ 'CellEvaluationFunction', 'CellEventActions', 'CellFrameColor',
+ 'CellFrameLabelMargins', 'CellFrameLabels', 'CellFrameMargins',
+ 'CellGroupData', 'CellGrouping', 'CellGroupingRules', 'CellGroup',
+ 'CellHorizontalScrolling', 'CellLabelAutoDelete', 'CellLabel',
+ 'CellLabelMargins', 'CellLabelPositioning', 'CellMargins', 'CForm',
+ 'CellOpen', 'CellPrint', 'CellProlog', 'CellSize', 'CellTags',
+ 'CellularAutomaton', 'CensoredDistribution', 'Censoring', 'Check',
+ 'CenterDot', 'CentralMomentGeneratingFunction', 'CentralMoment',
+ 'ChampernowneNumber', 'ChanVeseBinarize', '$CharacterEncoding',
+ 'CharacterEncoding', '$CharacterEncodings', 'Character', 'Chop',
+ 'CharacterEncodingsPath', 'CharacteristicFunction', 'Characters',
+ 'CharacteristicPolynomial', 'CharacterRange', 'ChartBaseStyle',
+ 'ChartElementFunction', 'ChartElements', 'ChartLabels', 'Checkbox',
+ 'ChartLayout', 'ChartLegends', 'ChartStyle', 'ChebyshevDistance',
+ 'ChebyshevT', 'ChebyshevU', 'CheckAbort', 'CheckboxBar', 'Circle',
+ 'ChemicalData', 'ChessboardDistance', 'ChiDistribution', 'Clear',
+ 'ChineseRemainder', 'ChiSquareDistribution', 'ChoiceButtons', 'Tr',
+ 'ChoiceDialog', 'CholeskyDecomposition', 'CircleDot', 'CirclePlus',
+ 'CircleMinus', 'CircleTimes', 'CirculantGraph', 'CityData', 'Clip',
+ 'ClearAll', 'ClearAttributes', 'ClearSystemCache', 'ClebschGordan',
+ 'ClickPane', 'ClipFill', 'ClippingStyle', 'Clock', 'CloseKernels',
+ 'Close', 'ClosenessCentrality', 'ClosingAutoSave', 'Closing',
+ 'ClusteringComponents', 'CMYKColor', 'CoefficientArrays', 'Colon',
+ 'CoefficientList', 'Coefficient', 'CoefficientRules', 'Collect',
+ 'CoifletWavelet', 'ColorCombine', 'ColorConvert', 'ColorData',
+ 'ColorDataFunction', 'ColorFunction', 'ColorFunctionScaling',
+ 'Colorize', 'ColorNegate', 'ColorOutput', 'ColorQuantize', 'Cone',
+ 'ColorRules', 'ColorSelectorSettings', 'ColorSeparate', 'Column',
+ 'ColorSetter', 'ColorSlider', 'ColorSpace', 'ColumnAlignments',
+ 'ColumnForm', 'ColumnLines', 'ColumnsEqual', 'ColumnSpacings',
+ 'ColumnWidths', '$CommandLine', 'CommonDefaultFormatTypes', 'Cosh',
+ 'CommonestFilter', 'Commonest', 'CompilationOptions', 'Compiled',
+ '$CompilationTarget', 'CompilationTarget', 'CompiledFunction',
+ 'Compile', 'Complement', 'CompleteGraph', 'CompleteGraphQ', 'Coth',
+ 'CompleteKaryTree', 'Complexes', 'ComplexExpand', 'Complex', 'End',
+ 'ComplexInfinity', 'ComplexityFunction', 'ComponentMeasurements',
+ 'ComposeList', 'Compose', 'ComposeSeries', 'Composition', 'Count',
+ 'CompoundExpression', 'Compress', 'ConditionalExpression', 'Cross',
+ 'Conditioned', 'Condition', 'ConfidenceLevel', 'ConfigurationPath',
+ '$ConfiguredKernels', 'Congruent', 'Conjugate', 'Conjunction',
+ 'ConjugateTranspose', 'ConnectedComponents', 'ConnectedGraphQ',
+ 'ConoverTest', 'ConstantArray', 'Constant', 'Constants', 'Context',
+ 'ConstrainedMax', 'ConstrainedMin', 'ContentPadding', '$Context',
+ 'ContentSelectable', 'ContentSize', '$ContextPath', 'Contexts',
+ 'ContextToFileName', 'ContinuedFractionK', 'ContinuedFraction',
+ 'Continue', 'ContinuousAction', 'ContinuousTimeModelQ', 'Contours',
+ 'ContinuousWaveletData', 'ContinuousWaveletTransform', 'Control',
+ 'ContourDetect', 'ContourGraphics', 'ContourLabels', 'ContourPlot',
+ 'ContourLevels', 'ContourLines', 'ContourPlot3D', 'ContourShading',
+ 'ContourSpacing', 'ContourStyle', 'ContraharmonicMean', 'Convolve',
+ 'ControlActive', '$ControlActiveSetting', 'ControllabilityGramian',
+ 'ControllabilityMatrix', 'ControllableDecomposition', 'CoprimeQ',
+ 'ControllableModelQ', 'ControllerInformation', 'ControllerLinking',
+ 'ControllerManipulate', 'ControllerMethod', 'ControllerPath',
+ 'ControllerState', 'ControlPlacement', 'ControlsRendering', 'Csch',
+ 'ControlType', 'Convergents', 'ConversionOptions', 'Coproduct',
+ 'ConversionRules', 'ConwayGroupCo1', 'ConwayGroupCo2', 'Copyable',
+ 'ConwayGroupCo3', 'CoordinatesToolOptions', 'CopulaDistribution',
+ 'CopyDirectory', 'CopyFile', 'CopyToClipboard', 'CornerFilter',
+ 'CornerNeighbors', 'CorrelationDistance', 'Correlation', 'Cubics',
+ 'CoshIntegral', 'CosineDistance', 'CosIntegral', 'CounterFunction',
+ 'CounterAssignments', 'CounterIncrements', 'CountRoots', 'Cuboid',
+ 'CounterStyleMenuListing', 'CountryData', 'Covariance', 'Cumulant',
+ 'CovarianceEstimatorFunction', 'CramerVonMisesTest', 'CrossMatrix',
+ 'CreateArchive', 'CreateDialog', 'CreateDirectory', 'CreateWindow',
+ 'CreateDocument', 'CreateIntermediateDirectories', 'CreatePalette',
+ 'CreateScheduledTask', '$CreationDate', 'CriticalSection', 'Cyan',
+ 'CrossingDetect', 'CumulantGeneratingFunction', 'CupCap', 'Cycles',
+ 'CurrentImage', '$CurrentLink', 'CurrentValue', 'CurveClosed',
+ 'CurvatureFlowFilter', 'CycleGraph', 'CyclicGroup', 'Cyclotomic',
+ 'Cylinder', 'CylindricalDecomposition', 'DagumDistribution', 'Erf',
+ 'DamerauLevenshteinDistance', 'Darker', 'Dashed', 'Dashing', 'Exp',
+ 'DataDistribution', 'DataRange', 'DataReversed', 'DateDifference',
+ 'DateFunction', 'DateListLogPlot', 'DateList', 'DateListPlot',
+ 'Date', 'DatePattern', 'DatePlus', '$DateStringFormat', 'DawsonF',
+ 'DateString', 'DateTicksFormat', 'DaubechiesWavelet', 'Debug',
+ 'DavisDistribution', 'DeBruijnGraph', 'DeclarePackage', 'Default',
+ 'Decompose', 'Decrement', 'DedekindEta', 'DefaultAxesStyle', 'Fit',
+ 'DefaultBaseStyle', 'DefaultBoxStyle', 'DefaultButton', 'Defer',
+ 'DefaultColor', 'DefaultDuplicateCellStyle', 'DefaultDuration',
+ 'DefaultElement', 'DefaultFaceGridsStyle', 'DefaultFieldHintStyle',
+ '$DefaultFont', 'DefaultFont', 'DefaultFontProperties', 'Degree',
+ 'DefaultFormatType', 'DefaultFrameStyle', 'DefaultFrameTicksStyle',
+ 'DefaultGridLinesStyle', '$DefaultImagingDevice', 'DefaultOptions',
+ 'DefaultInlineFormatType', 'DefaultLabelStyle', 'DefaultMenuStyle',
+ 'DefaultNaturalLanguage', 'DefaultNewCellStyle', 'DefaultNotebook',
+ 'DefaultNewInlineCellStyle', 'DefaultStyleDefinitions', 'Delete',
+ 'DefaultTicksStyle', 'Definition', 'DegreeCentrality', 'Deletable',
+ 'DegreeGraphDistribution', 'Deinitialization', 'DeleteCases',
+ 'DeleteBorderComponents', 'DeleteContents', 'DeleteDirectory',
+ 'DeleteDuplicates', 'DeleteFile', 'DeleteSmallComponents', 'Depth',
+ 'DeletionWarning', 'DelimiterFlashTime', 'DelimiterMatching',
+ 'Delimiter', 'Denominator', 'DensityGraphics', 'DensityHistogram',
+ 'DensityPlot', 'DependentVariables', 'Deployed', 'Deploy', 'Disk',
+ 'DepthFirstScan', 'DerivativeFilter', 'Derivative', 'DesignMatrix',
+ 'DGaussianWavelet', 'DiacriticalPositioning', 'DiagonalMatrix',
+ 'Diagonal', 'DialogInput', 'Dialog', 'DialogNotebook', 'Diamond',
+ 'DialogProlog', 'DialogReturn', 'DialogSymbols', 'DiamondMatrix',
+ 'DiceDissimilarity', 'DictionaryLookup', 'DifferenceDelta', 'Drop',
+ 'DifferenceRoot', 'DifferenceRootReduce', 'Differences', 'DigitQ',
+ 'DifferentialD', 'DifferentialRoot', 'DifferentialRootReduce',
+ 'DigitBlock', 'DigitCharacter', 'DigitCount', 'DihedralGroup',
+ 'Dilation', 'Dimensions', 'DiracComb', 'DiracDelta', 'Direction',
+ 'DirectedEdge', 'DirectedEdges', 'DirectedGraph', 'DirectedGraphQ',
+ 'DirectedInfinity', 'Directive', 'DirectoryName', 'Directory',
+ 'DirectoryQ', 'DirectoryStack', 'DirichletCharacter', 'DirichletL',
+ 'DirichletConvolve', 'DirichletDistribution', 'DirichletTransform',
+ 'DiscreteConvolve', 'DiscreteDelta', 'DiscreteIndicator', 'Divide',
+ 'DiscreteLQEstimatorGains', 'DiscreteLQRegulatorGains', 'Dispatch',
+ 'DiscreteLyapunovSolve', 'DiscretePlot3D', 'DiscretePlot', 'Dump',
+ 'DiscreteRatio', 'DiscreteRiccatiSolve', 'DiscreteShift', 'Dotted',
+ 'DiscreteTimeModelQ', 'DiscreteUniformDistribution', 'Disjunction',
+ 'DiscreteWaveletData', 'DiscreteWaveletPacketTransform', 'Display',
+ 'DiscreteWaveletTransform', 'Discriminant', 'DiskMatrix', 'DSolve',
+ 'DispersionEstimatorFunction', 'DisplayAllSteps', 'DisplayForm',
+ 'DisplayEndPacket', '$DisplayFunction', 'DisplayFunction', '$Echo',
+ '$Display', 'DisplayPacket', 'DisplayString', 'DistanceFunction',
+ 'DistanceTransform', '$DistributedContexts', 'DistributedContexts',
+ 'DistributeDefinitions', 'Distributed', 'Distribute', 'Dithering',
+ 'DistributionChart', 'DistributionFitTest', 'DivideBy', 'Dividers',
+ 'DistributionParameterAssumptions', 'DistributionParameterQ',
+ 'Divisible', 'DivisorSigma', 'Divisors', 'DivisorSum', 'DMSList',
+ 'DMSString', 'DockedCells', 'DocumentNotebook', 'DotDashed', 'For',
+ 'DotEqual', 'DoubleBracketingBar', 'DoubleDownArrow', 'DownArrow',
+ 'DoubleLeftArrow', 'DoubleLeftRightArrow', 'DoubleLongLeftArrow',
+ 'DoubleLongLeftRightArrow', 'DoubleLongRightArrow', 'DownArrowBar',
+ 'DoubleRightArrow', 'DoubleUpArrow', 'DoubleUpDownArrow', 'EdgeQ',
+ 'DoubleVerticalBar', 'DownArrowUpArrow', 'DownLeftRightVector',
+ 'DownLeftTeeVector', 'DownLeftVectorBar', 'DownLeftVector', 'Erfc',
+ 'DownRightTeeVector', 'DownRightVectorBar', 'DownRightVector',
+ 'DownTeeArrow', 'DownValues', 'DragAndDrop', 'DSolveConstants',
+ 'DualSystemsModel', 'DumpSave', '$DynamicEvaluation', 'Dynamic',
+ 'DynamicEvaluationTimeout', 'DynamicModule', 'DynamicModuleValues',
+ 'DynamicSetting', 'DynamicWrapper', 'EdgeAdd', 'EdgeCount', 'Erfi',
+ 'EdgeCoverQ', 'EdgeDelete', 'EdgeDetect', 'EdgeForm', 'EdgeIndex',
+ 'EdgeLabeling', 'EdgeLabels', 'EdgeLabelStyle', 'EdgeList', 'Exit',
+ 'EdgeRenderingFunction', 'EdgeRules', 'EdgeShapeFunction', 'Equal',
+ 'EdgeStyle', 'EdgeWeight', 'Editable', 'EditCellTagsSettings',
+ 'EditDistance', 'EffectiveInterest', 'Eigensystem', 'Eigenvalues',
+ 'EigenvectorCentrality', 'Eigenvectors', 'ElementData', 'Element',
+ 'Eliminate', 'EllipticE', 'EllipticExp', 'EllipticExpPrime', 'GCD',
+ 'EllipticF', 'EllipticK', 'EllipticLog', 'EllipticNomeQ', 'Encode',
+ 'EllipticPi', 'EllipticTheta', 'EllipticThetaPrime', 'EmitSound',
+ 'EmpiricalDistribution', 'EmptyGraphQ', 'Enabled', 'EndOfFile',
+ 'EndDialogPacket', 'EndOfLine', 'EndOfString', 'EndPackage', 'Get',
+ 'EngineeringForm', 'EnterExpressionPacket', 'EnterTextPacket',
+ 'EntropyFilter', 'Entropy', 'Environment', '$Epilog', 'Epilog',
+ 'EqualTilde', 'Equilibrium', 'Equivalent', 'ErlangDistribution',
+ 'Erosion', 'ErrorBox', 'ErrorBoxOptions', 'EstimatedDistribution',
+ 'EstimatorGains', 'EstimatorRegulator', 'EuclideanDistance', 'Hue',
+ 'EulerE', 'EulerGamma', 'EulerianGraphQ', 'EulerPhi', 'Evaluate',
+ 'Evaluatable', 'EvaluatePacket', 'EvaluationCompletionAction',
+ 'EvaluationElements', 'EvaluationMonitor', 'EvaluationNotebook',
+ 'EvaluationObject', 'EvaluatorNames', 'Evaluator', 'EvenQ', 'Find',
+ 'EventHandler', 'EventLabels', 'ExactNumberQ', 'ExampleData',
+ 'Except', 'ExcludedForms', 'ExcludePods', 'Exclusions', 'Exists',
+ 'ExclusionsStyle', 'ExpandAll', 'ExpandDenominator', 'Expand',
+ 'ExpandFileName', 'ExpandNumerator', 'Expectation', 'ExpIntegralE',
+ 'ExpectedValue', 'ExpGammaDistribution', 'ExpIntegralEi', 'Export',
+ 'ExponentFunction', 'ExponentialDistribution', 'ExponentialFamily',
+ 'ExponentialGeneratingFunction', 'ExponentialMovingAverage', 'LCM',
+ 'ExponentialPowerDistribution', 'Exponent', 'ExponentPosition',
+ 'ExponentStep', 'ExportAutoReplacements', '$ExportFormats', 'Flat',
+ 'ExportString', 'ExpressionCell', 'Expression', 'ExpToTrig', 'Log',
+ 'ExtendedGCD', 'Extension', 'ExtentElementFunction', 'ExtentSize',
+ 'ExtentMarkers', 'ExternalDataCharacterEncoding', 'ExtractArchive',
+ 'Extract', 'ExtremeValueDistribution', 'FaceForm', 'FaceGrids',
+ 'FaceGridsStyle', 'FactorComplete', 'Factorial2', 'Factorial',
+ 'FactorialMomentGeneratingFunction', 'FactorialMoment', 'Factor',
+ 'FactorialPower', 'FactorInteger', 'FactorList', 'FactorTermsList',
+ 'FactorSquareFreeList', 'FactorSquareFree', 'FactorTerms', 'False',
+ '$Failed', 'FeedbackType', 'Fibonacci', 'FieldHint', 'FieldMasked',
+ 'FieldHintStyle', 'FieldSize', 'FileBaseName', 'FileByteCount',
+ 'FileDate', 'FileExistsQ', 'FileExtension', 'FileFormat', 'First',
+ 'FileHash', 'FileNameDepth', 'FileNameDialogSettings', 'FileNames',
+ 'FileNameDrop', 'FileNameJoin', 'FileNameSetter', 'FileNameSplit',
+ 'FileNameTake', 'FilePrint', 'FileType', 'FilledCurve', 'Filling',
+ 'FillingStyle', 'FillingTransform', 'FilterRules', 'FinancialBond',
+ 'FinancialData', 'FinancialDerivative', 'FinancialIndicator',
+ 'FindArgMax', 'FindArgMin', 'FindClique', 'FindClusters', 'Floor',
+ 'FindCurvePath', 'FindDistributionParameters', 'FindDivisions',
+ 'FindEdgeCover', 'FindEulerianCycle', 'FindFile', 'FindFit', 'Map',
+ 'FindGeneratingFunction', 'FindGeoLocation', 'FindInstance', 'Max',
+ 'FindGeometricTransform', 'FindGraphIsomorphism', 'FindLibrary',
+ 'FindHamiltonianCycle', 'FindIndependentEdgeSet', 'FindList',
+ 'FindIndependentVertexSet', 'FindIntegerNullVector', 'FindMaximum',
+ 'FindLinearRecurrence', 'FindMaxValue', 'FindMinimum', 'FindRoot',
+ 'FindMinValue', 'FindPermutation', 'FindSequenceFunction', 'Fold',
+ 'FindSettings', 'FindShortestPath', 'FindShortestTour', 'Flatten',
+ 'FindThreshold', 'FindVertexCover', 'FinishDynamic', 'FittedModel',
+ 'FiniteAbelianGroupCount', 'FiniteGroupCount', 'FiniteGroupData',
+ 'FischerGroupFi22', 'FischerGroupFi23', 'FischerGroupFi24Prime',
+ 'FisherHypergeometricDistribution', 'FisherRatioTest', 'FlattenAt',
+ 'FisherZDistribution', 'FixedPointList', 'FixedPoint', 'FlipView',
+ 'FoldList', 'FontColor', 'FontFamily', 'FontForm', 'FontSize',
+ 'FontProperties', 'FontSlant', 'FontSubstitutions', 'FontTracking',
+ 'FontVariations', 'FontWeight', 'ForAll', 'Format', '$FormatType',
+ 'FormatTypeAutoConvert', 'FormatType', 'FormBox', 'FormBoxOptions',
+ 'FortranForm', 'ForwardBackward', 'Forward', 'FourierCoefficient',
+ 'FourierCosCoefficient', 'FourierCosSeries', 'FourierCosTransform',
+ 'FourierDCT', 'FourierDST', 'Fourier', 'FourierParameters', 'Full',
+ 'FourierSequenceTransform', 'FourierSeries', 'FourierSinSeries',
+ 'FourierSinCoefficient', 'FourierSinTransform', 'FourierTransform',
+ 'FourierTrigSeries', 'FractionalPart', 'FractionBox', 'FrameBox',
+ 'FractionBoxOptions', 'FractionLine', 'FrameBoxOptions', 'Framed',
+ 'FrameLabel', 'FrameMargins', 'Frame', 'FrameStyle', 'FrameTicks',
+ 'FrameTicksStyle', 'FRatioDistribution', 'FrechetDistribution',
+ 'FreeQ', 'FresnelC', 'FresnelS', 'FrobeniusNumber', 'FromASCII',
+ 'FrobeniusSolve', 'FromCharacterCode', 'FromCoefficientRules',
+ 'FromContinuedFraction', 'FromDate', 'FromDigits', 'FromDMS',
+ 'FrontEndDynamicExpression', 'FrontEndEventActions', '$FrontEnd',
+ 'FrontEndExecute', '$FrontEndSession', 'FrontEndStackSize', 'Glow',
+ 'FrontEndTokenExecute', 'FrontEndToken', 'Front', 'FullDefinition',
+ 'FullForm', 'FullGraphics', 'FullOptions', 'FullSimplify', 'Gamma',
+ 'FunctionExpand', 'FunctionInterpolation', 'Function', 'GatherBy',
+ 'FunctionSpace', 'GaborWavelet', 'GainMargins', 'GainPhaseMargins',
+ 'GammaDistribution', 'GammaRegularized', 'GapPenalty', 'Gather',
+ 'GaussianFilter', 'GaussianIntegers', 'GaussianMatrix', 'General',
+ 'GegenbauerC', 'GeneralizedLinearModelFit', 'GenerateConditions',
+ 'GeneratedCell', 'GeneratedParameters', 'GeneratingFunction',
+ 'GenericCylindricalDecomposition', 'GenomeData', 'GenomeLookup',
+ 'GeodesicDilation', 'GeodesicErosion', 'GeoDestination', 'Goto',
+ 'GeodesyData', 'GeoDirection', 'GeoDistance', 'GeoGridPosition',
+ '$GeoLocation', 'GeometricDistribution', 'GeometricMeanFilter',
+ 'GeometricMean', 'GeometricTransformation', 'GeoPositionENU',
+ 'GeoPosition', 'GeoPositionXYZ', 'GeoProjectionData', 'Glaisher',
+ 'GoldenRatio', 'GompertzMakehamDistribution', 'GradientFilter',
+ 'Gradient', 'GraphCenter', 'GraphComplement', 'GraphData', 'Graph',
+ 'GraphDiameter', 'GraphDifference', 'GraphDisjointUnion', 'GraphQ',
+ 'GraphDistanceMatrix', 'GraphDistance', 'GraphHighlight', 'Gray',
+ 'GraphHighlightStyle', 'Graphics3D', 'GraphicsArray', 'Graphics',
+ 'GraphicsColumn', 'GraphicsComplex', 'GraphicsGrid', 'GraphicsRow',
+ 'GraphicsGroup', 'GraphicsSpacing', 'GraphIntersection', 'Greater',
+ 'GraphLayout', 'GraphPeriphery', 'GraphPlot3D', 'GraphPlot', 'Min',
+ 'GraphPower', 'GraphRadius', 'GraphStyle', 'GraphUnion', 'Green',
+ 'GrayLevel', 'GreaterEqualLess', 'GreaterEqual', 'GreaterGreater',
+ 'GreaterFullEqual', 'GreaterLess', 'GreaterSlantEqual', 'GridBox',
+ 'GreaterTilde', 'GridBaseline', 'GridCreationSettings', 'Grid',
+ 'GridDefaultElement', 'GridFrameMargins', 'GridFrame', 'GridGraph',
+ 'GridLines', 'GridLinesStyle', 'GroebnerBasis', 'GroupActionBase',
+ 'GroupCentralizer', 'GroupElementPosition', 'GroupElementQ', 'Mod',
+ 'GroupElements', 'GroupGenerators', 'GroupMultiplicationTable',
+ 'GroupOrbits', 'GroupOrder', 'GroupPageBreakWithin', 'HaarWavelet',
+ 'GroupSetwiseStabilizer', 'GroupStabilizerChain', 'Gudermannian',
+ 'GroupStabilizer', 'GumbelDistribution', 'HalfNormalDistribution',
+ 'HamiltonianGraphQ', 'HammingDistance', 'HankelH1', 'HankelH2',
+ 'HankelMatrix', 'HaradaNortonGroupHN', 'HararyGraph', 'Hash',
+ 'HarmonicMeanFilter', 'HarmonicMean', 'HarmonicNumber', 'Head',
+ 'Haversine', 'HazardFunction', 'Heads', 'HeavisideLambda', 'Hold',
+ 'HeavisidePi', 'HeavisideTheta', 'HeldGroupHe', 'HeldPart', 'Item',
+ 'HelpBrowserSettings', 'HermiteDecomposition', 'HermiteH', 'Image',
+ 'HermitianMatrixQ', 'HessenbergDecomposition', 'HiddenSurface',
+ 'HexadecimalCharacter', 'HighlightGraph', 'HigmanSimsGroupHS',
+ 'HilbertMatrix', 'Histogram3D', 'HistogramDistribution', 'HoldAll',
+ 'HistogramList', 'Histogram', '$HistoryLength', 'HitMissTransform',
+ 'HITSCentrality', 'HoldAllComplete', 'HoldComplete', 'HoldFirst',
+ 'HoldForm', 'HoldPattern', 'HoldRest', '$HomeDirectory', 'ImageQ',
+ 'HomeDirectory', 'HornerForm', 'HotellingTSquareDistribution',
+ 'HoytDistribution', 'HTMLSave', 'HumpDownHump', 'HumpEqual', 'Nor',
+ 'HurwitzLerchPhi', 'HurwitzZeta', 'HyperbolicDistribution', 'Join',
+ 'HypercubeGraph', 'Hyperfactorial', 'Hypergeometric0F1', 'Implies',
+ 'Hypergeometric0F1Regularized', 'Hypergeometric1F1', 'Hyperlink',
+ 'Hypergeometric1F1Regularized', 'Hypergeometric2F1', 'Hyphenation',
+ 'Hypergeometric2F1Regularized', 'HypergeometricDistribution',
+ 'HypergeometricPFQ', 'HypergeometricPFQRegularized', 'Identity',
+ 'HypergeometricU', 'HypothesisTestData', 'IdentityMatrix', 'Infix',
+ 'IgnoreCase', '$IgnoreEOF', 'ImageAdd', 'ImageAdjust', 'ImageClip',
+ 'ImageAlign', 'ImageApply', 'ImageAspectRatio', 'ImageAssemble',
+ 'ImageCapture', 'ImageChannels', 'ImageColorSpace', 'ImageCompose',
+ 'ImageConvolve', 'ImageCooccurrence', 'ImageCorrelate', 'ImagePad',
+ 'ImageCorrespondingPoints', 'ImageCrop', 'ImageData', 'ImageLines',
+ 'ImageDeconvolve', 'ImageDifference', 'ImageDimensions', 'Import',
+ 'ImageEffect', 'ImageFilter', 'ImageForestingComponents', 'Inner',
+ 'ImageForwardTransformation', 'ImageHistogram', 'ImageKeypoints',
+ 'ImageLevels', 'ImageMargins', 'ImageMultiply', 'ImagePadding',
+ 'ImagePartition', 'ImagePerspectiveTransformation', 'ImageReflect',
+ 'ImageRegion', 'ImageResize', 'ImageResolution', 'ImageRotated',
+ 'ImageRotate', 'ImageScaled', 'ImageSizeAction', 'ImageSize',
+ 'ImageSizeMultipliers', 'ImageSubtract', 'ImageTake', 'ImageTrim',
+ 'ImageTransformation', 'ImageType', 'ImageValue', '$ImportFormats',
+ '$ImagingDevices', 'ImportAutoReplacements', 'ImportString', 'Not',
+ 'IncidenceGraph', 'IncidenceMatrix', 'IncludeConstantBasis', 'Off',
+ 'IncludeFileExtension', 'IncludePods', 'Increment', 'IndexGraph',
+ 'IndependentEdgeSetQ', 'IndependentVertexSetQ', 'Indeterminate',
+ 'InexactNumberQ', 'Infinity', 'Information', 'Inherited', '$Input',
+ '$InitialDirectory', 'InitializationCellEvaluation', 'Inpaint',
+ 'InitializationCell', 'InitializationCellWarning', 'InputAliases',
+ 'InitializationGroup', 'Initialization', 'InputAssumptions', 'Out',
+ 'InputAutoReplacements', 'InputField', '$InputFileName', 'Input',
+ 'InputForm', 'InputNamePacket', 'InputNotebook', 'InputPacket',
+ 'InputStream', 'InputString', 'InputStringPacket', 'Insert', 'PDF',
+ 'InsertResults', 'Inset', '$Inspector', '$InstallationDate', 'Put',
+ '$InstallationDirectory', 'Install', 'InstallService', 'InString',
+ 'IntegerDigits', 'IntegerExponent', 'IntegerLength', 'Integer',
+ 'IntegerPartitions', 'IntegerPart', 'IntegerQ', 'Integers', 'Last',
+ 'IntegerString', 'Integrate', 'InteractiveTradingChart', 'Inverse',
+ 'Interleaving', 'InternallyBalancedDecomposition', 'Interpolation',
+ 'InterpolatingFunction', 'InterpolatingPolynomial', 'Interrupt',
+ 'InterpolationOrder', 'InterpolationPoints', 'InterpretationBox',
+ 'InterpretationBoxOptions', 'Interpretation', 'InterquartileRange',
+ 'Intersection', 'IntervalIntersection', 'IntervalMemberQ', 'Label',
+ 'Interval', 'IntervalUnion', 'InverseBetaRegularized', 'Invisible',
+ 'InverseCDF', 'InverseChiSquareDistribution', 'InverseErfc', 'Raw',
+ 'InverseContinuousWaveletTransform', 'InverseDistanceTransform',
+ 'InverseEllipticNomeQ', 'InverseErf', 'InverseFourierCosTransform',
+ 'InverseFourier', 'InverseFourierSequenceTransform', 'IsotopeData',
+ 'InverseFourierSinTransform', 'InverseFourierTransform', 'Italic',
+ 'InverseFunction', 'InverseFunctions', 'InverseGammaDistribution',
+ 'InverseGammaRegularized', 'InverseGaussianDistribution', 'Joined',
+ 'InverseGudermannian', 'InverseHaversine', 'InverseJacobiCD',
+ 'InverseJacobiCN', 'InverseJacobiCS', 'InverseJacobiDC', 'JacobiP',
+ 'InverseJacobiDN', 'InverseJacobiDS', 'InverseJacobiNC', 'Kernels',
+ 'InverseJacobiND', 'InverseJacobiNS', 'InverseJacobiSC', 'Labeled',
+ 'InverseJacobiSD', 'InverseJacobiSN', 'InverseLaplaceTransform',
+ 'InversePermutation', 'InverseRadon', 'InverseSeries', 'ItemSize',
+ 'InverseSurvivalFunction', 'InverseWaveletTransform', 'ItemStyle',
+ 'InverseWeierstrassP', 'InverseZTransform', 'IsolatingInterval',
+ 'IrreduciblePolynomialQ', 'IsomorphicGraphQ', 'ItemAspectRatio',
+ '$IterationLimit', 'JaccardDissimilarity', 'JacobiAmplitude',
+ 'JacobiCD', 'JacobiCN', 'JacobiCS', 'JacobiDC', 'JacobiDN', 'Left',
+ 'JacobiDS', 'JacobiNC', 'JacobiND', 'JacobiNS', 'JacobiSC', 'Less',
+ 'JacobiSD', 'JacobiSN', 'JacobiSymbol', 'JacobiZeta', 'JoinForm',
+ 'JankoGroupJ1', 'JankoGroupJ2', 'JankoGroupJ3', 'JankoGroupJ4',
+ 'JarqueBeraALMTest', 'JohnsonDistribution', 'JoinedCurve', 'Large',
+ 'JordanDecomposition', 'JordanModelDecomposition', 'KagiChart',
+ 'KalmanEstimator', 'KarhunenLoeveDecomposition', 'KaryTree', 'Red',
+ 'KatzCentrality', 'KCoreComponents', 'KDistribution', 'KelvinBei',
+ 'KelvinBer', 'KelvinKei', 'KelvinKer', '$KernelCount', '$KernelID',
+ 'KernelMixtureDistribution', 'KernelObject', 'Khinchin', 'Larger',
+ 'KirchhoffGraph', 'KirchhoffMatrix', 'KleinInvariantJ', 'KnotData',
+ 'KnightTourGraph', 'KolmogorovSmirnovTest', 'KroneckerDelta',
+ 'KroneckerProduct', 'KroneckerSymbol', 'KuiperTest', 'Kurtosis',
+ 'KumaraswamyDistribution', 'KuwaharaFilter', 'LabelingFunction',
+ 'LabelStyle', 'LaguerreL', 'LandauDistribution', '$Language',
+ 'LanguageCategory', 'Language', 'LaplaceDistribution', 'Latitude',
+ 'LaplaceTransform', 'LaplacianFilter', 'LaplacianGaussianFilter',
+ 'LatitudeLongitude', 'LatticeData', 'LatticeReduce', 'LeafCount',
+ 'LaunchKernels', 'LayeredGraphPlot', 'LayerSizeFunction', 'Length',
+ 'LeastSquares', 'LeftArrowBar', 'LeftArrow', 'LeftArrowRightArrow',
+ 'LeftDownTeeVector', 'LeftDownVectorBar', 'LeftDownVector', 'Line',
+ 'LeftRightArrow', 'LeftRightVector', 'LeftTeeArrow', 'LeftVector',
+ 'LeftTeeVector', 'LeftTriangleBar', 'LeftTriangleEqual', 'LetterQ',
+ 'LeftTriangle', 'LeftUpDownVector', 'LeftUpTeeVector', 'Legended',
+ 'LeftUpVectorBar', 'LeftUpVector', 'LeftVectorBar', 'LegendreP',
+ 'LegendAppearance', 'LegendreQ', 'LegendreType', 'LengthWhile',
+ 'LerchPhi', 'LessEqualGreater', 'LessEqual', 'LessFullEqual',
+ 'LessGreater', 'LessLess', 'LessSlantEqual', 'LessTilde', 'Level',
+ 'LetterCharacter', 'LeveneTest', 'LeviCivitaTensor', 'LibraryLoad',
+ 'LevyDistribution', 'LibraryFunctionError', 'LibraryFunctionLoad',
+ 'LibraryFunctionInformation', 'LibraryFunction', '$LibraryPath',
+ 'LibraryFunctionUnload', 'LibraryUnload', '$LicenseExpirationDate',
+ '$LicenseID', '$LicenseServer', 'LiftingFilterData', 'LightBlue',
+ 'LiftingWaveletTransform', 'LightBrown', 'LightCyan', 'Lighter',
+ 'LightGray', 'LightGreen', 'LightingAngle', 'Lighting', 'LightRed',
+ 'LightMagenta', 'LightOrange', 'LightPink', 'LightPurple', 'Limit',
+ 'LightSources', 'LightYellow', 'Likelihood', 'LimitsPositioning',
+ 'LimitsPositioningTokens', 'LindleyDistribution', 'LinearModelFit',
+ 'LinearFractionalTransform', 'LinearOffsetFunction', 'LinearSolve',
+ 'LinearProgramming', 'LinearRecurrence', 'LinearSolveFunction',
+ 'LinebreakAdjustments', 'LineBreakChart', 'LineBreakWithin', 'Row',
+ 'LineGraph', 'LineIndentMaxFraction', 'LineIndent', '$Line', 'Run',
+ 'LineIntegralConvolutionPlot', 'LineIntegralConvolutionScale',
+ 'LineSpacing', 'LinkClose', 'LinkConnect', 'LinkCreate', '$Linked',
+ 'LinkFunction', 'LinkInterrupt', 'LinkLaunch', 'LinkObject', 'Sec',
+ 'LinkOpen', 'LinkPatterns', 'LinkProtocol', 'LinkRead', 'Links',
+ 'LinkReadyQ', 'LinkWrite', 'LiouvilleLambda', 'Listable', 'List',
+ 'ListAnimate', 'ListContourPlot3D', 'ListContourPlot', 'ListPlay',
+ 'ListConvolve', 'ListCorrelate', 'ListCurvePathPlot', 'ListPlot3D',
+ 'ListDeconvolve', 'ListDensityPlot', 'ListInterpolation', 'Locked',
+ 'ListLineIntegralConvolutionPlot', 'ListLinePlot', 'ListLogPlot',
+ 'ListLogLinearPlot', 'ListLogLogPlot', 'ListPlot', 'ListPolarPlot',
+ 'ListPointPlot3D', 'ListStreamDensityPlot', 'ListStreamPlot',
+ 'ListSurfacePlot3D', 'ListVectorDensityPlot', 'ListVectorPlot3D',
+ 'ListVectorPlot', 'Literal', 'LocalizeVariables', 'LocationTest',
+ 'LocationEquivalenceTest', 'LocatorAutoCreate', 'Locator', 'Log10',
+ 'LocatorPane', 'LocatorRegion', 'Log2', 'LogBarnesG', 'LogGamma',
+ 'LogGammaDistribution', 'LogicalExpand', 'LogIntegral', 'LogPlot',
+ 'LogisticDistribution', 'LogitModelFit', 'LogLikelihood', 'LucasL',
+ 'LogLinearPlot', 'LogLogisticDistribution', 'LogLogPlot', 'Manual',
+ 'LogNormalDistribution', 'LogSeriesDistribution', 'LongestMatch',
+ 'LongestCommonSequence', 'LongestCommonSubsequence', 'Longest',
+ 'Longitude', 'LongLeftArrow', 'LongLeftRightArrow', 'LowerCaseQ',
+ 'LongRightArrow', 'LoopFreeGraphQ', 'LowerLeftArrow', '$MachineID',
+ 'LowerRightArrow', 'LowerTriangularize', 'LQEstimatorGains', 'Set',
+ 'LQGRegulator', 'LQOutputRegulatorGains', 'LQRegulatorGains',
+ 'LUBackSubstitution', 'LUDecomposition', 'LyapunovSolve', 'MapAll',
+ 'LyonsGroupLy', '$MachineAddresses', '$MachineDomain', 'Magenta',
+ '$MachineDomains', '$MachineEpsilon', '$MachineName', 'Magnify',
+ 'MachineNumberQ', '$MachinePrecision', 'MachinePrecision', 'MapAt',
+ '$MachineType', 'Magnification', 'Majority', 'MakeBoxes', 'MatchQ',
+ 'MakeExpression', 'MangoldtLambda', 'ManhattanDistance', 'MarcumQ',
+ 'Manipulate', 'Manipulator', 'MannWhitneyTest', 'MantissaExponent',
+ 'MapIndexed', 'MapThread', 'MardiaCombinedTest', 'Masking', 'Mean',
+ 'MardiaKurtosisTest', 'MardiaSkewnessTest', 'MarginalDistribution',
+ 'MatchingDissimilarity', 'MatchLocalNames', 'MathieuC', 'MathieuS',
+ 'MathieuCharacteristicA', 'MathieuCharacteristicB', 'MathMLForm',
+ 'MathieuCharacteristicExponent', 'MathieuCPrime', 'MathieuSPrime',
+ 'MathieuGroupM11', 'MathieuGroupM12', 'MathieuGroupM22', 'MatrixQ',
+ 'MathieuGroupM23', 'MathieuGroupM24', 'MatrixExp', 'MatrixForm',
+ 'MatrixPlot', 'MatrixPower', 'MatrixRank', 'MaxDetect', 'Maximize',
+ 'MaxExtraBandwidths', 'MaxExtraConditions', '$MaxExtraPrecision',
+ 'MaxFilter', 'MaxIterations', '$MaxMachineNumber', 'MaxMemoryUsed',
+ 'MaxMixtureKernels', '$MaxNumber', '$MaxPiecewiseCases', '$$Media',
+ 'MaxPlotPoints', '$MaxPrecision', 'MaxRecursion', '$MaxRootDegree',
+ 'MaxStableDistribution', 'MaxStepFraction', 'MaxStepSize', 'Mesh',
+ 'MaxSteps', 'MaxValue', 'MaxwellDistribution', 'MeanDeviation',
+ 'McLaughlinGroupMcL', 'MeanFilter', 'MeanShiftFilter', 'MeanShift',
+ 'MedianDeviation', 'MedianFilter', 'Median', 'Medium', 'MeijerG',
+ 'MemberQ', 'MemoryConstrained', 'MemoryInUse', 'MenuCommandKey',
+ 'MenuPacket', 'MenuSortingValue', 'MenuStyle', 'MenuView', 'Minus',
+ 'MeshFunctions', 'MeshRange', 'MeshShading', 'MeshStyle', 'Method',
+ 'MessageDialog', '$MessageGroups', '$MessageList', 'MessageList',
+ 'MessageName', 'Message', 'MessagePacket', '$MessagePrePrint',
+ '$Messages', 'Messages', 'MexicanHatWavelet', 'MeyerWavelet',
+ 'MinDetect', 'MinFilter', 'MinimalPolynomial', 'Minimize', 'Modal',
+ 'MinimalStateSpaceModel', '$MinMachineNumber', '$MinNumber', 'Sin',
+ 'Minors', '$MinPrecision', 'MinStableDistribution', 'MinusPlus',
+ 'MinValue', 'Missing', 'MixtureDistribution', 'ModularLambda',
+ 'Module', '$ModuleNumber', 'Modulus', 'MoebiusMu', 'MomentConvert',
+ 'MomentEvaluate', 'MomentGeneratingFunction', 'Moment', 'Monitor',
+ 'MonomialList', 'MonsterGroupM', 'MorletWavelet', 'Most', 'NameQ',
+ 'MorphologicalBinarize', 'MorphologicalBranchPoints', 'Mouseover',
+ 'MorphologicalComponents', 'MorphologicalEulerNumber', 'Names',
+ 'MorphologicalGraph', 'MorphologicalPerimeter', 'MouseAnnotation',
+ 'MorphologicalTransform', 'MouseAppearance', 'MousePosition',
+ 'MovingAverage', 'MovingMedian', 'MoyalDistribution', 'Nand',
+ 'MultiedgeStyle', 'MultilaunchWarning', 'MultilineFunction', 'Sow',
+ 'MultinomialDistribution', 'Multinomial', 'MultiplicativeOrder',
+ 'MultinormalDistribution', 'MultivariatePoissonDistribution',
+ 'MultivariateHypergeometricDistribution', 'NakagamiDistribution',
+ 'MultivariateTDistribution', 'NArgMax', 'NArgMin', 'NCache', 'Sum',
+ 'NDSolve', 'NearestFunction', 'Nearest', 'Needs', 'Negative',
+ 'NeedlemanWunschSimilarity', 'NegativeBinomialDistribution', 'Tan',
+ 'NegativeMultinomialDistribution', 'NeighborhoodGraph', 'NestList',
+ 'NestedGreaterGreater', 'NestedLessLess', 'Nest', 'NestWhileList',
+ 'NestWhile', 'NevilleThetaC', 'NevilleThetaD', 'NevilleThetaN',
+ 'NevilleThetaS', '$NewMessage', '$NewSymbol', 'NExpectation',
+ 'NextPrime', 'NHoldAll', 'NHoldFirst', 'NHoldRest', 'NicholsPlot',
+ 'NicholsGridLines', 'NIntegrate', 'NMaximize', 'NMaxValue', 'None',
+ 'NMinimize', 'NMinValue', 'NominalVariables', 'NonConstants',
+ 'NoncentralBetaDistribution', 'NoncentralChiSquareDistribution',
+ 'NoncentralFRatioDistribution', 'NoncentralStudentTDistribution',
+ 'NonCommutativeMultiply', 'NonlinearModelFit', 'NonNegative',
+ 'NonPositive', 'NorlundB', 'NormalDistribution', 'Normalize',
+ 'NormalizedSquaredEuclideanDistance', 'Normal', 'NormalsFunction',
+ 'NormFunction', 'Norm', 'NotCongruent', 'NotCupCap', 'NotebookGet',
+ 'NotDoubleVerticalBar', 'NotebookApply', 'NotebookAutoSave', 'Top',
+ 'NotebookBrowseDirectory', 'NotebookClose', 'NotebookCreate',
+ 'NotebookConvertSettings', 'NotebookDelete', 'NotebookDirectory',
+ 'NotebookDynamicExpression', 'NotebookEvaluate', 'NotebookFind',
+ 'NotebookEventActions', 'NotebookFileName', 'NotebookInformation',
+ 'NotebookLocate', 'Notebook', 'NotebookObject', 'NotebookOpen',
+ 'NotebookPath', 'NotebookPrint', 'NotebookPut', 'NotebookRead',
+ 'NotebookSave', 'NotebookSelection', 'NotebooksMenu', '$Notebooks',
+ 'Notebooks', 'NotebookWrite', 'NotElement', 'NotEqualTilde', 'Vee',
+ 'NotExists', 'NotGreaterEqual', 'NotGreaterFullEqual', 'NotLess',
+ 'NotGreaterGreater', 'NotGreaterLess', 'NotGreater', 'NotLessLess',
+ 'NotGreaterSlantEqual', 'NotGreaterTilde', 'NotHumpDownHump',
+ 'NotHumpEqual', 'NotLeftTriangleBar', 'NotLeftTriangleEqual',
+ 'NotLeftTriangle', 'NotLessEqual', 'NotLessFullEqual', 'NotSubset',
+ 'NotLessGreater', 'NotLessSlantEqual', 'NotLessTilde', 'NotTilde',
+ 'NotNestedGreaterGreater', 'NotNestedLessLess', 'NotPrecedesEqual',
+ 'NotPrecedes', 'NotPrecedesSlantEqual', 'NotPrecedesTilde', 'NSum',
+ 'NotReverseElement', 'NotRightTriangleBar', 'NotRightTriangle',
+ 'NotRightTriangleEqual', 'NotSquareSubsetEqual', 'NotSquareSubset',
+ 'NotSquareSupersetEqual', 'NotSquareSuperset', 'NotSubsetEqual',
+ 'NotSucceedsEqual', 'NotSucceeds', 'NotSucceedsSlantEqual', 'Null',
+ 'NotSucceedsTilde', 'NotSupersetEqual', 'NotSuperset', 'NProduct',
+ 'NotTildeEqual', 'NotTildeFullEqual', 'NotTildeTilde', 'NRoots',
+ 'NotVerticalBar', 'NProbability', 'NSolve', 'NullRecords', 'OddQ',
+ 'NullSpace', 'NullWords', 'NumberFieldClassNumber', 'NumberFormat',
+ 'NumberFieldDiscriminant', 'NumberFieldFundamentalUnits', 'Number',
+ 'NumberFieldIntegralBasis', 'NumberFieldNormRepresentatives',
+ 'NumberFieldRegulator', 'NumberFieldRootsOfUnity', 'NumberForm',
+ 'NumberFieldSignature', '$NumberMarks', 'NumberMarks', 'NumberQ',
+ 'NumberMultiplier', 'NumberPadding', 'NumberPoint', 'NumberSigns',
+ 'NumberSeparator', 'NumberString', 'Numerator', 'NumericFunction',
+ 'NumericQ', 'NyquistGridLines', 'NyquistPlot', 'ObservableModelQ',
+ 'ObservabilityGramian', 'ObservabilityMatrix', 'Offset', 'Opacity',
+ 'ObservableDecomposition', 'ONanGroupON', 'OneIdentity', 'Opener',
+ 'OpenAppend', 'OpenerView', 'Opening', 'OpenRead', 'OpenTemporary',
+ 'OpenWrite', 'Operate', '$OperatingSystem', 'OperatingSystem',
+ 'Optional', 'OptionInspectorSettings', 'Options', 'OptionsPattern',
+ 'OptionValue', 'Orange', 'OrderDistribution', 'OrderedQ', 'Order',
+ 'Ordering', 'Orderless', 'Orthogonalize', 'Outer', 'OutputForm',
+ 'OutputAutoOverwrite', 'OutputControllabilityMatrix', '$Output',
+ 'OutputControllableModelQ', 'OutputNamePacket', 'OutputResponse',
+ '$OutputSizeLimit', 'OutputSizeLimit', 'OutputStream', 'OverBar',
+ 'OverDot', 'Overflow', 'OverHat', 'Overlaps', 'Overlay', 'OwenT',
+ 'OverscriptBox', 'OverscriptBoxOptions', 'Overscript', 'OverTilde',
+ 'OverVector', 'OwnValues', '$Packages', 'PackingMethod', 'Padding',
+ 'PaddedForm', 'PadeApproximant', 'PadLeft', 'PadRight', 'Paneled',
+ 'PageBreakAbove', 'PageBreakBelow', 'PageBreakWithin', 'PageWidth',
+ 'PageFooterLines', 'PageFooters', 'PageHeaderLines', 'PageHeaders',
+ 'PageRankCentrality', 'PairedBarChart', 'PairedHistogram', 'Panel',
+ 'PairedTTest', 'PairedZTest', 'PaletteNotebook', 'PalettePath',
+ 'Pane', 'PaneSelector', 'ParabolicCylinderD', 'ParagraphIndent',
+ 'ParagraphSpacing', 'ParallelArray', 'ParallelCombine', 'Part',
+ 'ParallelDo', 'ParallelEvaluate', 'Parallelization', 'Parallelize',
+ 'ParallelMap', 'ParallelNeeds', 'ParallelProduct', 'ParallelSum',
+ 'ParallelSubmit', 'ParallelTable', 'ParallelTry', 'ParametricPlot',
+ 'ParameterEstimator', 'ParameterMixtureDistribution', 'Partition',
+ 'ParametricPlot3D', 'ParentDirectory', '$ParentLink', 'Paste',
+ '$ParentProcessID', 'ParetoDistribution', 'ParticleData', '$Path',
+ 'PartitionsP', 'PartitionsQ', 'PascalDistribution', 'PassEventsUp',
+ 'PassEventsDown', 'PasteBoxFormInlineCells', 'PasteButton', 'Path',
+ 'PathGraph', 'PathGraphQ', '$PathnameSeparator', 'Pattern', 'Pick',
+ 'PatternSequence', 'PatternTest', 'PauliMatrix', 'PaulWavelet',
+ 'Pause', 'PearsonChiSquareTest', 'PearsonDistribution', 'Permute',
+ '$PerformanceGoal', 'PerformanceGoal', 'PermutationCycles', 'Pink',
+ 'PermutationCyclesQ', 'PermutationGroup', 'PermutationLength',
+ 'PermutationList', 'PermutationListQ', 'PermutationMax', 'Placed',
+ 'PermutationMin', 'PermutationOrder', 'PermutationPower', 'Plain',
+ 'PermutationProduct', 'PermutationReplace', 'Permutations', 'Play',
+ 'PermutationSupport', 'PeronaMalikFilter', 'PERTDistribution',
+ 'PetersenGraph', 'PhaseMargins', 'PiecewiseExpand', 'Piecewise',
+ 'PieChart3D', 'PieChart', 'PixelConstrained', 'PixelValue', 'Plot',
+ 'Placeholder', 'PlaceholderReplace', 'PlayRange', 'Plot3D', 'Plus',
+ 'Plot3Matrix', 'PlotDivision', 'PlotJoined', 'PlotLabel', 'Point',
+ 'PlotLayout', 'PlotMarkers', 'PlotPoints', 'PlotRangeClipping',
+ 'PlotRange', 'PlotRangePadding', 'PlotRegion', 'PlotStyle', '$Pre',
+ 'PlusMinus', 'Pochhammer', 'PodStates', 'PodWidth', 'PointSize',
+ 'PointFigureChart', 'PoissonConsulDistribution', 'PolarAxes',
+ 'PoissonDistribution', 'PolarAxesOrigin', 'PolarGridLines', 'Quit',
+ 'PolarPlot', 'PolarTicks', 'PoleZeroMarkers', 'PolyGamma', '$Post',
+ 'PolyaAeppliDistribution', 'PolygonIntersections', 'Polygon',
+ 'PolyhedronData', 'PolyLog', 'PolynomialExtendedGCD', 'PopupMenu',
+ 'PolynomialGCD', 'PolynomialLCM', 'PolynomialMod', 'PolynomialQ',
+ 'PolynomialQuotient', 'PolynomialQuotientRemainder', 'PopupView',
+ 'PolynomialReduce', 'PolynomialRemainder', 'PopupWindow', 'Power',
+ 'Position', 'PositiveDefiniteMatrixQ', 'Positive', 'PossibleZeroQ',
+ 'Postfix', 'PowerDistribution', 'PowerExpand', 'PowerModList',
+ 'PowerMod', 'PowersRepresentations', 'PowerSymmetricPolynomial',
+ 'PrecedenceForm', 'PrecedesEqual', 'Precedes', 'PrecedesTilde',
+ 'PrecedesSlantEqual', 'PrecisionGoal', 'Precision', 'PreDecrement',
+ 'PreemptProtect', 'PreferencesPath', 'Prefix', 'PreIncrement',
+ 'Prepend', 'PrependTo', '$PrePrint', '$PreRead', 'Prime', 'PrimeQ',
+ 'PreserveImageOptions', 'PriceGraphDistribution', 'PrimeNu', 'Xor',
+ 'PrimeOmega', 'PrimePi', 'PrimePowerQ', 'Primes', 'PrimeZetaP',
+ 'PrimitiveRoot', 'PrincipalComponents', 'PrincipalValue', 'Print',
+ 'PrintAction', 'PrintingCopies', 'PrintingOptions', 'PrivatePaths',
+ 'PrintingPageRange', 'PrintingStartingPageNumber', 'Probability',
+ 'PrintingStyleEnvironment', 'PrintPrecision', 'PrintTemporary',
+ 'PrivateEvaluationOptions', 'PrivateFontOptions', 'ProbitModelFit',
+ 'PrivateNotebookOptions', 'ProbabilityDistribution', '$ProcessID',
+ 'ProbabilityPlot', 'ProbabilityScalePlot', '$ProcessorCount',
+ '$ProcessorType', 'ProductDistribution', '$ProductInformation',
+ 'ProductLog', 'Product', 'ProgressIndicator', 'Projection', 'Read',
+ 'Prolog', 'Properties', 'PropertyList', 'Property', 'Proportional',
+ 'PropertyValue', 'Proportion', 'Protected', 'Protect', 'Pruning',
+ 'ProteinData', 'PseudoInverse', 'Purple', 'PutAppend', 'QBinomial',
+ 'QFactorial', 'QGamma', 'QHypergeometricPFQ', 'QPochhammer',
+ 'QPolyGamma', 'QRDecomposition', 'QuadraticIrrationalQ', 'Quiet',
+ 'Quantile', 'QuantilePlot', 'Quartics', 'QuartileDeviation',
+ 'QuartileSkewness', 'Quartiles', 'Quotient', 'QuotientRemainder',
+ 'RadicalBox', 'RadicalBoxOptions', 'RadioButtonBar', 'RadioButton',
+ 'Radon', 'RamanujanTauL', 'RamanujanTau', 'RamanujanTauTheta',
+ 'RamanujanTauZ', 'RandomChoice', 'RandomComplex', 'RandomGraph',
+ 'RandomImage', 'RandomInteger', 'Random', 'RandomPermutation',
+ 'RandomPrime', 'RandomReal', 'RandomSample', '$RandomState',
+ 'RandomVariate', 'RangeFilter', 'Range', 'RankedMax', 'RankedMin',
+ 'RasterArray', 'Rasterize', 'Raster', 'RasterSize', 'Rationalize',
+ 'Rational', 'Rationals', 'Ratios', 'RawBoxes', 'RawData', 'Real',
+ 'RayleighDistribution', 'ReadList', 'ReadProtected', 'RealDigits',
+ 'RealBlockDiagonalForm', 'RealExponent', 'Reals', 'Reap', 'Record',
+ 'RecordLists', 'RecordSeparators', 'RectangleChart3D', 'Rectangle',
+ 'RectangleChart', 'RecurrenceTable', '$RecursionLimit', 'Reduce',
+ 'ReferenceLineStyle', 'Refine', 'ReflectionMatrix', 'Refresh',
+ 'ReflectionTransform', 'RefreshRate', 'RegionBinarize', 'Release',
+ 'RegionFunction', 'RegionPlot3D', 'RegionPlot', 'Regularization',
+ 'RegularExpression', 'ReleaseHold', '$ReleaseNumber', 'ReliefPlot',
+ 'ReliefImage', 'RemoveAlphaChannel', 'Remove', 'RemoveProperty',
+ 'RemoveScheduledTask', 'RenameDirectory', 'RenameFile', 'Repeated',
+ 'RenderAll', 'RenkoChart', 'RepeatedNull', 'ReplaceAll', 'Replace',
+ 'ReplaceHeldPart', 'ReplaceList', 'ReplacePart', 'ReplaceRepeated',
+ 'Resampling', 'Rescale', 'RescalingTransform', 'ResetDirectory',
+ 'ResetMedium', 'ResetScheduledTask', 'Residue', 'Resolve', 'Rest',
+ 'Resultant', 'ResumePacket', 'ReturnExpressionPacket', 'Return',
+ 'ReturnPacket', 'ReturnTextPacket', 'ReverseElement', 'Reverse',
+ 'ReverseBiorthogonalSplineWavelet', 'ReverseEquilibrium', 'Riffle',
+ 'ReverseGraph', 'ReverseUpEquilibrium', 'RevolutionAxis', 'Right',
+ 'RevolutionPlot3D', 'RGBColor', 'RiccatiSolve', 'RiceDistribution',
+ 'RidgeFilter', 'RiemannR', 'RiemannSiegelTheta', 'RiemannSiegelZ',
+ 'RightArrowBar', 'RightArrowLeftArrow', 'RightArrow', 'Root',
+ 'RightCosetRepresentative', 'RightDownTeeVector', 'RightTeeArrow',
+ 'RightDownVectorBar', 'RightDownVector', 'RightTeeVector', 'Roots',
+ 'RightTriangleBar', 'RightTriangleEqual', 'RightTriangle', 'Round',
+ 'RightUpDownVector', 'RightUpTeeVector', 'RightUpVectorBar',
+ 'RightUpVector', 'RightVectorBar', 'RightVector', '$RootDirectory',
+ 'RogersTanimotoDissimilarity', 'RootApproximant', 'RootIntervals',
+ 'RootLocusPlot', 'RootMeanSquare', 'RootOfUnityQ', 'RootReduce',
+ 'RootSum', 'RotateLabel', 'RotateLeft', 'Rotate', 'RotateRight',
+ 'RotationAction', 'RotationMatrix', 'RotationTransform', 'RowBox',
+ 'RoundingRadius', 'RowAlignments', 'RowLines', 'RowMinHeight',
+ 'RowReduce', 'RowsEqual', 'RowSpacings', 'RSolve', 'RuleDelayed',
+ 'RudvalisGroupRu', 'Rule', 'RulerUnits', 'RunScheduledTask',
+ 'RunThrough', 'RuntimeAttributes', 'RuntimeOptions', 'SameQ',
+ 'RussellRaoDissimilarity', 'SameTest', 'SampleDepth', 'SampleRate',
+ 'SampledSoundFunction', 'SampledSoundList', 'SamplingPeriod',
+ 'SatisfiabilityCount', 'SatisfiabilityInstances', 'SatisfiableQ',
+ 'Saveable', 'SaveAutoDelete', 'SaveDefinitions', 'Save', 'Scaled',
+ 'SawtoothWave', 'Scale', 'ScalingFunctions', 'ScalingMatrix',
+ 'ScalingTransform', 'Scan', '$ScheduledTask', 'ScheduledTasks',
+ 'ScheduledTaskObject', 'SchurDecomposition', 'ScientificForm',
+ 'ScreenRectangle', 'ScreenStyleEnvironment', '$ScriptCommandLine',
+ 'ScriptBaselineShifts', 'ScriptLevel', 'ScriptMinSize', 'Sech',
+ 'ScriptSizeMultipliers', 'Scrollbars', 'ScrollingOptions', 'Share',
+ 'ScrollPosition', 'SechDistribution', 'SectorChart3D', 'Select',
+ 'SectorChart', 'SectorOrigin', 'SectorSpacing', 'SeedRandom',
+ 'Selectable', 'SelectComponents', 'SelectedNotebook', 'SendMail',
+ 'SelectionAnimate', 'SelectionCreateCell', 'SelectionEvaluate',
+ 'SelectionEvaluateCreateCell', 'SelectionMove', 'SelfLoopStyle',
+ 'SemialgebraicComponentInstances', 'SequenceAlignment', 'Sequence',
+ 'SequenceForm', 'SequenceHold', 'SeriesCoefficient', 'SeriesData',
+ 'Series', '$SessionID', 'SessionTime', 'SetAccuracy', 'SetDelayed',
+ 'SetAlphaChannel', 'SetAttributes', 'SetDirectory', 'SetFileDate',
+ 'SetOptions', 'SetPrecision', 'SetProperty', 'SetSelectedNotebook',
+ 'SetSharedFunction', 'SetSharedVariable', 'SetStreamPosition',
+ 'SetSystemOptions', 'SetterBar', 'Setter', 'Setting', 'Shading',
+ 'Shallow', 'ShannonWavelet', 'ShapiroWilkTest', '$SharedFunctions',
+ '$SharedVariables', 'Sharpen', 'ShearingMatrix', 'ShortDownArrow',
+ 'ShearingTransform', 'ShortestMatch', 'Shortest', 'ShortLeftArrow',
+ 'ShortestPathFunction', 'Short', 'ShortRightArrow', 'ShortUpArrow',
+ 'ShowAutoStyles', 'ShowCellBracket', 'ShowCellLabel', 'Show',
+ 'ShowCellTags', 'ShowClosedCellArea', 'ShowContents', 'Signature',
+ 'ShowCursorTracker', 'ShowGroupOpener', 'ShowPageBreaks', 'Sign',
+ 'ShowSelection', 'ShowShortBoxForm', 'ShowSpecialCharacters',
+ 'ShowStringCharacters', 'ShrinkingDelay', 'SiegelTheta', 'Sinc',
+ 'SiegelTukeyTest', 'SignedRankTest', 'SignificanceLevel', 'Sinh',
+ 'SignPadding', 'SignTest', 'SimilarityRules', 'SimpleGraph',
+ 'SimpleGraphQ', 'Simplify', 'SinghMaddalaDistribution', 'Skeleton',
+ 'SingleLetterItalics', 'SingularValueDecomposition', 'SinIntegral',
+ 'SingularValueList', 'SingularValuePlot', 'SingularValues', 'Skip',
+ 'SinhIntegral', 'SixJSymbol', 'SkeletonTransform', 'Skewness',
+ 'SkellamDistribution', 'SkewNormalDistribution', 'Slider2D',
+ 'Slider', 'SlideView', 'Slot', 'SlotSequence', 'SmallCircle',
+ 'Smaller', 'Small', 'SmithWatermanSimilarity', 'SmoothHistogram3D',
+ 'SmoothDensityHistogram', 'SmoothHistogram', 'SolveAlways', 'Sort',
+ 'SmoothKernelDistribution', 'SokalSneathDissimilarity', 'Solve',
+ 'SortBy', '$SoundDisplayFunction', 'Sound', 'SoundNote', 'Spacer',
+ 'SoundVolume', 'Spacings', 'SpanAdjustments', 'SpanFromAbove',
+ 'SpanCharacterRounding', 'SpanFromBoth', 'SpanFromLeft', 'Span',
+ 'SpanLineThickness', 'SpanMaxSize', 'SpanMinSize', 'SpanSymmetric',
+ 'SparseArray', 'Speak', 'Specularity', 'SpellingCorrection',
+ 'SpellingDictionaries', 'SpellingDictionariesPath', 'Sphere',
+ 'SpellingOptions', 'SphericalBesselJ', 'SphericalBesselY', 'Split',
+ 'SphericalHankelH1', 'SphericalHankelH2', 'SphericalHarmonicY',
+ 'SphericalPlot3D', 'SphericalRegion', 'SpheroidalEigenvalue',
+ 'SpheroidalJoiningFactor', 'SpheroidalPS', 'SpheroidalPSPrime',
+ 'SpheroidalQS', 'SpheroidalQSPrime', 'SpheroidalRadialFactor',
+ 'SpheroidalS1', 'SpheroidalS1Prime', 'SpheroidalS2', 'Splice',
+ 'SpheroidalS2Prime', 'SplineClosed', 'SplineDegree', 'SplineKnots',
+ 'SplineWeights', 'SplitBy', 'SpokenString', 'SqrtBox', 'Sqrt',
+ 'SquaredEuclideanDistance', 'SquareFreeQ', 'SquareIntersection',
+ 'Square', 'SquaresR', 'SquareSubsetEqual', 'SquareSubset', 'Stack',
+ 'SquareSupersetEqual', 'SquareSuperset', 'SquareUnion', 'Star',
+ 'SquareWave', 'StabilityMargins', 'StabilityMarginsStyle', 'Stub',
+ 'StableDistribution', 'StackBegin', 'StackComplete', 'Standardize',
+ 'StackInhibit', 'StandardDeviationFilter', 'StandardDeviation',
+ 'StandardForm', 'StarGraph', 'StartingStepSize', 'StartOfLine',
+ 'StartOfString', 'StartProcess', 'StartScheduledTask', 'Streams',
+ 'StartupSound', 'StateFeedbackGains', 'StateOutputEstimator',
+ 'StateResponse', 'StateSpaceModel', 'StateSpaceRealization',
+ 'StateSpaceTransform', 'StationaryWaveletPacketTransform', 'Style',
+ 'StationaryWaveletTransform', 'StatusArea', 'StepMonitor', 'Table',
+ 'StieltjesGamma', 'StirlingS1', 'StirlingS2', 'StopScheduledTask',
+ 'StreamColorFunction', 'StreamColorFunctionScaling', 'StreamPlot',
+ 'StreamDensityPlot', 'StreamPoints', 'StreamPosition', 'String',
+ 'StreamScale', 'StreamStyle', 'StringCases', 'StringCount', 'Take',
+ 'StringDrop', 'StringExpression', 'StringFormat', 'StringForm',
+ 'StringFreeQ', 'StringInsert', 'StringJoin', 'StringLength',
+ 'StringMatchQ', 'StringPosition', 'StringQ', 'StringReplaceList',
+ 'StringReplace', 'StringReplacePart', 'StringReverse', 'StruveH',
+ 'StringSkeleton', 'StringSplit', 'StringTake', 'StringToStream',
+ 'StringTrim', 'StructuredSelection', 'StruveL', 'StyleBox', 'Tanh',
+ 'StudentTDistribution', 'StyleBoxAutoDelete', 'StyleData', 'Tally',
+ 'StyleDefinitions', 'StyleForm', 'StyleMenuListing', 'StylePrint',
+ 'StyleNameDialogSettings', 'StyleSheetPath', 'Subfactorial',
+ 'Subgraph', 'SubMinus', 'SubPlus', 'Subresultants', 'SubscriptBox',
+ 'SubscriptBoxOptions', 'Subscripted', 'Subscript', 'SubsetEqual',
+ 'Subset', 'Subsets', 'SubStar', 'SubsuperscriptBox', 'Subtract',
+ 'SubsuperscriptBoxOptions', 'Subsuperscript', 'SubtractFrom',
+ 'SucceedsEqual', 'Succeeds', 'SucceedsSlantEqual', 'SucceedsTilde',
+ 'SuchThat', 'SumConvergence', 'SuperDagger', 'SuperMinus', 'Text',
+ 'SuperPlus', 'SuperscriptBox', 'SuperscriptBoxOptions', 'Superset',
+ 'Superscript', 'SupersetEqual', 'SuperStar', 'SurfaceColor',
+ 'SurfaceGraphics', 'SurvivalDistribution', 'SurvivalFunction',
+ 'SuspendPacket', 'SuzukiDistribution', 'SuzukiGroupSuz', 'Switch',
+ 'SymbolName', 'Symbol', 'SymletWavelet', 'SymmetricGroup', 'Thick',
+ 'SymmetricMatrixQ', 'SymmetricPolynomial', 'SymmetricReduction',
+ 'SynchronousInitialization', 'SynchronousUpdating', 'SyntaxForm',
+ '$SyntaxHandler', 'SyntaxInformation', 'SyntaxLength', 'SyntaxQ',
+ 'SyntaxPacket', '$SystemCharacterEncoding', 'SystemDialogInput',
+ 'SystemHelpPath', '$SystemID', 'SystemInformation', '$System',
+ 'SystemOpen', 'SystemOptions', 'SystemsModelDelete', 'TabFilling',
+ 'SystemsModelDimensions', 'SystemsModelExtract', 'TableAlignments',
+ 'SystemsModelFeedbackConnect', 'SystemsModelLabels', 'TableDepth',
+ 'SystemsModelOrder', 'SystemsModelParallelConnect', 'TableForm',
+ 'SystemsModelSeriesConnect', 'SystemsModelStateFeedbackConnect',
+ '$SystemWordLength', 'TableDirections', 'TableHeadings', 'TabView',
+ 'TableSpacing', 'TabSpacings', 'TagBox', 'TaggingRules', 'TagSet',
+ 'TagSetDelayed', 'TagUnset', 'TakeWhile', 'TargetFunctions',
+ 'TautologyQ', '$TemporaryDirectory', 'Temporary', 'TensorRank',
+ '$TemporaryPrefix', 'TeXForm', 'TeXSave', 'TextAlignment', 'Thin',
+ 'TextCell', 'TextClipboardType', 'TextData', 'TextJustification',
+ 'TextPacket', 'TextRecognize', '$TextStyle', 'TextStyle', 'Thread',
+ 'TextureCoordinateFunction', 'TextureCoordinateScaling', 'Texture',
+ 'Therefore', 'Thickness', 'Thinning', 'ThompsonGroupTh', 'Through',
+ 'ThreeJSymbol', 'Threshold', 'Throw', 'Thumbnail', 'Ticks', 'Tiny',
+ 'TicksStyle', 'TildeEqual', 'TildeFullEqual', 'Tilde', '$TimedOut',
+ 'TildeTilde', 'TimeConstrained', 'TimeConstraint', 'TimesBy',
+ 'Times', '$TimeUnit', 'TimeUsed', 'TimeValue', '$TimeZone', 'Trig',
+ 'TimeZone', 'Timing', 'TitsGroupT', 'ToASCII', 'ToBoxes', 'ToDate',
+ 'ToCharacterCode', 'ToContinuousTimeModel', 'ToDiscreteTimeModel',
+ 'ToeplitzMatrix', 'ToExpression', 'ToFileName', 'Together', 'True',
+ 'TogglerBar', 'Toggler', 'ToHeldExpression', 'TokenWords', 'Total',
+ 'Tolerance', 'ToLowerCase', 'ToNumberField', 'TooltipDelay',
+ 'Tooltip', '$TopDirectory', 'TopHatTransform', 'TopologicalSort',
+ 'ToRadicals', 'ToRules', 'ToString', 'TotalVariationFilter',
+ 'TotalWidth', 'ToUpperCase', 'TraceAbove', 'TraceBackward', 'Tube',
+ 'TraceDepth', 'TraceDialog', 'TraceForward', 'Trace', 'TraceOff',
+ 'TraceOn', 'TraceOriginal', 'TracePrint', 'TraceScan', 'Translate',
+ 'TrackedSymbols', 'TradingChart', 'TraditionalForm', 'Transparent',
+ 'TraditionalFunctionNotation', 'TransferFunctionCancel', 'Trigger',
+ 'TransferFunctionExpand', 'TransferFunctionFactor', 'Transpose',
+ 'TransferFunctionModel', 'TransferFunctionPoles', 'TreeForm',
+ 'TransferFunctionZeros', 'TransformationFunction', 'TreeGraph',
+ 'TransformationFunctions', 'TransformationMatrix', 'TreeGraphQ',
+ 'TransformedDistribution', 'TranslationTransform', 'TreePlot',
+ 'TrendStyle', 'TriangleWave', 'TriangularDistribution', 'TrueQ',
+ 'TrigExpand', 'TrigFactorList', 'TrigFactor', 'TrigReduce', 'With',
+ 'TrigToExp', 'TrimmedMean', 'TruncatedDistribution', 'TTest',
+ 'TukeyLambdaDistribution', 'Tuples', 'TuranGraph', 'TuringMachine',
+ 'Uncompress', 'Undefined', 'UnderBar', 'Underflow', 'Underlined',
+ 'UnderoverscriptBox', 'UnderoverscriptBoxOptions', 'Underscript',
+ 'Underoverscript', 'UnderscriptBox', 'UnderscriptBoxOptions',
+ 'UndirectedEdge', 'UndirectedGraph', 'UndirectedGraphQ', 'Unequal',
+ 'Unevaluated', 'UniformDistribution', 'UniformGraphDistribution',
+ 'UniformSumDistribution', 'Uninstall', 'Union', 'UnionPlus',
+ 'Unique', 'UnitBox', 'Unitize', 'UnitStep', 'UnitTriangle', 'Word',
+ 'UnitVector', 'Unprotect', 'UnsameQ', 'UnsavedVariables', 'Unset',
+ 'UnsetShared', 'UpArrowBar', 'UpArrowDownArrow', 'UpArrow', 'Xnor',
+ 'UpdateInterval', 'Update', 'UpDownArrow', 'UpEquilibrium', 'Zeta',
+ 'UpperCaseQ', 'UpperLeftArrow', 'UpperRightArrow', 'UpSetDelayed',
+ 'UpperTriangularize', 'UpSet', 'UpTeeArrow', 'UpValues', '$Urgent',
+ '$UserAddOnsDirectory', '$UserBaseDirectory', '$UserName', 'Wedge',
+ '$UserDocumentsDirectory', 'UsingFrontEnd', 'ValidationLength',
+ 'ValueQ', 'Variables', 'VarianceEquivalenceTest', 'Variance',
+ 'VarianceEstimatorFunction', 'VarianceTest', 'VectorAngle',
+ 'VectorColorFunction', 'VectorColorFunctionScaling', 'VectorPlot',
+ 'VectorDensityPlot', 'VectorPlot3D', 'VectorPoints', 'VectorQ',
+ 'VectorScale', 'VectorStyle', 'Verbatim', 'VerifyConvergence',
+ 'VerifyTestAssumptions', '$Version', '$VersionNumber', 'VertexAdd',
+ 'VertexColors', 'VertexComponent', 'VertexCoordinateRules',
+ 'VertexCoordinates', 'VertexCount', 'VertexCoverQ', 'VertexDegree',
+ 'VertexDelete', 'VertexEccentricity', 'VertexInComponent', 'Which',
+ 'VertexInDegree', 'VertexIndex', 'VertexLabeling', 'VertexLabels',
+ 'VertexLabelStyle', 'VertexList', 'VertexNormals', 'VertexQ',
+ 'VertexOutComponent', 'VertexOutDegree', 'VertexRenderingFunction',
+ 'VertexReplace', 'VertexShapeFunction', 'VertexShape', 'ViewAngle',
+ 'VertexSize', 'VertexStyle', 'VertexTextureCoordinates', 'Visible',
+ 'VertexWeight', 'VerticalBar', 'VerticalSeparator', 'ViewCenter',
+ 'VerticalSlider', 'VerticalTilde', 'ViewMatrix', 'ViewPoint',
+ 'ViewRange', 'ViewVector', 'ViewVertical', 'VonMisesDistribution',
+ 'WaitAll', 'WaitNext', 'WakebyDistribution', 'WatershedComponents',
+ 'WalleniusHypergeometricDistribution', 'WaringYuleDistribution',
+ 'WatsonUSquareTest', 'WattsStrogatzGraphDistribution', 'WeberE',
+ 'WaveletBestBasis', 'WaveletFilterCoefficients', 'WaveletListPlot',
+ 'WaveletImagePlot', 'WaveletMapIndexed', 'WaveletMatrixPlot',
+ 'WaveletPhi', 'WaveletPsi', 'WaveletScale', 'WaveletScalogram',
+ 'WaveletThreshold', 'WeatherData', 'WeibullDistribution', 'While',
+ 'WeierstrassHalfPeriods', 'WeierstrassInvariants', 'WeierstrassP',
+ 'WeierstrassPPrime', 'WeierstrassSigma', 'WeierstrassZeta',
+ 'WeightedAdjacencyGraph', 'WeightedAdjacencyMatrix', 'Weights',
+ 'WeightedGraphQ', 'WheelGraph', 'White', 'WhitespaceCharacter',
+ 'Whitespace', 'WhittakerM', 'WhittakerW', 'WienerFilter', 'Write',
+ 'WignerD', 'WignerSemicircleDistribution', 'WindowClickSelect',
+ 'WindowElements', 'WindowFloating', 'WindowFrameElements', 'ZTest',
+ 'WindowFrame', 'WindowMargins', 'WindowMovable', 'WindowOpacity',
+ 'WindowSize', 'WindowStatusArea', 'WindowTitle', 'WindowToolbars',
+ 'WolframAlpha', 'WordBoundary', 'WordCharacter', 'WordData',
+ 'WordSearch', 'WordSeparators', 'WorkingPrecision', 'WriteString',
+ 'Wronskian', 'XMLElement', 'XMLObject', 'Yellow', 'ZernikeR',
+ 'YuleDissimilarity', 'ZeroTest', 'ZeroWidthTimes', 'ZetaZero',
+ 'ZipfDistribution', 'ZTransform'
+ )
+ ),
+ /* Most symbol combinations can be valid Wolfram operators */
+ 'SYMBOLS' => array(
+ '!', '@', '#', '$', '%', '&', '*', '-', '+', '=',
+ '^', '~', '|', '\\', '>', '<', ':', '?', '/'
+ ),
+ 'CASE_SENSITIVE' => array(
+ GESHI_COMMENTS => false,
+ 1 => true /* Wolfram is a case sensitive language */
+ ),
+ 'STYLES' => array(
+ 'KEYWORDS' => array(
+ 1 => 'font-weight: bold;', /* make the system functions bold */
+ ),
+ 'COMMENTS' => array(
+ 'MULTI' => 'color: grey;',
+ 2 => 'color: grey;', /* nested comments are grey as well */
+ 3 => 'color: #000aa; font-weight: bold;' /* complex symbols */
+ ),
+ 'ESCAPE_CHAR' => array(
+ 0 => 'background-color: #3cb371; font-weight: bold;'
+ ),
+ 'BRACKETS' => array(
+ 0 => 'color: green; font-weight: bold;'
+ ),
+ 'STRINGS' => array(
+ 0 => 'color: grey; font-weight: bold;'
+ ),
+ 'NUMBERS' => array(
+ 0 => 'color: red;'
+ ),
+ 'METHODS' => array(
+ 1 => 'color: #060;'
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'SYMBOLS' => array(
+ 0 => 'color: #339933; font-weight: bold;'
+ ),
+ 'SCRIPT' => array(
+ )
+ ),
+ 'URLS' => array(
+ /* online documentation for system functions */
+ 1 => 'http://reference.wolfram.com/language/ref/{FNAME}.html'
+ ),
+ 'OOLANG' => false,
+ 'OBJECT_SPLITTERS' => array(
+ ),
+ 'REGEXPS' => array(
+ ),
+ 'STRICT_MODE_APPLIES' => GESHI_NEVER,
+ 'SCRIPT_DELIMITERS' => array(
+ ),
+ 'HIGHLIGHT_STRICT_BLOCK' => array(
+ )
+);
diff --git a/vendor/geshi/geshi/src/geshi/xbasic.php b/vendor/geshi/geshi/src/geshi/xbasic.php
index 45af71095..c78a7b917 100644
--- a/vendor/geshi/geshi/src/geshi/xbasic.php
+++ b/vendor/geshi/geshi/src/geshi/xbasic.php
@@ -4,7 +4,7 @@
* ----------
* Author: José Gabriel Moya Yangüela (josemoya@gmail.com)
* Copyright: (c) 2005 José Gabriel Moya Yangüela (http://aprenderadesaprender.6te.net)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2005/11/23
*
* XBasic language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/xml.php b/vendor/geshi/geshi/src/geshi/xml.php
index a6a145f11..6f127391e 100644
--- a/vendor/geshi/geshi/src/geshi/xml.php
+++ b/vendor/geshi/geshi/src/geshi/xml.php
@@ -4,7 +4,7 @@
* -------
* Author: Nigel McNie (nigel@geshi.org)
* Copyright: (c) 2004 Nigel McNie (http://qbnz.com/highlighter/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2004/09/01
*
* XML language file for GeSHi. Based on the idea/file by Christian Weiske
diff --git a/vendor/geshi/geshi/src/geshi/xojo.php b/vendor/geshi/geshi/src/geshi/xojo.php
index e067acf4a..abd252572 100644
--- a/vendor/geshi/geshi/src/geshi/xojo.php
+++ b/vendor/geshi/geshi/src/geshi/xojo.php
@@ -4,7 +4,7 @@
* --------
* Author: Dr Garry Pettet (contact@garrypettet.com)
* Copyright: (c) 2014 Dr Garry Pettet (http://garrypettet.com)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2014/10/19
*
* Xojo language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/xorg_conf.php b/vendor/geshi/geshi/src/geshi/xorg_conf.php
index 92b276bd9..b9280bb36 100644
--- a/vendor/geshi/geshi/src/geshi/xorg_conf.php
+++ b/vendor/geshi/geshi/src/geshi/xorg_conf.php
@@ -4,7 +4,7 @@
* ----------
* Author: Milian Wolff (mail@milianw.de)
* Copyright: (c) 2008 Milian Wolff (http://milianw.de)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2008/06/18
*
* xorg.conf language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/xpp.php b/vendor/geshi/geshi/src/geshi/xpp.php
index d249c487c..0e57f4d1e 100644
--- a/vendor/geshi/geshi/src/geshi/xpp.php
+++ b/vendor/geshi/geshi/src/geshi/xpp.php
@@ -4,7 +4,7 @@
* -------
* Author: Simon Butcher (simon@butcher.name)
* Copyright: (c) 2007 Simon Butcher (http://simon.butcher.name/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2007/02/27
*
* Axapta/Dynamics Ax X++ language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/yaml.php b/vendor/geshi/geshi/src/geshi/yaml.php
index 252779e9d..e42371761 100644
--- a/vendor/geshi/geshi/src/geshi/yaml.php
+++ b/vendor/geshi/geshi/src/geshi/yaml.php
@@ -4,7 +4,7 @@
* --------
* Author: Josh Ventura (JoshV10@gmail.com)
* Copyright: (c) 2010 Josh Ventura
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/12/14
*
* YAML language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/z80.php b/vendor/geshi/geshi/src/geshi/z80.php
index 5c8021f9e..d934933c9 100644
--- a/vendor/geshi/geshi/src/geshi/z80.php
+++ b/vendor/geshi/geshi/src/geshi/z80.php
@@ -4,7 +4,7 @@
* -------
* Author: Benny Baumann (BenBE@omorphia.de)
* Copyright: (c) 2007-2008 Benny Baumann (http://www.omorphia.de/)
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2007/02/06
*
* ZiLOG Z80 Assembler language file for GeSHi.
diff --git a/vendor/geshi/geshi/src/geshi/zxbasic.php b/vendor/geshi/geshi/src/geshi/zxbasic.php
index d09719490..ec90e796f 100644
--- a/vendor/geshi/geshi/src/geshi/zxbasic.php
+++ b/vendor/geshi/geshi/src/geshi/zxbasic.php
@@ -4,7 +4,7 @@
* -------------
* Author: Jose Rodriguez (a.k.a. Boriel)
* Based on Copyright: (c) 2005 Roberto Rossi (http://rsoftware.altervista.org) Freebasic template
- * Release Version: 1.0.9.0
+ * Release Version: 1.0.9.1
* Date Started: 2010/06/19
*
* ZXBasic language file for GeSHi.
diff --git a/vendor/marcusschwarz/lesserphp/lessc.inc.php b/vendor/marcusschwarz/lesserphp/lessc.inc.php
index b9e80ccc8..79120ebaf 100644
--- a/vendor/marcusschwarz/lesserphp/lessc.inc.php
+++ b/vendor/marcusschwarz/lesserphp/lessc.inc.php
@@ -1,7 +1,7 @@
<?php
/**
- * lessphp v0.5.1
+ * lessphp v0.5.2
* http://leafo.net/lessphp
*
* LESS CSS compiler, adapted from http://lesscss.org
@@ -39,7 +39,7 @@
* handling things like indentation.
*/
class lessc {
- static public $VERSION = "v0.5.1";
+ static public $VERSION = "v0.5.2";
static public $TRUE = array("keyword", "true");
static public $FALSE = array("keyword", "false");
@@ -352,9 +352,9 @@ class lessc {
$other = array_merge($other, $stack);
if ($split) {
- return array(array_merge($imports, $vars), $other);
+ return array(array_merge($vars, $imports, $vars), $other);
} else {
- return array_merge($imports, $vars, $other);
+ return array_merge($vars, $imports, $vars, $other);
}
}
diff --git a/vendor/openpsa/universalfeedcreator/composer.json b/vendor/openpsa/universalfeedcreator/composer.json
index caabfcedc..57b1b0c75 100644
--- a/vendor/openpsa/universalfeedcreator/composer.json
+++ b/vendor/openpsa/universalfeedcreator/composer.json
@@ -3,7 +3,7 @@
"type": "library",
"description": "RSS and Atom feed generator by Kai Blankenhorn",
"keywords": ["rss", "atom", "pie", "opml", "gpx", "georss"],
- "license": "LGPL",
+ "license": "LGPL-2.1-or-later",
"authors": [
{
"name": "Andreas Flack",
@@ -15,7 +15,8 @@
"php": ">=5.0"
},
"autoload": {
- "classmap": ["lib"]
+ "classmap": ["lib"],
+ "files": ["lib/constants.php"]
},
"require-dev": {
"phpunit/phpunit": "*"
diff --git a/vendor/openpsa/universalfeedcreator/lib/Creator/AtomCreator03.php b/vendor/openpsa/universalfeedcreator/lib/Creator/AtomCreator03.php
index 5f80a7562..2ec95a402 100644
--- a/vendor/openpsa/universalfeedcreator/lib/Creator/AtomCreator03.php
+++ b/vendor/openpsa/universalfeedcreator/lib/Creator/AtomCreator03.php
@@ -14,7 +14,6 @@
* @see FeedCreator#additionalElements
* @since 1.6
* @author Kai Blankenhorn <kaib@bitfolge.de>, Scott Reynen <scott@randomchaos.com>
- * @package de.bitfolge.feedcreator
*/
class AtomCreator03 extends FeedCreator
{
diff --git a/vendor/openpsa/universalfeedcreator/lib/Creator/AtomCreator10.php b/vendor/openpsa/universalfeedcreator/lib/Creator/AtomCreator10.php
index db7314ed5..2f4532262 100644
--- a/vendor/openpsa/universalfeedcreator/lib/Creator/AtomCreator10.php
+++ b/vendor/openpsa/universalfeedcreator/lib/Creator/AtomCreator10.php
@@ -14,7 +14,6 @@
* @see FeedCreator#additionalElements
* @since 1.7.2-mod (modified)
* @author Mohammad Hafiz Ismail (mypapit@gmail.com)
- * @package de.bitfolge.feedcreator
*/
class AtomCreator10 extends FeedCreator
{
@@ -103,14 +102,16 @@ class AtomCreator10 extends FeedCreator
$feed .= " </author>\n";
}
- if ($this->items[$i]->category != "") {
- $feed .= " <category ";
+ if (!empty($this->items[$i]->category)) {
+ foreach ((array) $this->items[$i]->category as $category) {
+ $feed .= " <category ";
- if ($this->items[$i]->categoryScheme != "") {
- $feed .= " scheme=\"".htmlspecialchars($this->items[$i]->categoryScheme)."\" ";
- }
+ if ($this->items[$i]->categoryScheme != "") {
+ $feed .= " scheme=\"".htmlspecialchars($this->items[$i]->categoryScheme)."\" ";
+ }
- $feed .= " term=\"".htmlspecialchars($this->items[$i]->category)."\" />\n";
+ $feed .= " term=\"".htmlspecialchars($category)."\" />\n";
+ }
}
if ($this->items[$i]->description != "") {
diff --git a/vendor/openpsa/universalfeedcreator/lib/Creator/FeedCreator.php b/vendor/openpsa/universalfeedcreator/lib/Creator/FeedCreator.php
index d5e99cd46..907ca8377 100644
--- a/vendor/openpsa/universalfeedcreator/lib/Creator/FeedCreator.php
+++ b/vendor/openpsa/universalfeedcreator/lib/Creator/FeedCreator.php
@@ -6,7 +6,6 @@
*
* @author Kai Blankenhorn <kaib@bitfolge.de>
* @since 1.4
- * @package de.bitfolge.feedcreator
*/
abstract class FeedCreator extends HtmlDescribable
{
diff --git a/vendor/openpsa/universalfeedcreator/lib/Creator/GPXCreator.php b/vendor/openpsa/universalfeedcreator/lib/Creator/GPXCreator.php
index e8df3081e..367fb46b4 100644
--- a/vendor/openpsa/universalfeedcreator/lib/Creator/GPXCreator.php
+++ b/vendor/openpsa/universalfeedcreator/lib/Creator/GPXCreator.php
@@ -5,7 +5,6 @@
*
* @since 1.7.6
* @author Barry Hunter <geo@barryhunter.co.uk>
- * @package de.bitfolge.feedcreator
*/
class GPXCreator extends FeedCreator
{
diff --git a/vendor/openpsa/universalfeedcreator/lib/Creator/HTMLCreator.php b/vendor/openpsa/universalfeedcreator/lib/Creator/HTMLCreator.php
index 9b6f8b5ca..e02a8d767 100644
--- a/vendor/openpsa/universalfeedcreator/lib/Creator/HTMLCreator.php
+++ b/vendor/openpsa/universalfeedcreator/lib/Creator/HTMLCreator.php
@@ -10,7 +10,6 @@
*
* @author Pascal Van Hecke
* @since 1.7
- * @package de.bitfolge.feedcreator
*/
class HTMLCreator extends FeedCreator
{
diff --git a/vendor/openpsa/universalfeedcreator/lib/Creator/JSCreator.php b/vendor/openpsa/universalfeedcreator/lib/Creator/JSCreator.php
index 5b75ea7b5..5aa31faa0 100644
--- a/vendor/openpsa/universalfeedcreator/lib/Creator/JSCreator.php
+++ b/vendor/openpsa/universalfeedcreator/lib/Creator/JSCreator.php
@@ -5,7 +5,6 @@
* location, overriding the createFeed method of the parent HTMLCreator.
*
* @author Pascal Van Hecke
- * @package de.bitfolge.feedcreator
*/
class JSCreator extends HTMLCreator
{
diff --git a/vendor/openpsa/universalfeedcreator/lib/Creator/KMLCreator.php b/vendor/openpsa/universalfeedcreator/lib/Creator/KMLCreator.php
index acb0abc0f..31073d8bf 100644
--- a/vendor/openpsa/universalfeedcreator/lib/Creator/KMLCreator.php
+++ b/vendor/openpsa/universalfeedcreator/lib/Creator/KMLCreator.php
@@ -5,7 +5,6 @@
*
* @since 1.7.3
* @author Barry Hunter <geo@barryhunter.co.uk>
- * @package de.bitfolge.feedcreator
*/
class KMLCreator extends FeedCreator
{
diff --git a/vendor/openpsa/universalfeedcreator/lib/Creator/MBOXCreator.php b/vendor/openpsa/universalfeedcreator/lib/Creator/MBOXCreator.php
index d7f898dc3..9198f1ff6 100644
--- a/vendor/openpsa/universalfeedcreator/lib/Creator/MBOXCreator.php
+++ b/vendor/openpsa/universalfeedcreator/lib/Creator/MBOXCreator.php
@@ -6,7 +6,6 @@
*
* @since 1.3
* @author Kai Blankenhorn <kaib@bitfolge.de>
- * @package de.bitfolge.feedcreator
*/
class MBOXCreator extends FeedCreator
{
diff --git a/vendor/openpsa/universalfeedcreator/lib/Creator/OPMLCreator.php b/vendor/openpsa/universalfeedcreator/lib/Creator/OPMLCreator.php
index 6dcdc82b9..b795558d6 100644
--- a/vendor/openpsa/universalfeedcreator/lib/Creator/OPMLCreator.php
+++ b/vendor/openpsa/universalfeedcreator/lib/Creator/OPMLCreator.php
@@ -6,7 +6,6 @@
* @see http://opml.scripting.com/spec
* @author Dirk Clemens, Kai Blankenhorn
* @since 1.5
- * @package de.bitfolge.feedcreator
*/
class OPMLCreator extends FeedCreator
{
diff --git a/vendor/openpsa/universalfeedcreator/lib/Creator/PHPCreator.php b/vendor/openpsa/universalfeedcreator/lib/Creator/PHPCreator.php
index 23b83529a..fe61a3f6f 100644
--- a/vendor/openpsa/universalfeedcreator/lib/Creator/PHPCreator.php
+++ b/vendor/openpsa/universalfeedcreator/lib/Creator/PHPCreator.php
@@ -5,7 +5,6 @@
*
* @since 1.7.3
* @author Barry Hunter <geo@barryhunter.co.uk>
- * @package de.bitfolge.feedcreator
*/
class PHPCreator extends FeedCreator
{
diff --git a/vendor/openpsa/universalfeedcreator/lib/Creator/PIECreator01.php b/vendor/openpsa/universalfeedcreator/lib/Creator/PIECreator01.php
index 5700123c2..2f069aac4 100644
--- a/vendor/openpsa/universalfeedcreator/lib/Creator/PIECreator01.php
+++ b/vendor/openpsa/universalfeedcreator/lib/Creator/PIECreator01.php
@@ -7,7 +7,6 @@
* @deprecated
* @since 1.3
* @author Scott Reynen <scott@randomchaos.com> and Kai Blankenhorn <kaib@bitfolge.de>
- * @package de.bitfolge.feedcreator
*/
class PIECreator01 extends FeedCreator
{
diff --git a/vendor/openpsa/universalfeedcreator/lib/Creator/RSSCreator091.php b/vendor/openpsa/universalfeedcreator/lib/Creator/RSSCreator091.php
index cd229e954..7b13acd83 100644
--- a/vendor/openpsa/universalfeedcreator/lib/Creator/RSSCreator091.php
+++ b/vendor/openpsa/universalfeedcreator/lib/Creator/RSSCreator091.php
@@ -6,7 +6,6 @@
* @see http://my.netscape.com/publish/formats/rss-spec-0.91.html
* @since 1.3
* @author Kai Blankenhorn <kaib@bitfolge.de>
- * @package de.bitfolge.feedcreator
*/
class RSSCreator091 extends FeedCreator
{
diff --git a/vendor/openpsa/universalfeedcreator/lib/Creator/RSSCreator10.php b/vendor/openpsa/universalfeedcreator/lib/Creator/RSSCreator10.php
index d9ed1d01d..8d0c1ca8c 100644
--- a/vendor/openpsa/universalfeedcreator/lib/Creator/RSSCreator10.php
+++ b/vendor/openpsa/universalfeedcreator/lib/Creator/RSSCreator10.php
@@ -6,7 +6,6 @@
* @see http://www.purl.org/rss/1.0/
* @since 1.3
* @author Kai Blankenhorn <kaib@bitfolge.de>
- * @package de.bitfolge.feedcreator
*/
class RSSCreator10 extends FeedCreator
{
diff --git a/vendor/openpsa/universalfeedcreator/lib/Creator/RSSCreator20.php b/vendor/openpsa/universalfeedcreator/lib/Creator/RSSCreator20.php
index dbc25ab76..fb39efe61 100644
--- a/vendor/openpsa/universalfeedcreator/lib/Creator/RSSCreator20.php
+++ b/vendor/openpsa/universalfeedcreator/lib/Creator/RSSCreator20.php
@@ -6,7 +6,6 @@
* @see http://backend.userland.com/rss
* @since 1.3
* @author Kai Blankenhorn <kaib@bitfolge.de>
- * @package de.bitfolge.feedcreator
*/
class RSSCreator20 extends RSSCreator091
{
diff --git a/vendor/openpsa/universalfeedcreator/lib/Element/FeedDate.php b/vendor/openpsa/universalfeedcreator/lib/Element/FeedDate.php
index 690c65ad6..249f96c89 100644
--- a/vendor/openpsa/universalfeedcreator/lib/Element/FeedDate.php
+++ b/vendor/openpsa/universalfeedcreator/lib/Element/FeedDate.php
@@ -3,8 +3,6 @@
/**
* FeedDate is an internal class that stores a date for a feed or feed item.
* Usually, you won't need to use this.
- *
- * @package de.bitfolge.feedcreator
*/
class FeedDate
{
@@ -109,11 +107,7 @@ class FeedDate
*/
public function iso8601()
{
- $date = gmdate("Y-m-d\TH:i:sO", $this->unix);
- $date = substr($date, 0, 22).':'.substr($date, -2);
- if (TIME_ZONE != "") {
- $date = str_replace("+00:00", TIME_ZONE, $date);
- }
+ $date = gmdate("Y-m-d\TH:i:sP", $this->unix);
return $date;
}
diff --git a/vendor/openpsa/universalfeedcreator/lib/Element/FeedHtmlField.php b/vendor/openpsa/universalfeedcreator/lib/Element/FeedHtmlField.php
index 8979e958f..84f0ac4bb 100644
--- a/vendor/openpsa/universalfeedcreator/lib/Element/FeedHtmlField.php
+++ b/vendor/openpsa/universalfeedcreator/lib/Element/FeedHtmlField.php
@@ -7,7 +7,6 @@
*
* @author Pascal Van Hecke <feedcreator.class.php@vanhecke.info>
* @version 1.6
- * @package de.bitfolge.feedcreator
*/
class FeedHtmlField
{
diff --git a/vendor/openpsa/universalfeedcreator/lib/Element/FeedImage.php b/vendor/openpsa/universalfeedcreator/lib/Element/FeedImage.php
index d525379fa..cc9df46aa 100644
--- a/vendor/openpsa/universalfeedcreator/lib/Element/FeedImage.php
+++ b/vendor/openpsa/universalfeedcreator/lib/Element/FeedImage.php
@@ -5,7 +5,6 @@
*
* @author Kai Blankenhorn <kaib@bitfolge.de>
* @since 1.3
- * @package de.bitfolge.feedcreator
*/
class FeedImage extends HtmlDescribable
{
diff --git a/vendor/openpsa/universalfeedcreator/lib/Element/FeedItem.php b/vendor/openpsa/universalfeedcreator/lib/Element/FeedItem.php
index 827768515..3b51cc2ab 100644
--- a/vendor/openpsa/universalfeedcreator/lib/Element/FeedItem.php
+++ b/vendor/openpsa/universalfeedcreator/lib/Element/FeedItem.php
@@ -5,7 +5,6 @@
*
* @author Kai Blankenhorn <kaib@bitfolge.de>
* @since 1.3
- * @package de.bitfolge.feedcreator
*/
class FeedItem extends HtmlDescribable
{
diff --git a/vendor/openpsa/universalfeedcreator/lib/Element/HtmlDescribable.php b/vendor/openpsa/universalfeedcreator/lib/Element/HtmlDescribable.php
index 0fce11f76..e34e2b1df 100644
--- a/vendor/openpsa/universalfeedcreator/lib/Element/HtmlDescribable.php
+++ b/vendor/openpsa/universalfeedcreator/lib/Element/HtmlDescribable.php
@@ -3,8 +3,6 @@
/**
* An HtmlDescribable is an item within a feed that can have a description that may
* include HTML markup.
- *
- * @package de.bitfolge.feedcreator
*/
class HtmlDescribable
{
diff --git a/vendor/openpsa/universalfeedcreator/lib/UniversalFeedCreator.php b/vendor/openpsa/universalfeedcreator/lib/UniversalFeedCreator.php
index 7804e73ee..4b7afe6f2 100644
--- a/vendor/openpsa/universalfeedcreator/lib/UniversalFeedCreator.php
+++ b/vendor/openpsa/universalfeedcreator/lib/UniversalFeedCreator.php
@@ -1,14 +1,4 @@
<?php
-// your local timezone, set to "" to disable or for GMT
-if (!defined('TIME_ZONE')) {
- define("TIME_ZONE", date("O", time()));
-}
-
-/**
- * Version string.
- */
-define("FEEDCREATOR_VERSION", "FeedCreator 1.8");
-
/**
* UniversalFeedCreator lets you choose during runtime which
* format to build.
@@ -17,7 +7,6 @@ define("FEEDCREATOR_VERSION", "FeedCreator 1.8");
*
* @since 1.3
* @author Kai Blankenhorn <kaib@bitfolge.de>
- * @package de.bitfolge.feedcreator
*/
class UniversalFeedCreator extends FeedCreator
{
diff --git a/vendor/openpsa/universalfeedcreator/lib/constants.php b/vendor/openpsa/universalfeedcreator/lib/constants.php
new file mode 100644
index 000000000..146c1897f
--- /dev/null
+++ b/vendor/openpsa/universalfeedcreator/lib/constants.php
@@ -0,0 +1,10 @@
+<?php
+// your local timezone, set to "" to disable or for GMT
+if (!defined('TIME_ZONE')) {
+ define("TIME_ZONE", date("O", time()));
+}
+
+/**
+ * Version string.
+ */
+define("FEEDCREATOR_VERSION", "FeedCreator 1.8");
diff --git a/vendor/paragonie/random_compat/composer.json b/vendor/paragonie/random_compat/composer.json
index 1c5978c6f..34f1381d5 100644
--- a/vendor/paragonie/random_compat/composer.json
+++ b/vendor/paragonie/random_compat/composer.json
@@ -4,6 +4,7 @@
"keywords": [
"csprng",
"random",
+ "polyfill",
"pseudorandom"
],
"license": "MIT",
diff --git a/vendor/paragonie/random_compat/lib/byte_safe_strings.php b/vendor/paragonie/random_compat/lib/byte_safe_strings.php
index 3de86b223..ef24488f9 100644
--- a/vendor/paragonie/random_compat/lib/byte_safe_strings.php
+++ b/vendor/paragonie/random_compat/lib/byte_safe_strings.php
@@ -5,7 +5,7 @@
*
* The MIT License (MIT)
*
- * Copyright (c) 2015 - 2017 Paragon Initiative Enterprises
+ * Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -28,8 +28,9 @@
if (!is_callable('RandomCompat_strlen')) {
if (
- defined('MB_OVERLOAD_STRING') &&
- ini_get('mbstring.func_overload') & MB_OVERLOAD_STRING
+ defined('MB_OVERLOAD_STRING')
+ &&
+ ((int) ini_get('mbstring.func_overload')) & MB_OVERLOAD_STRING
) {
/**
* strlen() implementation that isn't brittle to mbstring.func_overload
@@ -82,8 +83,8 @@ if (!is_callable('RandomCompat_substr')) {
if (
defined('MB_OVERLOAD_STRING')
- &&
- ini_get('mbstring.func_overload') & MB_OVERLOAD_STRING
+ &&
+ ((int) ini_get('mbstring.func_overload')) & MB_OVERLOAD_STRING
) {
/**
* substr() implementation that isn't brittle to mbstring.func_overload
@@ -93,7 +94,7 @@ if (!is_callable('RandomCompat_substr')) {
*
* @param string $binary_string
* @param int $start
- * @param int $length (optional)
+ * @param int|null $length (optional)
*
* @throws TypeError
*
@@ -118,6 +119,7 @@ if (!is_callable('RandomCompat_substr')) {
* mb_substr($str, 0, NULL, '8bit') returns an empty string on
* PHP 5.3, so we have to find the length ourselves.
*/
+ /** @var int $length */
$length = RandomCompat_strlen($binary_string) - $start;
} elseif (!is_int($length)) {
throw new TypeError(
@@ -133,7 +135,12 @@ if (!is_callable('RandomCompat_substr')) {
return '';
}
- return (string) mb_substr($binary_string, $start, $length, '8bit');
+ return (string) mb_substr(
+ (string) $binary_string,
+ (int) $start,
+ (int) $length,
+ '8bit'
+ );
}
} else {
@@ -145,7 +152,7 @@ if (!is_callable('RandomCompat_substr')) {
*
* @param string $binary_string
* @param int $start
- * @param int $length (optional)
+ * @param int|null $length (optional)
*
* @throws TypeError
*
@@ -172,10 +179,17 @@ if (!is_callable('RandomCompat_substr')) {
);
}
- return (string) substr($binary_string, $start, $length);
+ return (string) substr(
+ (string )$binary_string,
+ (int) $start,
+ (int) $length
+ );
}
- return (string) substr($binary_string, $start);
+ return (string) substr(
+ (string) $binary_string,
+ (int) $start
+ );
}
}
}
diff --git a/vendor/paragonie/random_compat/lib/cast_to_int.php b/vendor/paragonie/random_compat/lib/cast_to_int.php
index 9a4fab991..1b1bbfe8d 100644
--- a/vendor/paragonie/random_compat/lib/cast_to_int.php
+++ b/vendor/paragonie/random_compat/lib/cast_to_int.php
@@ -5,7 +5,7 @@
*
* The MIT License (MIT)
*
- * Copyright (c) 2015 - 2017 Paragon Initiative Enterprises
+ * Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -27,19 +27,19 @@
*/
if (!is_callable('RandomCompat_intval')) {
-
+
/**
* Cast to an integer if we can, safely.
- *
+ *
* If you pass it a float in the range (~PHP_INT_MAX, PHP_INT_MAX)
* (non-inclusive), it will sanely cast it to an int. If you it's equal to
* ~PHP_INT_MAX or PHP_INT_MAX, we let it fail as not an integer. Floats
* lose precision, so the <= and => operators might accidentally let a float
* through.
- *
+ *
* @param int|float $number The number we want to convert to an int
* @param bool $fail_open Set to true to not throw an exception
- *
+ *
* @return float|int
* @psalm-suppress InvalidReturnType
*
@@ -50,14 +50,16 @@ if (!is_callable('RandomCompat_intval')) {
if (is_int($number) || is_float($number)) {
$number += 0;
} elseif (is_numeric($number)) {
+ /** @psalm-suppress InvalidOperand */
$number += 0;
}
+ /** @var int|float $number */
if (
is_float($number)
- &&
+ &&
$number > ~PHP_INT_MAX
- &&
+ &&
$number < PHP_INT_MAX
) {
$number = (int) $number;
diff --git a/vendor/paragonie/random_compat/lib/error_polyfill.php b/vendor/paragonie/random_compat/lib/error_polyfill.php
index 6a91990ce..c02c5c8b4 100644
--- a/vendor/paragonie/random_compat/lib/error_polyfill.php
+++ b/vendor/paragonie/random_compat/lib/error_polyfill.php
@@ -1,12 +1,12 @@
<?php
/**
- * Random_* Compatibility Library
+ * Random_* Compatibility Library
* for using the new PHP 7 random_* API in PHP 5 projects
- *
+ *
* The MIT License (MIT)
*
- * Copyright (c) 2015 - 2017 Paragon Initiative Enterprises
- *
+ * Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
@@ -30,7 +30,7 @@ if (!class_exists('Error', false)) {
// We can't really avoid making this extend Exception in PHP 5.
class Error extends Exception
{
-
+
}
}
@@ -38,12 +38,12 @@ if (!class_exists('TypeError', false)) {
if (is_subclass_of('Error', 'Exception')) {
class TypeError extends Error
{
-
+
}
} else {
class TypeError extends Exception
{
-
+
}
}
}
diff --git a/vendor/paragonie/random_compat/lib/random.php b/vendor/paragonie/random_compat/lib/random.php
index 080b87c19..36245f542 100644
--- a/vendor/paragonie/random_compat/lib/random.php
+++ b/vendor/paragonie/random_compat/lib/random.php
@@ -3,12 +3,12 @@
* Random_* Compatibility Library
* for using the new PHP 7 random_* API in PHP 5 projects
*
- * @version 2.0.10
- * @released 2017-03-13
+ * @version 2.0.17
+ * @released 2018-07-04
*
* The MIT License (MIT)
*
- * Copyright (c) 2015 - 2017 Paragon Initiative Enterprises
+ * Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -54,9 +54,9 @@ if (!defined('RANDOM_COMPAT_READ_BUFFER')) {
$RandomCompatDIR = dirname(__FILE__);
-require_once $RandomCompatDIR . '/byte_safe_strings.php';
-require_once $RandomCompatDIR . '/cast_to_int.php';
-require_once $RandomCompatDIR . '/error_polyfill.php';
+require_once $RandomCompatDIR . DIRECTORY_SEPARATOR . 'byte_safe_strings.php';
+require_once $RandomCompatDIR . DIRECTORY_SEPARATOR . 'cast_to_int.php';
+require_once $RandomCompatDIR . DIRECTORY_SEPARATOR . 'error_polyfill.php';
if (!is_callable('random_bytes')) {
/**
@@ -76,9 +76,9 @@ if (!is_callable('random_bytes')) {
if (extension_loaded('libsodium')) {
// See random_bytes_libsodium.php
if (PHP_VERSION_ID >= 50300 && is_callable('\\Sodium\\randombytes_buf')) {
- require_once $RandomCompatDIR . '/random_bytes_libsodium.php';
+ require_once $RandomCompatDIR . DIRECTORY_SEPARATOR . 'random_bytes_libsodium.php';
} elseif (method_exists('Sodium', 'randombytes_buf')) {
- require_once $RandomCompatDIR . '/random_bytes_libsodium_legacy.php';
+ require_once $RandomCompatDIR . DIRECTORY_SEPARATOR . 'random_bytes_libsodium_legacy.php';
}
}
@@ -117,7 +117,7 @@ if (!is_callable('random_bytes')) {
// place, that is not helpful to us here.
// See random_bytes_dev_urandom.php
- require_once $RandomCompatDIR . '/random_bytes_dev_urandom.php';
+ require_once $RandomCompatDIR . DIRECTORY_SEPARATOR . 'random_bytes_dev_urandom.php';
}
// Unset variables after use
$RandomCompat_basedir = null;
@@ -159,7 +159,7 @@ if (!is_callable('random_bytes')) {
extension_loaded('mcrypt')
) {
// See random_bytes_mcrypt.php
- require_once $RandomCompatDIR . '/random_bytes_mcrypt.php';
+ require_once $RandomCompatDIR . DIRECTORY_SEPARATOR . 'random_bytes_mcrypt.php';
}
$RandomCompatUrandom = null;
@@ -184,7 +184,7 @@ if (!is_callable('random_bytes')) {
$RandomCompatCOMtest = new COM('CAPICOM.Utilities.1');
if (method_exists($RandomCompatCOMtest, 'GetRandom')) {
// See random_bytes_com_dotnet.php
- require_once $RandomCompatDIR . '/random_bytes_com_dotnet.php';
+ require_once $RandomCompatDIR . DIRECTORY_SEPARATOR . 'random_bytes_com_dotnet.php';
}
} catch (com_exception $e) {
// Don't try to use it.
@@ -203,7 +203,7 @@ if (!is_callable('random_bytes')) {
* and hope the developer won't let it fail silently.
*
* @param mixed $length
- * @psalm-suppress MissingReturnType
+ * @psalm-suppress InvalidReturnType
* @throws Exception
* @return string
*/
@@ -219,7 +219,7 @@ if (!is_callable('random_bytes')) {
}
if (!is_callable('random_int')) {
- require_once $RandomCompatDIR . '/random_int.php';
+ require_once $RandomCompatDIR . DIRECTORY_SEPARATOR . 'random_int.php';
}
$RandomCompatDIR = null;
diff --git a/vendor/paragonie/random_compat/lib/random_bytes_com_dotnet.php b/vendor/paragonie/random_compat/lib/random_bytes_com_dotnet.php
index fc1926e5c..537d02b27 100644
--- a/vendor/paragonie/random_compat/lib/random_bytes_com_dotnet.php
+++ b/vendor/paragonie/random_compat/lib/random_bytes_com_dotnet.php
@@ -1,22 +1,22 @@
<?php
/**
- * Random_* Compatibility Library
+ * Random_* Compatibility Library
* for using the new PHP 7 random_* API in PHP 5 projects
- *
+ *
* The MIT License (MIT)
- *
- * Copyright (c) 2015 - 2017 Paragon Initiative Enterprises
- *
+ *
+ * Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
+ *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -41,6 +41,7 @@ if (!is_callable('random_bytes')) {
function random_bytes($bytes)
{
try {
+ /** @var int $bytes */
$bytes = RandomCompat_intval($bytes);
} catch (TypeError $ex) {
throw new TypeError(
@@ -54,12 +55,14 @@ if (!is_callable('random_bytes')) {
);
}
+ /** @var string $buf */
$buf = '';
if (!class_exists('COM')) {
throw new Error(
'COM does not exist'
);
}
+ /** @var COM $util */
$util = new COM('CAPICOM.Utilities.1');
$execCount = 0;
@@ -68,12 +71,12 @@ if (!is_callable('random_bytes')) {
* get N bytes of random data, then CAPICOM has failed us.
*/
do {
- $buf .= base64_decode($util->GetRandom($bytes, 0));
+ $buf .= base64_decode((string) $util->GetRandom($bytes, 0));
if (RandomCompat_strlen($buf) >= $bytes) {
/**
* Return our random entropy buffer here:
*/
- return RandomCompat_substr($buf, 0, $bytes);
+ return (string) RandomCompat_substr($buf, 0, $bytes);
}
++$execCount;
} while ($execCount < $bytes);
@@ -85,4 +88,4 @@ if (!is_callable('random_bytes')) {
'Could not gather sufficient random data'
);
}
-} \ No newline at end of file
+}
diff --git a/vendor/paragonie/random_compat/lib/random_bytes_dev_urandom.php b/vendor/paragonie/random_compat/lib/random_bytes_dev_urandom.php
index df5b91524..c4e31ccbb 100644
--- a/vendor/paragonie/random_compat/lib/random_bytes_dev_urandom.php
+++ b/vendor/paragonie/random_compat/lib/random_bytes_dev_urandom.php
@@ -1,22 +1,22 @@
<?php
/**
- * Random_* Compatibility Library
+ * Random_* Compatibility Library
* for using the new PHP 7 random_* API in PHP 5 projects
- *
+ *
* The MIT License (MIT)
*
- * Copyright (c) 2015 - 2017 Paragon Initiative Enterprises
- *
+ * Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
+ *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -36,6 +36,7 @@ if (!is_callable('random_bytes')) {
* random numbers in accordance with best practices
*
* Why we use /dev/urandom and not /dev/random
+ * @ref https://www.2uo.de/myths-about-urandom
* @ref http://sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers
*
* @param int $bytes
@@ -46,25 +47,47 @@ if (!is_callable('random_bytes')) {
*/
function random_bytes($bytes)
{
+ /** @var resource $fp */
static $fp = null;
+
/**
* This block should only be run once
*/
if (empty($fp)) {
/**
- * We use /dev/urandom if it is a char device.
- * We never fall back to /dev/random
+ * We don't want to ever read C:\dev\random, only /dev/urandom on
+ * Unix-like operating systems. While we guard against this
+ * condition in random.php, it doesn't hurt to be defensive in depth
+ * here.
+ *
+ * To that end, we only try to open /dev/urandom if we're on a Unix-
+ * like operating system (which means the directory separator is set
+ * to "/" not "\".
*/
- $fp = fopen('/dev/urandom', 'rb');
- if (!empty($fp)) {
- $st = fstat($fp);
- if (($st['mode'] & 0170000) !== 020000) {
- fclose($fp);
- $fp = false;
+ if (DIRECTORY_SEPARATOR === '/') {
+ if (!is_readable('/dev/urandom')) {
+ throw new Exception(
+ 'Environment misconfiguration: ' .
+ '/dev/urandom cannot be read.'
+ );
+ }
+ /**
+ * We use /dev/urandom if it is a char device.
+ * We never fall back to /dev/random
+ */
+ /** @var resource|bool $fp */
+ $fp = fopen('/dev/urandom', 'rb');
+ if (is_resource($fp)) {
+ /** @var array<string, int> $st */
+ $st = fstat($fp);
+ if (($st['mode'] & 0170000) !== 020000) {
+ fclose($fp);
+ $fp = false;
+ }
}
}
- if (!empty($fp)) {
+ if (is_resource($fp)) {
/**
* stream_set_read_buffer() does not exist in HHVM
*
@@ -83,6 +106,7 @@ if (!is_callable('random_bytes')) {
}
try {
+ /** @var int $bytes */
$bytes = RandomCompat_intval($bytes);
} catch (TypeError $ex) {
throw new TypeError(
@@ -103,7 +127,7 @@ if (!is_callable('random_bytes')) {
* if (empty($fp)) line is logic that should only be run once per
* page load.
*/
- if (!empty($fp)) {
+ if (is_resource($fp)) {
/**
* @var int
*/
@@ -123,29 +147,28 @@ if (!is_callable('random_bytes')) {
*/
$read = fread($fp, $remaining);
if (!is_string($read)) {
- if ($read === false) {
- /**
- * We cannot safely read from the file. Exit the
- * do-while loop and trigger the exception condition
- *
- * @var string|bool
- */
- $buf = false;
- break;
- }
+ /**
+ * We cannot safely read from the file. Exit the
+ * do-while loop and trigger the exception condition
+ *
+ * @var string|bool
+ */
+ $buf = false;
+ break;
}
/**
* Decrease the number of bytes returned from remaining
*/
$remaining -= RandomCompat_strlen($read);
/**
- * @var string|bool
+ * @var string $buf
*/
- $buf = $buf . $read;
+ $buf .= $read;
} while ($remaining > 0);
/**
* Is our result valid?
+ * @var string|bool $buf
*/
if (is_string($buf)) {
if (RandomCompat_strlen($buf) === $bytes) {
diff --git a/vendor/paragonie/random_compat/lib/random_bytes_libsodium.php b/vendor/paragonie/random_compat/lib/random_bytes_libsodium.php
index 4af1a2422..2e5629018 100644
--- a/vendor/paragonie/random_compat/lib/random_bytes_libsodium.php
+++ b/vendor/paragonie/random_compat/lib/random_bytes_libsodium.php
@@ -1,22 +1,22 @@
<?php
/**
- * Random_* Compatibility Library
+ * Random_* Compatibility Library
* for using the new PHP 7 random_* API in PHP 5 projects
- *
+ *
* The MIT License (MIT)
*
- * Copyright (c) 2015 - 2017 Paragon Initiative Enterprises
- *
+ * Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
+ *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -43,6 +43,7 @@ if (!is_callable('random_bytes')) {
function random_bytes($bytes)
{
try {
+ /** @var int $bytes */
$bytes = RandomCompat_intval($bytes);
} catch (TypeError $ex) {
throw new TypeError(
@@ -60,6 +61,7 @@ if (!is_callable('random_bytes')) {
* \Sodium\randombytes_buf() doesn't allow more than 2147483647 bytes to be
* generated in one invocation.
*/
+ /** @var string|bool $buf */
if ($bytes > 2147483647) {
$buf = '';
for ($i = 0; $i < $bytes; $i += 1073741824) {
@@ -69,10 +71,11 @@ if (!is_callable('random_bytes')) {
$buf .= \Sodium\randombytes_buf($n);
}
} else {
+ /** @var string|bool $buf */
$buf = \Sodium\randombytes_buf($bytes);
}
- if ($buf !== false) {
+ if (is_string($buf)) {
if (RandomCompat_strlen($buf) === $bytes) {
return $buf;
}
diff --git a/vendor/paragonie/random_compat/lib/random_bytes_libsodium_legacy.php b/vendor/paragonie/random_compat/lib/random_bytes_libsodium_legacy.php
index 705af5262..f78b2199a 100644
--- a/vendor/paragonie/random_compat/lib/random_bytes_libsodium_legacy.php
+++ b/vendor/paragonie/random_compat/lib/random_bytes_libsodium_legacy.php
@@ -1,22 +1,22 @@
<?php
/**
- * Random_* Compatibility Library
+ * Random_* Compatibility Library
* for using the new PHP 7 random_* API in PHP 5 projects
- *
+ *
* The MIT License (MIT)
*
- * Copyright (c) 2015 - 2017 Paragon Initiative Enterprises
- *
+ * Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
+ *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -43,6 +43,7 @@ if (!is_callable('random_bytes')) {
function random_bytes($bytes)
{
try {
+ /** @var int $bytes */
$bytes = RandomCompat_intval($bytes);
} catch (TypeError $ex) {
throw new TypeError(
diff --git a/vendor/paragonie/random_compat/lib/random_bytes_mcrypt.php b/vendor/paragonie/random_compat/lib/random_bytes_mcrypt.php
index aac9c013d..0b13fa73c 100644
--- a/vendor/paragonie/random_compat/lib/random_bytes_mcrypt.php
+++ b/vendor/paragonie/random_compat/lib/random_bytes_mcrypt.php
@@ -1,22 +1,22 @@
<?php
/**
- * Random_* Compatibility Library
+ * Random_* Compatibility Library
* for using the new PHP 7 random_* API in PHP 5 projects
- *
+ *
* The MIT License (MIT)
*
- * Copyright (c) 2015 - 2017 Paragon Initiative Enterprises
- *
+ * Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
+ *
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
- *
+ *
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
- *
+ *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -42,6 +42,7 @@ if (!is_callable('random_bytes')) {
function random_bytes($bytes)
{
try {
+ /** @var int $bytes */
$bytes = RandomCompat_intval($bytes);
} catch (TypeError $ex) {
throw new TypeError(
@@ -55,10 +56,11 @@ if (!is_callable('random_bytes')) {
);
}
- $buf = @mcrypt_create_iv($bytes, MCRYPT_DEV_URANDOM);
+ /** @var string|bool $buf */
+ $buf = @mcrypt_create_iv((int) $bytes, (int) MCRYPT_DEV_URANDOM);
if (
- $buf !== false
- &&
+ is_string($buf)
+ &&
RandomCompat_strlen($buf) === $bytes
) {
/**
diff --git a/vendor/paragonie/random_compat/lib/random_int.php b/vendor/paragonie/random_compat/lib/random_int.php
index 5b2143a16..ff80dfa43 100644
--- a/vendor/paragonie/random_compat/lib/random_int.php
+++ b/vendor/paragonie/random_compat/lib/random_int.php
@@ -7,7 +7,7 @@ if (!is_callable('random_int')) {
*
* The MIT License (MIT)
*
- * Copyright (c) 2015 - 2017 Paragon Initiative Enterprises
+ * Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -51,6 +51,7 @@ if (!is_callable('random_int')) {
*/
try {
+ /** @var int $min */
$min = RandomCompat_intval($min);
} catch (TypeError $ex) {
throw new TypeError(
@@ -59,6 +60,7 @@ if (!is_callable('random_int')) {
}
try {
+ /** @var int $max */
$max = RandomCompat_intval($max);
} catch (TypeError $ex) {
throw new TypeError(
@@ -90,11 +92,18 @@ if (!is_callable('random_int')) {
* so we can minimize the number of discards
*/
$attempts = $bits = $bytes = $mask = $valueShift = 0;
+ /** @var int $attempts */
+ /** @var int $bits */
+ /** @var int $bytes */
+ /** @var int $mask */
+ /** @var int $valueShift */
/**
* At this point, $range is a positive number greater than 0. It might
* overflow, however, if $max - $min > PHP_INT_MAX. PHP will cast it to
* a float and we will lose some precision.
+ *
+ * @var int|float $range
*/
$range = $max - $min;
@@ -115,6 +124,7 @@ if (!is_callable('random_int')) {
* @ref http://3v4l.org/XX9r5 (64-bit)
*/
$bytes = PHP_INT_SIZE;
+ /** @var int $mask */
$mask = ~0;
} else {
@@ -129,16 +139,19 @@ if (!is_callable('random_int')) {
}
++$bits;
$range >>= 1;
+ /** @var int $mask */
$mask = $mask << 1 | 1;
}
$valueShift = $min;
}
+ /** @var int $val */
$val = 0;
/**
* Now that we have our parameters set up, let's begin generating
* random integers until one falls between $min and $max
*/
+ /** @psalm-suppress RedundantCondition */
do {
/**
* The rejection probability is at most 0.5, so this corresponds
@@ -169,6 +182,7 @@ if (!is_callable('random_int')) {
for ($i = 0; $i < $bytes; ++$i) {
$val |= ord($randomByteString[$i]) << ($i * 8);
}
+ /** @var int $val */
/**
* Apply mask
diff --git a/vendor/paragonie/random_compat/psalm-autoload.php b/vendor/paragonie/random_compat/psalm-autoload.php
deleted file mode 100644
index d71d1b818..000000000
--- a/vendor/paragonie/random_compat/psalm-autoload.php
+++ /dev/null
@@ -1,9 +0,0 @@
-<?php
-
-require_once 'lib/byte_safe_strings.php';
-require_once 'lib/cast_to_int.php';
-require_once 'lib/error_polyfill.php';
-require_once 'other/ide_stubs/libsodium.php';
-require_once 'lib/random.php';
-
-$int = random_int(0, 65536);
diff --git a/vendor/paragonie/random_compat/psalm.xml b/vendor/paragonie/random_compat/psalm.xml
deleted file mode 100644
index ee072a972..000000000
--- a/vendor/paragonie/random_compat/psalm.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<psalm
- autoloader="psalm-autoload.php"
- stopOnFirstError="false"
- useDocblockTypes="true"
->
- <projectFiles>
- <directory name="lib" />
- </projectFiles>
- <issueHandlers>
- <RedundantConditionGivenDocblockType errorLevel="info" />
- <UnresolvableInclude errorLevel="info" />
- <DuplicateClass errorLevel="info" />
- <InvalidOperand errorLevel="info" />
- <UndefinedConstant errorLevel="info" />
- <MissingReturnType errorLevel="info" />
- </issueHandlers>
-</psalm>
diff --git a/vendor/phpseclib/phpseclib/BACKERS.md b/vendor/phpseclib/phpseclib/BACKERS.md
new file mode 100644
index 000000000..e9f3784d1
--- /dev/null
+++ b/vendor/phpseclib/phpseclib/BACKERS.md
@@ -0,0 +1,7 @@
+# Backers
+
+phpseclib ongoing development is made possible by [Tidelift](https://tidelift.com/subscription/pkg/packagist-phpseclib-phpseclib?utm_source=packagist-phpseclib-phpseclib&utm_medium=referral&utm_campaign=readme) and by contributions by users like you. Thank you.
+
+## Backers
+
+- Zane Hooper \ No newline at end of file
diff --git a/vendor/phpseclib/phpseclib/LICENSE b/vendor/phpseclib/phpseclib/LICENSE
index a8ec8ebd4..e7214ebbe 100644
--- a/vendor/phpseclib/phpseclib/LICENSE
+++ b/vendor/phpseclib/phpseclib/LICENSE
@@ -1,5 +1,4 @@
-Copyright 2007-2016 TerraFrost and other contributors
-http://phpseclib.sourceforge.net/
+Copyright (c) 2011-2019 TerraFrost and other contributors
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
@@ -18,4 +17,4 @@ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file
diff --git a/vendor/phpseclib/phpseclib/README.md b/vendor/phpseclib/phpseclib/README.md
index 53f58db1e..ce201c9e2 100644
--- a/vendor/phpseclib/phpseclib/README.md
+++ b/vendor/phpseclib/phpseclib/README.md
@@ -2,6 +2,14 @@
[![Build Status](https://travis-ci.org/phpseclib/phpseclib.svg?branch=2.0)](https://travis-ci.org/phpseclib/phpseclib)
+## Supporting phpseclib
+
+- [Become a backer or sponsor on Patreon](https://www.patreon.com/phpseclib)
+- [One-time donation via PayPal or crypto-currencies](http://sourceforge.net/donate/index.php?group_id=198487)
+- [Subscribe to Tidelift](https://tidelift.com/subscription/pkg/packagist-phpseclib-phpseclib?utm_source=packagist-phpseclib-phpseclib&utm_medium=referral&utm_campaign=readme)
+
+## Introduction
+
MIT-licensed pure-PHP implementations of an arbitrary-precision integer
arithmetic library, fully PKCS#1 (v2.1) compliant RSA, DES, 3DES, RC4, Rijndael,
AES, Blowfish, Twofish, SSH-1, SSH-2, SFTP, and X.509
@@ -24,19 +32,24 @@ AES, Blowfish, Twofish, SSH-1, SSH-2, SFTP, and X.509
### 2.0
+* Long term support (LTS) release
* Modernized version of 1.0
* Minimum PHP version: 5.3.3
* PSR-4 autoloading with namespace rooted at `\phpseclib`
-* Install via Composer: `composer require phpseclib/phpseclib ~2.0`
+* Install via Composer: `composer require phpseclib/phpseclib:~2.0`
### 1.0
* Long term support (LTS) release
* PHP4 compatible
* Composer compatible (PSR-0 autoloading)
-* Install using Composer: `composer require phpseclib/phpseclib ~1.0`
+* Install using Composer: `composer require phpseclib/phpseclib:~1.0`
* Install using PEAR: See [phpseclib PEAR Channel Documentation](http://phpseclib.sourceforge.net/pear.htm)
-* [Download 1.0.11 as ZIP](http://sourceforge.net/projects/phpseclib/files/phpseclib1.0.11.zip/download)
+* [Download 1.0.17 as ZIP](http://sourceforge.net/projects/phpseclib/files/phpseclib1.0.17.zip/download)
+
+## Security contact information
+
+To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure.
## Support
diff --git a/vendor/phpseclib/phpseclib/appveyor.yml b/vendor/phpseclib/phpseclib/appveyor.yml
new file mode 100644
index 000000000..210a90347
--- /dev/null
+++ b/vendor/phpseclib/phpseclib/appveyor.yml
@@ -0,0 +1,27 @@
+build: false
+shallow_clone: false
+platform:
+ - x86
+ - x64
+clone_folder: C:\projects\phpseclib
+
+install:
+ - cinst -y OpenSSL.Light
+ - SET PATH=C:\Program Files\OpenSSL;%PATH%
+ - sc config wuauserv start= auto
+ - net start wuauserv
+ - cinst -y php --version 5.6.30
+ - cd c:\tools\php56
+ - copy php.ini-production php.ini
+ - echo date.timezone="UTC" >> php.ini
+ - echo extension_dir=ext >> php.ini
+ - echo extension=php_openssl.dll >> php.ini
+ - echo extension=php_gmp.dll >> php.ini
+ - cd C:\projects\phpseclib
+ - SET PATH=C:\tools\php56;%PATH%
+ - php.exe -r "readfile('http://getcomposer.org/installer');" | php.exe
+ - php.exe composer.phar install --prefer-source --no-interaction
+
+test_script:
+ - cd C:\projects\phpseclib
+ - vendor\bin\phpunit.bat tests/Windows32Test.php \ No newline at end of file
diff --git a/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php b/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php
index 7c9032f0d..03b176e7b 100644
--- a/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php
+++ b/vendor/phpseclib/phpseclib/phpseclib/Crypt/Base.php
@@ -649,10 +649,10 @@ abstract class Base
case !function_exists('hash_algos'):
case !in_array($hash, hash_algos()):
$i = 1;
+ $hmac = new Hash();
+ $hmac->setHash($hash);
+ $hmac->setKey($password);
while (strlen($key) < $dkLen) {
- $hmac = new Hash();
- $hmac->setHash($hash);
- $hmac->setKey($password);
$f = $u = $hmac->hash($salt . pack('N', $i++));
for ($j = 2; $j <= $count; ++$j) {
$u = $hmac->hash($u);
@@ -707,7 +707,7 @@ abstract class Base
case self::MODE_STREAM:
return openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
case self::MODE_ECB:
- $result = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
+ $result = @openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
return !defined('OPENSSL_RAW_DATA') ? substr($result, 0, -$this->block_size) : $result;
case self::MODE_CBC:
$result = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $this->encryptIV);
@@ -1040,14 +1040,14 @@ abstract class Base
break;
case self::MODE_ECB:
if (!defined('OPENSSL_RAW_DATA')) {
- $ciphertext.= openssl_encrypt('', $this->cipher_name_openssl_ecb, $this->key, true);
+ $ciphertext.= @openssl_encrypt('', $this->cipher_name_openssl_ecb, $this->key, true);
}
$plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
break;
case self::MODE_CBC:
if (!defined('OPENSSL_RAW_DATA')) {
$padding = str_repeat(chr($this->block_size), $this->block_size) ^ substr($ciphertext, -$this->block_size);
- $ciphertext.= substr(openssl_encrypt($padding, $this->cipher_name_openssl_ecb, $this->key, true), 0, $this->block_size);
+ $ciphertext.= substr(@openssl_encrypt($padding, $this->cipher_name_openssl_ecb, $this->key, true), 0, $this->block_size);
$offset = 2 * $this->block_size;
} else {
$offset = $this->block_size;
@@ -1358,7 +1358,7 @@ abstract class Base
for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
$block = substr($plaintext, $i, $block_size);
if (strlen($block) > strlen($buffer['ciphertext'])) {
- $result = openssl_encrypt($xor, $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
+ $result = @openssl_encrypt($xor, $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
$result = !defined('OPENSSL_RAW_DATA') ? substr($result, 0, -$this->block_size) : $result;
$buffer['ciphertext'].= $result;
}
@@ -1369,7 +1369,7 @@ abstract class Base
} else {
for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
$block = substr($plaintext, $i, $block_size);
- $otp = openssl_encrypt($xor, $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
+ $otp = @openssl_encrypt($xor, $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
$otp = !defined('OPENSSL_RAW_DATA') ? substr($otp, 0, -$this->block_size) : $otp;
$this->_increment_str($xor);
$ciphertext.= $block ^ $otp;
@@ -1413,7 +1413,7 @@ abstract class Base
}
if ($this->continuousBuffer) {
if (!defined('OPENSSL_RAW_DATA')) {
- $encryptIV.= openssl_encrypt('', $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
+ $encryptIV.= @openssl_encrypt('', $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
}
$encryptIV = openssl_decrypt($encryptIV, $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
if ($overflow) {
diff --git a/vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php b/vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php
index 6ae01329e..a61668209 100644
--- a/vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php
+++ b/vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php
@@ -113,6 +113,15 @@ class Hash
var $key = false;
/**
+ * Computed Key
+ *
+ * @see self::_computeKey()
+ * @var string
+ * @access private
+ */
+ var $computedKey = false;
+
+ /**
* Outer XOR (Internal HMAC)
*
* @see self::setKey()
@@ -131,6 +140,15 @@ class Hash
var $ipad;
/**
+ * Engine
+ *
+ * @see self::setHash()
+ * @var string
+ * @access private
+ */
+ var $engine;
+
+ /**
* Default Constructor.
*
* @param string $hash
@@ -166,6 +184,43 @@ class Hash
function setKey($key = false)
{
$this->key = $key;
+ $this->_computeKey();
+ }
+
+ /**
+ * Pre-compute the key used by the HMAC
+ *
+ * Quoting http://tools.ietf.org/html/rfc2104#section-2, "Applications that use keys longer than B bytes
+ * will first hash the key using H and then use the resultant L byte string as the actual key to HMAC."
+ *
+ * As documented in https://www.reddit.com/r/PHP/comments/9nct2l/symfonypolyfill_hash_pbkdf2_correct_fix_for/
+ * when doing an HMAC multiple times it's faster to compute the hash once instead of computing it during
+ * every call
+ *
+ * @access private
+ */
+ function _computeKey()
+ {
+ if ($this->key === false) {
+ $this->computedKey = false;
+ return;
+ }
+
+ if (strlen($this->key) <= $this->b) {
+ $this->computedKey = $this->key;
+ return;
+ }
+
+ switch ($this->engine) {
+ case self::MODE_MHASH:
+ $this->computedKey = mhash($this->hash, $this->key);
+ break;
+ case self::MODE_HASH:
+ $this->computedKey = hash($this->hash, $this->key, true);
+ break;
+ case self::MODE_INTERNAL:
+ $this->computedKey = call_user_func($this->hash, $this->key);
+ }
}
/**
@@ -216,19 +271,38 @@ class Hash
}
switch ($hash) {
+ case 'md2-96':
+ case 'md2':
+ $this->b = 16;
+ case 'md5-96':
+ case 'sha1-96':
+ case 'sha224-96':
+ case 'sha256-96':
case 'md2':
- $mode = CRYPT_HASH_MODE == self::MODE_HASH && in_array('md2', hash_algos()) ?
+ case 'md5':
+ case 'sha1':
+ case 'sha224':
+ case 'sha256':
+ $this->b = 64;
+ break;
+ default:
+ $this->b = 128;
+ }
+
+ switch ($hash) {
+ case 'md2':
+ $this->engine = CRYPT_HASH_MODE == self::MODE_HASH && in_array('md2', hash_algos()) ?
self::MODE_HASH : self::MODE_INTERNAL;
break;
case 'sha384':
case 'sha512':
- $mode = CRYPT_HASH_MODE == self::MODE_MHASH ? self::MODE_INTERNAL : CRYPT_HASH_MODE;
+ $this->engine = CRYPT_HASH_MODE == self::MODE_MHASH ? self::MODE_INTERNAL : CRYPT_HASH_MODE;
break;
default:
- $mode = CRYPT_HASH_MODE;
+ $this->engine = CRYPT_HASH_MODE;
}
- switch ($mode) {
+ switch ($this->engine) {
case self::MODE_MHASH:
switch ($hash) {
case 'md5':
@@ -241,6 +315,7 @@ class Hash
default:
$this->hash = MHASH_SHA1;
}
+ $this->_computeKey(self::MODE_MHASH);
return;
case self::MODE_HASH:
switch ($hash) {
@@ -257,35 +332,33 @@ class Hash
default:
$this->hash = 'sha1';
}
+ $this->_computeKey(self::MODE_HASH);
return;
}
switch ($hash) {
case 'md2':
- $this->b = 16;
$this->hash = array($this, '_md2');
break;
case 'md5':
- $this->b = 64;
$this->hash = array($this, '_md5');
break;
case 'sha256':
- $this->b = 64;
$this->hash = array($this, '_sha256');
break;
case 'sha384':
case 'sha512':
- $this->b = 128;
$this->hash = array($this, '_sha512');
break;
case 'sha1':
default:
- $this->b = 64;
$this->hash = array($this, '_sha1');
}
$this->ipad = str_repeat(chr(0x36), $this->b);
$this->opad = str_repeat(chr(0x5C), $this->b);
+
+ $this->_computeKey(self::MODE_INTERNAL);
}
/**
@@ -297,33 +370,25 @@ class Hash
*/
function hash($text)
{
- $mode = is_array($this->hash) ? self::MODE_INTERNAL : CRYPT_HASH_MODE;
-
if (!empty($this->key) || is_string($this->key)) {
- switch ($mode) {
+ switch ($this->engine) {
case self::MODE_MHASH:
- $output = mhash($this->hash, $text, $this->key);
+ $output = mhash($this->hash, $text, $this->computedKey);
break;
case self::MODE_HASH:
- $output = hash_hmac($this->hash, $text, $this->key, true);
+ $output = hash_hmac($this->hash, $text, $this->computedKey, true);
break;
case self::MODE_INTERNAL:
- /* "Applications that use keys longer than B bytes will first hash the key using H and then use the
- resultant L byte string as the actual key to HMAC."
-
- -- http://tools.ietf.org/html/rfc2104#section-2 */
- $key = strlen($this->key) > $this->b ? call_user_func($this->hash, $this->key) : $this->key;
-
- $key = str_pad($key, $this->b, chr(0)); // step 1
- $temp = $this->ipad ^ $key; // step 2
- $temp .= $text; // step 3
- $temp = call_user_func($this->hash, $temp); // step 4
- $output = $this->opad ^ $key; // step 5
- $output.= $temp; // step 6
- $output = call_user_func($this->hash, $output); // step 7
+ $key = str_pad($this->computedKey, $this->b, chr(0)); // step 1
+ $temp = $this->ipad ^ $key; // step 2
+ $temp .= $text; // step 3
+ $temp = call_user_func($this->hash, $temp); // step 4
+ $output = $this->opad ^ $key; // step 5
+ $output.= $temp; // step 6
+ $output = call_user_func($this->hash, $output); // step 7
}
} else {
- switch ($mode) {
+ switch ($this->engine) {
case self::MODE_MHASH:
$output = mhash($this->hash, $text);
break;
diff --git a/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php b/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php
index c15e86d38..d2c6c7cbe 100644
--- a/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php
+++ b/vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php
@@ -182,6 +182,10 @@ class RSA
* PKCS#8 formatted private key
*/
const PRIVATE_FORMAT_PKCS8 = 8;
+ /**
+ * OpenSSH formatted private key
+ */
+ const PRIVATE_FORMAT_OPENSSH = 9;
/**#@-*/
/**#@+
@@ -820,6 +824,58 @@ class RSA
$key.= 'Private-MAC: ' . bin2hex($hash->hash($source)) . "\r\n";
return $key;
+ case self::PRIVATE_FORMAT_OPENSSH:
+ if ($num_primes != 2) {
+ return false;
+ }
+ $publicKey = pack('Na*Na*Na*', strlen('ssh-rsa'), 'ssh-rsa', strlen($raw['publicExponent']), $raw['publicExponent'], strlen($raw['modulus']), $raw['modulus']);
+ $privateKey = pack(
+ 'Na*Na*Na*Na*Na*Na*Na*',
+ strlen('ssh-rsa'),
+ 'ssh-rsa',
+ strlen($raw['modulus']),
+ $raw['modulus'],
+ strlen($raw['publicExponent']),
+ $raw['publicExponent'],
+ strlen($raw['privateExponent']),
+ $raw['privateExponent'],
+ strlen($raw['coefficient']),
+ $raw['coefficient'],
+ strlen($raw['prime1']),
+ $raw['prime1'],
+ strlen($raw['prime2']),
+ $raw['prime2']
+ );
+ $checkint = Random::string(4);
+ $paddedKey = pack(
+ 'a*Na*',
+ $checkint . $checkint . $privateKey,
+ strlen($this->comment),
+ $this->comment
+ );
+ $paddingLength = (7 * strlen($paddedKey)) % 8;
+ for ($i = 1; $i <= $paddingLength; $i++) {
+ $paddedKey.= chr($i);
+ }
+ $key = pack(
+ 'Na*Na*Na*NNa*Na*',
+ strlen('none'),
+ 'none',
+ strlen('none'),
+ 'none',
+ 0,
+ '',
+ 1,
+ strlen($publicKey),
+ $publicKey,
+ strlen($paddedKey),
+ $paddedKey
+ );
+ $key = "openssh-key-v1\0$key";
+
+ return "-----BEGIN OPENSSH PRIVATE KEY-----\r\n" .
+ chunk_split(base64_encode($key), 70) .
+ "-----END OPENSSH PRIVATE KEY-----";
default: // eg. self::PRIVATE_FORMAT_PKCS1
$components = array();
foreach ($raw as $name => $value) {
@@ -1020,9 +1076,9 @@ class RSA
* @access private
* @see self::_convertPublicKey()
* @see self::_convertPrivateKey()
- * @param string $key
+ * @param string|array $key
* @param int $type
- * @return array
+ * @return array|bool
*/
function _parseKey($key, $type)
{
@@ -1333,9 +1389,14 @@ class RSA
xml_set_character_data_handler($xml, '_data_handler');
// add <xml></xml> to account for "dangling" tags like <BitStrength>...</BitStrength> that are sometimes added
if (!xml_parse($xml, '<xml>' . $key . '</xml>')) {
+ xml_parser_free($xml);
+ unset($xml);
return false;
}
+ xml_parser_free($xml);
+ unset($xml);
+
return isset($this->components['modulus']) && isset($this->components['publicExponent']) ? $this->components : false;
// from PuTTY's SSHPUBK.C
case self::PRIVATE_FORMAT_PUTTY:
@@ -1408,6 +1469,75 @@ class RSA
$components['coefficients'] = array(2 => new BigInteger($this->_string_shift($private, $length), -256));
return $components;
+ case self::PRIVATE_FORMAT_OPENSSH:
+ $components = array();
+ $decoded = $this->_extractBER($key);
+ $magic = $this->_string_shift($decoded, 15);
+ if ($magic !== "openssh-key-v1\0") {
+ return false;
+ }
+ $options = $this->_string_shift($decoded, 24);
+ // \0\0\0\4none = ciphername
+ // \0\0\0\4none = kdfname
+ // \0\0\0\0 = kdfoptions
+ // \0\0\0\1 = numkeys
+ if ($options != "\0\0\0\4none\0\0\0\4none\0\0\0\0\0\0\0\1") {
+ return false;
+ }
+ extract(unpack('Nlength', $this->_string_shift($decoded, 4)));
+ if (strlen($decoded) < $length) {
+ return false;
+ }
+ $publicKey = $this->_string_shift($decoded, $length);
+ extract(unpack('Nlength', $this->_string_shift($decoded, 4)));
+ if (strlen($decoded) < $length) {
+ return false;
+ }
+ $paddedKey = $this->_string_shift($decoded, $length);
+
+ if ($this->_string_shift($publicKey, 11) !== "\0\0\0\7ssh-rsa") {
+ return false;
+ }
+
+ $checkint1 = $this->_string_shift($paddedKey, 4);
+ $checkint2 = $this->_string_shift($paddedKey, 4);
+ if (strlen($checkint1) != 4 || $checkint1 !== $checkint2) {
+ return false;
+ }
+
+ if ($this->_string_shift($paddedKey, 11) !== "\0\0\0\7ssh-rsa") {
+ return false;
+ }
+
+ $values = array(
+ &$components['modulus'],
+ &$components['publicExponent'],
+ &$components['privateExponent'],
+ &$components['coefficients'][2],
+ &$components['primes'][1],
+ &$components['primes'][2]
+ );
+
+ foreach ($values as &$value) {
+ extract(unpack('Nlength', $this->_string_shift($paddedKey, 4)));
+ if (strlen($paddedKey) < $length) {
+ return false;
+ }
+ $value = new BigInteger($this->_string_shift($paddedKey, $length), -256);
+ }
+
+ extract(unpack('Nlength', $this->_string_shift($paddedKey, 4)));
+ if (strlen($paddedKey) < $length) {
+ return false;
+ }
+ $components['comment'] = $this->_string_shift($decoded, $length);
+
+ $temp = $components['primes'][1]->subtract($this->one);
+ $components['exponents'] = array(1 => $components['publicExponent']->modInverse($temp));
+ $temp = $components['primes'][2]->subtract($this->one);
+ $components['exponents'][] = $components['publicExponent']->modInverse($temp);
+
+ return $components;
}
}
@@ -1505,8 +1635,9 @@ class RSA
* Returns true on success and false on failure (ie. an incorrect password was provided or the key was malformed)
*
* @access public
- * @param string $key
- * @param int $type optional
+ * @param string|RSA|array $key
+ * @param bool|int $type optional
+ * @return bool
*/
function loadKey($key, $type = false)
{
@@ -1563,7 +1694,8 @@ class RSA
self::PRIVATE_FORMAT_PKCS1,
self::PRIVATE_FORMAT_XML,
self::PRIVATE_FORMAT_PUTTY,
- self::PUBLIC_FORMAT_OPENSSH
+ self::PUBLIC_FORMAT_OPENSSH,
+ self::PRIVATE_FORMAT_OPENSSH
);
foreach ($types as $type) {
$components = $this->_parseKey($key, $type);
@@ -2211,16 +2343,21 @@ class RSA
*/
function _equals($x, $y)
{
+ if (function_exists('hash_equals')) {
+ return hash_equals($x, $y);
+ }
+
if (strlen($x) != strlen($y)) {
return false;
}
- $result = 0;
+ $result = "\0";
+ $x^= $y;
for ($i = 0; $i < strlen($x); $i++) {
- $result |= ord($x[$i]) ^ ord($y[$i]);
+ $result|= $x[$i];
}
- return $result == 0;
+ return $result === "\0";
}
/**
@@ -2427,19 +2564,26 @@ class RSA
$db = $maskedDB ^ $dbMask;
$lHash2 = substr($db, 0, $this->hLen);
$m = substr($db, $this->hLen);
- if (!$this->_equals($lHash, $lHash2)) {
- user_error('Decryption error');
- return false;
- }
- $m = ltrim($m, chr(0));
- if (ord($m[0]) != 1) {
+ $hashesMatch = $this->_equals($lHash, $lHash2);
+ $leadingZeros = 1;
+ $patternMatch = 0;
+ $offset = 0;
+ for ($i = 0; $i < strlen($m); $i++) {
+ $patternMatch|= $leadingZeros & ($m[$i] === "\1");
+ $leadingZeros&= $m[$i] === "\0";
+ $offset+= $patternMatch ? 0 : 1;
+ }
+
+ // we do & instead of && to avoid https://en.wikipedia.org/wiki/Short-circuit_evaluation
+ // to protect against timing attacks
+ if (!$hashesMatch & !$patternMatch) {
user_error('Decryption error');
return false;
}
// Output the message M
- return substr($m, 1);
+ return substr($m, $offset + 1);
}
/**
diff --git a/vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php b/vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php
index 76ff8e3ac..3b8f11bd7 100644
--- a/vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php
+++ b/vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php
@@ -244,9 +244,10 @@ class ASN1
$tag = 0;
// process septets (since the eighth bit is ignored, it's not an octet)
do {
- $loop = ord($encoded[0]) >> 7;
+ $temp = ord($encoded[$encoded_pos++]);
+ $loop = $temp >> 7;
$tag <<= 7;
- $tag |= ord($encoded[$encoded_pos++]) & 0x7F;
+ $tag |= $temp & 0x7F;
$start++;
} while ($loop);
}
@@ -308,6 +309,9 @@ class ASN1
$remainingLength = $length;
while ($remainingLength > 0) {
$temp = $this->_decode_ber($content, $start, $content_pos);
+ if ($temp === false) {
+ break;
+ }
$length = $temp['length'];
// end-of-content octets - see paragraph 8.1.5
if (substr($content, $content_pos + $length, 2) == "\0\0") {
@@ -359,6 +363,9 @@ class ASN1
$current['content'] = substr($content, $content_pos);
} else {
$temp = $this->_decode_ber($content, $start, $content_pos);
+ if ($temp === false) {
+ return false;
+ }
$length-= (strlen($content) - $content_pos);
$last = count($temp) - 1;
for ($i = 0; $i < $last; $i++) {
@@ -383,6 +390,9 @@ class ASN1
$length = 0;
while (substr($content, $content_pos, 2) != "\0\0") {
$temp = $this->_decode_ber($content, $length + $start, $content_pos);
+ if ($temp === false) {
+ return false;
+ }
$content_pos += $temp['length'];
// all subtags should be octet strings
//if ($temp['type'] != self::TYPE_OCTET_STRING) {
@@ -415,30 +425,16 @@ class ASN1
break 2;
}
$temp = $this->_decode_ber($content, $start + $offset, $content_pos);
+ if ($temp === false) {
+ return false;
+ }
$content_pos += $temp['length'];
$current['content'][] = $temp;
$offset+= $temp['length'];
}
break;
case self::TYPE_OBJECT_IDENTIFIER:
- $temp = ord($content[$content_pos++]);
- $current['content'] = sprintf('%d.%d', floor($temp / 40), $temp % 40);
- $valuen = 0;
- // process septets
- $content_len = strlen($content);
- while ($content_pos < $content_len) {
- $temp = ord($content[$content_pos++]);
- $valuen <<= 7;
- $valuen |= $temp & 0x7F;
- if (~$temp & 0x80) {
- $current['content'].= ".$valuen";
- $valuen = 0;
- }
- }
- // the eighth bit of the last byte should not be 1
- //if ($temp >> 7) {
- // return false;
- //}
+ $current['content'] = $this->_decodeOID(substr($content, $content_pos));
break;
/* Each character string type shall be encoded as if it had been declared:
[UNIVERSAL x] IMPLICIT OCTET STRING
@@ -706,7 +702,14 @@ class ASN1
return isset($this->oids[$decoded['content']]) ? $this->oids[$decoded['content']] : $decoded['content'];
case self::TYPE_UTC_TIME:
case self::TYPE_GENERALIZED_TIME:
- if (isset($mapping['implicit'])) {
+ // for explicitly tagged optional stuff
+ if (is_array($decoded['content'])) {
+ $decoded['content'] = $decoded['content'][0]['content'];
+ }
+ // for implicitly tagged optional stuff
+ // in theory, doing isset($mapping['implicit']) would work but malformed certs do exist
+ // in the wild that OpenSSL decodes without issue so we'll support them as well
+ if (!is_object($decoded['content'])) {
$decoded['content'] = $this->_decodeTime($decoded['content'], $decoded['type']);
}
return $decoded['content'] ? $decoded['content']->format($this->format) : false;
@@ -847,7 +850,7 @@ class ASN1
if ($mapping['type'] == self::TYPE_SET) {
sort($value);
}
- $value = implode($value, '');
+ $value = implode('', $value);
break;
}
@@ -1001,27 +1004,7 @@ class ASN1
$value = base64_decode($source);
break;
case self::TYPE_OBJECT_IDENTIFIER:
- $oid = preg_match('#(?:\d+\.)+#', $source) ? $source : array_search($source, $this->oids);
- if ($oid === false) {
- user_error('Invalid OID');
- return false;
- }
- $value = '';
- $parts = explode('.', $oid);
- $value = chr(40 * $parts[0] + $parts[1]);
- for ($i = 2; $i < count($parts); $i++) {
- $temp = '';
- if (!$parts[$i]) {
- $temp = "\0";
- } else {
- while ($parts[$i]) {
- $temp = chr(0x80 | ($parts[$i] & 0x7F)) . $temp;
- $parts[$i] >>= 7;
- }
- $temp[strlen($temp) - 1] = $temp[strlen($temp) - 1] & chr(0x7F);
- }
- $value.= $temp;
- }
+ $value = $this->_encodeOID($source);
break;
case self::TYPE_ANY:
$loc = $this->location;
@@ -1121,6 +1104,108 @@ class ASN1
}
/**
+ * BER-decode the OID
+ *
+ * Called by _decode_ber()
+ *
+ * @access private
+ * @param string $content
+ * @return string
+ */
+ function _decodeOID($content)
+ {
+ static $eighty;
+ if (!$eighty) {
+ $eighty = new BigInteger(80);
+ }
+
+ $oid = array();
+ $pos = 0;
+ $len = strlen($content);
+ $n = new BigInteger();
+ while ($pos < $len) {
+ $temp = ord($content[$pos++]);
+ $n = $n->bitwise_leftShift(7);
+ $n = $n->bitwise_or(new BigInteger($temp & 0x7F));
+ if (~$temp & 0x80) {
+ $oid[] = $n;
+ $n = new BigInteger();
+ }
+ }
+ $part1 = array_shift($oid);
+ $first = floor(ord($content[0]) / 40);
+ /*
+ "This packing of the first two object identifier components recognizes that only three values are allocated from the root
+ node, and at most 39 subsequent values from nodes reached by X = 0 and X = 1."
+
+ -- https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#page=22
+ */
+ if ($first <= 2) { // ie. 0 <= ord($content[0]) < 120 (0x78)
+ array_unshift($oid, ord($content[0]) % 40);
+ array_unshift($oid, $first);
+ } else {
+ array_unshift($oid, $part1->subtract($eighty));
+ array_unshift($oid, 2);
+ }
+
+ return implode('.', $oid);
+ }
+
+ /**
+ * DER-encode the OID
+ *
+ * Called by _encode_der()
+ *
+ * @access private
+ * @param string $content
+ * @return string
+ */
+ function _encodeOID($source)
+ {
+ static $mask, $zero, $forty;
+ if (!$mask) {
+ $mask = new BigInteger(0x7F);
+ $zero = new BigInteger();
+ $forty = new BigInteger(40);
+ }
+
+ $oid = preg_match('#(?:\d+\.)+#', $source) ? $source : array_search($source, $this->oids);
+ if ($oid === false) {
+ user_error('Invalid OID');
+ return false;
+ }
+ $parts = explode('.', $oid);
+ $part1 = array_shift($parts);
+ $part2 = array_shift($parts);
+
+ $first = new BigInteger($part1);
+ $first = $first->multiply($forty);
+ $first = $first->add(new BigInteger($part2));
+
+ array_unshift($parts, $first->toString());
+
+ $value = '';
+ foreach ($parts as $part) {
+ if (!$part) {
+ $temp = "\0";
+ } else {
+ $temp = '';
+ $part = new BigInteger($part);
+ while (!$part->equals($zero)) {
+ $submask = $part->bitwise_and($mask);
+ $submask->setPrecision(8);
+ $temp = (chr(0x80) | $submask->toBytes()) . $temp;
+ $part = $part->bitwise_rightShift(7);
+ }
+ $temp[strlen($temp) - 1] = $temp[strlen($temp) - 1] & chr(0x7F);
+ }
+ $value.= $temp;
+ }
+
+ return $value;
+ }
+
+ /**
* BER-decode the time
*
* Called by _decode_ber() and in the case of implicit tags asn1map().
diff --git a/vendor/phpseclib/phpseclib/phpseclib/File/X509.php b/vendor/phpseclib/phpseclib/phpseclib/File/X509.php
index f3ee81377..b4963fc87 100644
--- a/vendor/phpseclib/phpseclib/phpseclib/File/X509.php
+++ b/vendor/phpseclib/phpseclib/phpseclib/File/X509.php
@@ -963,6 +963,13 @@ class X509
'children' => $AccessDescription
);
+ $this->SubjectInfoAccessSyntax = array(
+ 'type' => ASN1::TYPE_SEQUENCE,
+ 'min' => 1,
+ 'max' => -1,
+ 'children' => $AccessDescription
+ );
+
$this->SubjectAltName = $GeneralNames;
$this->PrivateKeyUsagePeriod = array(
@@ -1620,7 +1627,10 @@ class X509
corresponding to the extension type identified by extnID */
$map = $this->_getMapping($id);
if (!is_bool($map)) {
- $mapped = $asn1->asn1map($decoded[0], $map, array('iPAddress' => array($this, '_decodeIP')));
+ $decoder = $id == 'id-ce-nameConstraints' ?
+ array($this, '_decodeNameConstraintIP') :
+ array($this, '_decodeIP');
+ $mapped = $asn1->asn1map($decoded[0], $map, array('iPAddress' => $decoder));
$value = $mapped === false ? $decoded[0] : $mapped;
if ($id == 'id-ce-certificatePolicies') {
@@ -1889,6 +1899,8 @@ class X509
return $this->ExtKeyUsageSyntax;
case 'id-pe-authorityInfoAccess':
return $this->AuthorityInfoAccessSyntax;
+ case 'id-pe-subjectInfoAccess':
+ return $this->SubjectInfoAccessSyntax;
case 'id-ce-subjectAltName':
return $this->SubjectAltName;
case 'id-ce-subjectDirectoryAttributes':
@@ -1928,6 +1940,9 @@ class X509
// "Certificate Transparency"
// https://tools.ietf.org/html/rfc6962
case '1.3.6.1.4.1.11129.2.4.2':
+ // "Qualified Certificate statements"
+ // https://tools.ietf.org/html/rfc3739#section-3.2.6
+ case '1.3.6.1.5.5.7.1.3':
return true;
// CSR attributes
@@ -2092,7 +2107,7 @@ class X509
*
* If $date isn't defined it is assumed to be the current date.
*
- * @param int $date optional
+ * @param \DateTime|string $date optional
* @access public
*/
function validateDate($date = null)
@@ -2102,7 +2117,7 @@ class X509
}
if (!isset($date)) {
- $date = new DateTime($date, new DateTimeZone(@date_default_timezone_get()));
+ $date = new DateTime(null, new DateTimeZone(@date_default_timezone_get()));
}
$notBefore = $this->currentCert['tbsCertificate']['validity']['notBefore'];
@@ -2111,9 +2126,16 @@ class X509
$notAfter = $this->currentCert['tbsCertificate']['validity']['notAfter'];
$notAfter = isset($notAfter['generalTime']) ? $notAfter['generalTime'] : $notAfter['utcTime'];
+ if (is_string($date)) {
+ $date = new DateTime($date, new DateTimeZone(@date_default_timezone_get()));
+ }
+
+ $notBefore = new DateTime($notBefore, new DateTimeZone(@date_default_timezone_get()));
+ $notAfter = new DateTime($notAfter, new DateTimeZone(@date_default_timezone_get()));
+
switch (true) {
- case $date < new DateTime($notBefore, new DateTimeZone(@date_default_timezone_get())):
- case $date > new DateTime($notAfter, new DateTimeZone(@date_default_timezone_get())):
+ case $date < $notBefore:
+ case $date > $notAfter:
return false;
}
@@ -2502,17 +2524,37 @@ class X509
}
/**
+ * Decodes an IP address in a name constraints extension
+ *
+ * Takes in a base64 encoded "blob" and returns a human readable IP address / mask
+ *
+ * @param string $ip
+ * @access private
+ * @return array
+ */
+ function _decodeNameConstraintIP($ip)
+ {
+ $ip = base64_decode($ip);
+ $size = strlen($ip) >> 1;
+ $mask = substr($ip, $size);
+ $ip = substr($ip, 0, $size);
+ return array(inet_ntop($ip), inet_ntop($mask));
+ }
+
+ /**
* Encodes an IP address
*
* Takes a human readable IP address into a base64-encoded "blob"
*
- * @param string $ip
+ * @param string|array $ip
* @access private
* @return string
*/
function _encodeIP($ip)
{
- return base64_encode(inet_pton($ip));
+ return is_string($ip) ?
+ base64_encode(inet_pton($ip)) :
+ base64_encode(inet_pton($ip[0]) . inet_pton($ip[1]));
}
/**
@@ -2920,7 +2962,7 @@ class X509
}
$output.= $desc . '=' . $value;
$result[$desc] = isset($result[$desc]) ?
- array_merge((array) $dn[$prop], array($value)) :
+ array_merge((array) $result[$desc], array($value)) :
$value;
$start = false;
}
diff --git a/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php b/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php
index d82d123d8..e7f664670 100644
--- a/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php
+++ b/vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php
@@ -45,7 +45,6 @@
* @author Jim Wigginton <terrafrost@php.net>
* @copyright 2006 Jim Wigginton
* @license http://www.opensource.org/licenses/mit-license.html MIT License
- * @link http://pear.php.net/package/Math_BigInteger
*/
namespace phpseclib\Math;
@@ -446,6 +445,9 @@ class BigInteger
// (?<=^|-)0*: find any 0's that are preceded by the start of the string or by a - (ie. octals)
// [^-0-9].*: find any non-numeric characters and then any characters that follow that
$x = preg_replace('#(?<!^)(?:-).*|(?<=^|-)0*|[^-0-9].*#', '', $x);
+ if (!strlen($x) || $x == '-') {
+ $x = '0';
+ }
switch (MATH_BIGINTEGER_MODE) {
case self::MODE_GMP:
@@ -543,7 +545,7 @@ class BigInteger
$bytes = chr(0);
}
- if (ord($bytes[0]) & 0x80) {
+ if ($this->precision <= 0 && (ord($bytes[0]) & 0x80)) {
$bytes = chr(0) . $bytes;
}
@@ -705,6 +707,7 @@ class BigInteger
}
$temp = $this->copy();
+ $temp->bitmask = false;
$temp->is_negative = false;
$divisor = new static();
@@ -841,7 +844,7 @@ class BigInteger
$opts[] = 'OpenSSL';
}
if (!empty($opts)) {
- $engine.= ' (' . implode($opts, ', ') . ')';
+ $engine.= ' (' . implode('.', $opts) . ')';
}
return array(
'value' => '0x' . $this->toHex(true),
@@ -1559,7 +1562,9 @@ class BigInteger
$temp_value = array($quotient_value[$q_index]);
$temp = $temp->multiply($y);
$temp_value = &$temp->value;
- $temp_value = array_merge($adjust, $temp_value);
+ if (count($temp_value)) {
+ $temp_value = array_merge($adjust, $temp_value);
+ }
$x = $x->subtract($temp);
@@ -2692,7 +2697,14 @@ class BigInteger
{
switch (MATH_BIGINTEGER_MODE) {
case self::MODE_GMP:
- return gmp_cmp($this->value, $y->value);
+ $r = gmp_cmp($this->value, $y->value);
+ if ($r < -1) {
+ $r = -1;
+ }
+ if ($r > 1) {
+ $r = 1;
+ }
+ return $r;
case self::MODE_BCMATH:
return bccomp($this->value, $y->value, 0);
}
@@ -3558,7 +3570,14 @@ class BigInteger
switch (MATH_BIGINTEGER_MODE) {
case self::MODE_GMP:
if ($this->bitmask !== false) {
+ $flip = gmp_cmp($result->value, gmp_init(0)) < 0;
+ if ($flip) {
+ $result->value = gmp_neg($result->value);
+ }
$result->value = gmp_and($result->value, $result->bitmask->value);
+ if ($flip) {
+ $result->value = gmp_neg($result->value);
+ }
}
return $result;
@@ -3573,6 +3592,7 @@ class BigInteger
$value = &$result->value;
if (!count($value)) {
+ $result->is_negative = false;
return $result;
}
diff --git a/vendor/phpseclib/phpseclib/phpseclib/Net/SCP.php b/vendor/phpseclib/phpseclib/phpseclib/Net/SCP.php
index f95bce6df..cf13496cd 100644
--- a/vendor/phpseclib/phpseclib/phpseclib/Net/SCP.php
+++ b/vendor/phpseclib/phpseclib/phpseclib/Net/SCP.php
@@ -144,6 +144,11 @@ class SCP
return false;
}
+ if (empty($remote_file)) {
+ user_error('remote_file cannot be blank', E_USER_NOTICE);
+ return false;
+ }
+
if (!$this->ssh->exec('scp -t ' . escapeshellarg($remote_file), false)) { // -t = to
return false;
}
diff --git a/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php b/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php
index 8825f30cf..074b4f7f3 100644
--- a/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php
+++ b/vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php
@@ -109,11 +109,11 @@ class SFTP extends SSH2
* The request ID exists in the off chance that a packet is sent out-of-order. Of course, this library doesn't support
* concurrent actions, so it's somewhat academic, here.
*
- * @var int
+ * @var boolean
* @see self::_send_sftp_packet()
* @access private
*/
- var $request_id = false;
+ var $use_request_id = false;
/**
* The Packet Type
@@ -251,6 +251,15 @@ class SFTP extends SSH2
var $canonicalize_paths = true;
/**
+ * Request Buffers
+ *
+ * @see self::_get_sftp_packet()
+ * @var array
+ * @access private
+ */
+ var $requestBuffer = array();
+
+ /**
* Default Constructor.
*
* Connects to an SFTP server
@@ -401,6 +410,7 @@ class SFTP extends SSH2
function login($username)
{
$args = func_get_args();
+ $this->auth[] = $args;
if (!call_user_func_array(array(&$this, '_login'), $args)) {
return false;
}
@@ -519,7 +529,7 @@ class SFTP extends SSH2
}
*/
- $this->request_id = 1;
+ $this->use_request_id = true;
/*
A Note on SFTPv4/5/6 support:
@@ -833,6 +843,7 @@ class SFTP extends SSH2
}
if (is_array($this->_query_stat_cache($this->_realpath($dir . '/' . $value)))) {
$temp = $this->_nlist_helper($dir . '/' . $value, true, $relativeDir . $value . '/');
+ $temp = is_array($temp) ? $temp : array();
$result = array_merge($result, $temp);
} else {
$result[] = $relativeDir . $value;
@@ -864,7 +875,17 @@ class SFTP extends SSH2
unset($files[$key]);
continue;
}
- if ($key != '.' && $key != '..' && is_array($this->_query_stat_cache($this->_realpath($dir . '/' . $key)))) {
+ $is_directory = false;
+ if ($key != '.' && $key != '..') {
+ if ($this->use_stat_cache) {
+ $is_directory = is_array($this->_query_stat_cache($this->_realpath($dir . '/' . $key)));
+ } else {
+ $stat = $this->lstat($dir . '/' . $key);
+ $is_directory = $stat && $stat['type'] === NET_SFTP_TYPE_DIRECTORY;
+ }
+ }
+
+ if ($is_directory) {
$depth++;
$files[$key] = $this->rawlist($dir . '/' . $key, true);
$depth--;
@@ -2128,10 +2149,11 @@ class SFTP extends SSH2
* @param string $local_file
* @param int $offset
* @param int $length
+ * @param callable|null $progressCallback
* @return mixed
* @access public
*/
- function get($remote_file, $local_file = false, $offset = 0, $length = -1)
+ function get($remote_file, $local_file = false, $offset = 0, $length = -1, $progressCallback = null)
{
if (!($this->bitmap & SSH2::MASK_LOGIN)) {
return false;
@@ -2189,7 +2211,7 @@ class SFTP extends SSH2
$packet_size = $length > 0 ? min($this->max_sftp_packet, $length - $read) : $this->max_sftp_packet;
$packet = pack('Na*N3', strlen($handle), $handle, $tempoffset / 4294967296, $tempoffset, $packet_size);
- if (!$this->_send_sftp_packet(NET_SFTP_READ, $packet)) {
+ if (!$this->_send_sftp_packet(NET_SFTP_READ, $packet, $i)) {
if ($fclose_check) {
fclose($fp);
}
@@ -2197,6 +2219,9 @@ class SFTP extends SSH2
}
$packet = null;
$read+= $packet_size;
+ if (is_callable($progressCallback)) {
+ call_user_func($progressCallback, $read);
+ }
$i++;
}
@@ -2204,15 +2229,17 @@ class SFTP extends SSH2
break;
}
+ $packets_sent = $i - 1;
+
$clear_responses = false;
while ($i > 0) {
$i--;
if ($clear_responses) {
- $this->_get_sftp_packet();
+ $this->_get_sftp_packet($packets_sent - $i);
continue;
} else {
- $response = $this->_get_sftp_packet();
+ $response = $this->_get_sftp_packet($packets_sent - $i);
}
switch ($this->packet_type) {
@@ -2921,10 +2948,10 @@ class SFTP extends SSH2
* @return bool
* @access private
*/
- function _send_sftp_packet($type, $data)
+ function _send_sftp_packet($type, $data, $request_id = 1)
{
- $packet = $this->request_id !== false ?
- pack('NCNa*', strlen($data) + 5, $type, $this->request_id, $data) :
+ $packet = $this->use_request_id ?
+ pack('NCNa*', strlen($data) + 5, $type, $request_id, $data) :
pack('NCa*', strlen($data) + 1, $type, $data);
$start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
@@ -2950,6 +2977,20 @@ class SFTP extends SSH2
}
/**
+ * Resets a connection for re-use
+ *
+ * @param int $reason
+ * @access private
+ */
+ function _reset_connection($reason)
+ {
+ parent::_reset_connection($reason);
+ $this->use_request_id = false;
+ $this->pwd = false;
+ $this->requestBuffer = array();
+ }
+
+ /**
* Receives SFTP Packets
*
* See '6. General Packet Format' of draft-ietf-secsh-filexfer-13 for more info.
@@ -2962,9 +3003,18 @@ class SFTP extends SSH2
* @return string
* @access private
*/
- function _get_sftp_packet()
+ function _get_sftp_packet($request_id = null)
{
- $this->curTimeout = false;
+ if (isset($request_id) && isset($this->requestBuffer[$request_id])) {
+ $this->packet_type = $this->requestBuffer[$request_id]['packet_type'];
+ $temp = $this->requestBuffer[$request_id]['packet'];
+ unset($this->requestBuffer[$request_id]);
+ return $temp;
+ }
+
+ // in SSH2.php the timeout is cumulative per function call. eg. exec() will
+ // timeout after 10s. but for SFTP.php it's cumulative per packet
+ $this->curTimeout = $this->timeout;
$start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
@@ -2985,6 +3035,13 @@ class SFTP extends SSH2
$tempLength = $length;
$tempLength-= strlen($this->packet_buffer);
+
+ // 256 * 1024 is what SFTP_MAX_MSG_LENGTH is set to in OpenSSH's sftp-common.h
+ if ($tempLength > 256 * 1024) {
+ user_error('Invalid SFTP packet size');
+ return false;
+ }
+
// SFTP packet type and data payload
while ($tempLength > 0) {
$temp = $this->_get_channel_packet(self::CHANNEL, true);
@@ -3001,8 +3058,8 @@ class SFTP extends SSH2
$this->packet_type = ord($this->_string_shift($this->packet_buffer));
- if ($this->request_id !== false) {
- $this->_string_shift($this->packet_buffer, 4); // remove the request id
+ if ($this->use_request_id) {
+ extract(unpack('Npacket_id', $this->_string_shift($this->packet_buffer, 4))); // remove the request id
$length-= 5; // account for the request id and the packet type
} else {
$length-= 1; // account for the packet type
@@ -3025,6 +3082,14 @@ class SFTP extends SSH2
}
}
+ if (isset($request_id) && $this->use_request_id && $packet_id != $request_id) {
+ $this->requestBuffer[$packet_id] = array(
+ 'packet_type' => $this->packet_type,
+ 'packet' => $packet
+ );
+ return $this->_get_sftp_packet($request_id);
+ }
+
return $packet;
}
diff --git a/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php b/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php
index cdb7cb39e..1c634f17c 100644
--- a/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php
+++ b/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php
@@ -104,6 +104,7 @@ class SSH2
const CHANNEL_SHELL = 2;
const CHANNEL_SUBSYSTEM = 3;
const CHANNEL_AGENT_FORWARD = 4;
+ const CHANNEL_KEEP_ALIVE = 5;
/**#@-*/
/**#@+
@@ -145,7 +146,10 @@ class SSH2
*/
const READ_REGEX = 2;
/**
- * Returns when a string matching the regular expression $expect is found
+ * Returns whenever a data packet is received.
+ *
+ * Some data packets may only contain a single character so it may be necessary
+ * to call read() multiple times when using this option
*/
const READ_NEXT = 3;
/**#@-*/
@@ -206,6 +210,15 @@ class SSH2
var $kex_algorithms = false;
/**
+ * Key Exchange Algorithm
+ *
+ * @see self::getMethodsNegotiated()
+ * @var string|false
+ * @access private
+ */
+ var $kex_algorithm = false;
+
+ /**
* Minimum Diffie-Hellman Group Bit Size in RFC 4419 Key Exchange Methods
*
* @see self::_key_exchange()
@@ -314,6 +327,15 @@ class SSH2
var $languages_client_to_server = false;
/**
+ * Preferred Algorithms
+ *
+ * @see self::setPreferredAlgorithms()
+ * @var array
+ * @access private
+ */
+ var $preferred = array();
+
+ /**
* Block Size for Server to Client Encryption
*
* "Note that the length of the concatenation of 'packet_length',
@@ -895,14 +917,6 @@ class SSH2
var $bad_key_size_fix = false;
/**
- * The selected decryption algorithm
- *
- * @var string
- * @access private
- */
- var $decrypt_algorithm = '';
-
- /**
* Should we try to re-connect to re-establish keys?
*
* @var bool
@@ -919,6 +933,22 @@ class SSH2
var $binary_packet_buffer = false;
/**
+ * Preferred Signature Format
+ *
+ * @var string|false
+ * @access private
+ */
+ var $preferred_signature_format = false;
+
+ /**
+ * Authentication Credentials
+ *
+ * @var array
+ * @access private
+ */
+ var $auth = array();
+
+ /**
* Default Constructor.
*
* $host can either be a string, representing the host, or a stream resource.
@@ -1124,11 +1154,12 @@ class SSH2
}
$elapsed = microtime(true) - $start;
- $this->curTimeout-= $elapsed;
-
- if ($this->curTimeout <= 0) {
- $this->is_timeout = true;
- return false;
+ if ($this->curTimeout) {
+ $this->curTimeout-= $elapsed;
+ if ($this->curTimeout < 0) {
+ $this->is_timeout = true;
+ return false;
+ }
}
}
@@ -1193,6 +1224,7 @@ class SSH2
}
if (feof($this->fsock)) {
+ $this->bitmap = 0;
user_error('Connection closed by server');
return false;
}
@@ -1206,7 +1238,7 @@ class SSH2
$this->server_identifier = trim($temp, "\r\n");
if (strlen($extra)) {
- $this->errors[] = utf8_decode($data);
+ $this->errors[] = $data;
}
if (version_compare($matches[3], '1.99', '<')) {
@@ -1221,6 +1253,7 @@ class SSH2
if (!$this->send_kex_first) {
$response = $this->_get_binary_packet();
if ($response === false) {
+ $this->bitmap = 0;
user_error('Connection closed by server');
return false;
}
@@ -1257,7 +1290,7 @@ class SSH2
$identifier = 'SSH-2.0-phpseclib_2.0';
$ext = array();
- if (function_exists('\\Sodium\\library_version_major')) {
+ if (function_exists('sodium_crypto_box_publickey_from_secretkey')) {
$ext[] = 'libsodium';
}
@@ -1288,139 +1321,59 @@ class SSH2
*/
function _key_exchange($kexinit_payload_server = false)
{
- $kex_algorithms = array(
- // Elliptic Curve Diffie-Hellman Key Agreement (ECDH) using
- // Curve25519. See doc/curve25519-sha256@libssh.org.txt in the
- // libssh repository for more information.
- 'curve25519-sha256@libssh.org',
-
- // Diffie-Hellman Key Agreement (DH) using integer modulo prime
- // groups.
- 'diffie-hellman-group1-sha1', // REQUIRED
- 'diffie-hellman-group14-sha1', // REQUIRED
- 'diffie-hellman-group-exchange-sha1', // RFC 4419
- 'diffie-hellman-group-exchange-sha256', // RFC 4419
- );
- if (!function_exists('\\Sodium\\library_version_major')) {
- $kex_algorithms = array_diff(
- $kex_algorithms,
- array('curve25519-sha256@libssh.org')
- );
- }
-
- $server_host_key_algorithms = array(
- 'ssh-rsa', // RECOMMENDED sign Raw RSA Key
- 'ssh-dss' // REQUIRED sign Raw DSS Key
- );
-
- $encryption_algorithms = array(
- // from <http://tools.ietf.org/html/rfc4345#section-4>:
- 'arcfour256',
- 'arcfour128',
-
- //'arcfour', // OPTIONAL the ARCFOUR stream cipher with a 128-bit key
-
- // CTR modes from <http://tools.ietf.org/html/rfc4344#section-4>:
- 'aes128-ctr', // RECOMMENDED AES (Rijndael) in SDCTR mode, with 128-bit key
- 'aes192-ctr', // RECOMMENDED AES with 192-bit key
- 'aes256-ctr', // RECOMMENDED AES with 256-bit key
-
- 'twofish128-ctr', // OPTIONAL Twofish in SDCTR mode, with 128-bit key
- 'twofish192-ctr', // OPTIONAL Twofish with 192-bit key
- 'twofish256-ctr', // OPTIONAL Twofish with 256-bit key
-
- 'aes128-cbc', // RECOMMENDED AES with a 128-bit key
- 'aes192-cbc', // OPTIONAL AES with a 192-bit key
- 'aes256-cbc', // OPTIONAL AES in CBC mode, with a 256-bit key
-
- 'twofish128-cbc', // OPTIONAL Twofish with a 128-bit key
- 'twofish192-cbc', // OPTIONAL Twofish with a 192-bit key
- 'twofish256-cbc',
- 'twofish-cbc', // OPTIONAL alias for "twofish256-cbc"
- // (this is being retained for historical reasons)
-
- 'blowfish-ctr', // OPTIONAL Blowfish in SDCTR mode
-
- 'blowfish-cbc', // OPTIONAL Blowfish in CBC mode
-
- '3des-ctr', // RECOMMENDED Three-key 3DES in SDCTR mode
-
- '3des-cbc', // REQUIRED three-key 3DES in CBC mode
- //'none' // OPTIONAL no encryption; NOT RECOMMENDED
- );
-
- if (extension_loaded('openssl') && !extension_loaded('mcrypt')) {
- // OpenSSL does not support arcfour256 in any capacity and arcfour128 / arcfour support is limited to
- // instances that do not use continuous buffers
- $encryption_algorithms = array_diff(
- $encryption_algorithms,
- array('arcfour256', 'arcfour128', 'arcfour')
- );
- }
-
- if (class_exists('\phpseclib\Crypt\RC4') === false) {
- $encryption_algorithms = array_diff(
- $encryption_algorithms,
- array('arcfour256', 'arcfour128', 'arcfour')
- );
- }
- if (class_exists('\phpseclib\Crypt\Rijndael') === false) {
- $encryption_algorithms = array_diff(
- $encryption_algorithms,
- array('aes128-ctr', 'aes192-ctr', 'aes256-ctr', 'aes128-cbc', 'aes192-cbc', 'aes256-cbc')
- );
- }
- if (class_exists('\phpseclib\Crypt\Twofish') === false) {
- $encryption_algorithms = array_diff(
- $encryption_algorithms,
- array('twofish128-ctr', 'twofish192-ctr', 'twofish256-ctr', 'twofish128-cbc', 'twofish192-cbc', 'twofish256-cbc', 'twofish-cbc')
- );
- }
- if (class_exists('\phpseclib\Crypt\Blowfish') === false) {
- $encryption_algorithms = array_diff(
- $encryption_algorithms,
- array('blowfish-ctr', 'blowfish-cbc')
- );
- }
- if (class_exists('\phpseclib\Crypt\TripleDES') === false) {
- $encryption_algorithms = array_diff(
- $encryption_algorithms,
- array('3des-ctr', '3des-cbc')
- );
- }
- $encryption_algorithms = array_values($encryption_algorithms);
-
- $mac_algorithms = array(
- // from <http://www.ietf.org/rfc/rfc6668.txt>:
- 'hmac-sha2-256',// RECOMMENDED HMAC-SHA256 (digest length = key length = 32)
-
- 'hmac-sha1-96', // RECOMMENDED first 96 bits of HMAC-SHA1 (digest length = 12, key length = 20)
- 'hmac-sha1', // REQUIRED HMAC-SHA1 (digest length = key length = 20)
- 'hmac-md5-96', // OPTIONAL first 96 bits of HMAC-MD5 (digest length = 12, key length = 16)
- 'hmac-md5', // OPTIONAL HMAC-MD5 (digest length = key length = 16)
- //'none' // OPTIONAL no MAC; NOT RECOMMENDED
- );
-
- $compression_algorithms = array(
- 'none' // REQUIRED no compression
- //'zlib' // OPTIONAL ZLIB (LZ77) compression
- );
+ $preferred = $this->preferred;
+
+ $kex_algorithms = isset($preferred['kex']) ?
+ $preferred['kex'] :
+ $this->getSupportedKEXAlgorithms();
+ $server_host_key_algorithms = isset($preferred['hostkey']) ?
+ $preferred['hostkey'] :
+ $this->getSupportedHostKeyAlgorithms();
+ $s2c_encryption_algorithms = isset($preferred['server_to_client']['crypt']) ?
+ $preferred['server_to_client']['crypt'] :
+ $this->getSupportedEncryptionAlgorithms();
+ $c2s_encryption_algorithms = isset($preferred['client_to_server']['crypt']) ?
+ $preferred['client_to_server']['crypt'] :
+ $this->getSupportedEncryptionAlgorithms();
+ $s2c_mac_algorithms = isset($preferred['server_to_client']['mac']) ?
+ $preferred['server_to_client']['mac'] :
+ $this->getSupportedMACAlgorithms();
+ $c2s_mac_algorithms = isset($preferred['client_to_server']['mac']) ?
+ $preferred['client_to_server']['mac'] :
+ $this->getSupportedMACAlgorithms();
+ $s2c_compression_algorithms = isset($preferred['server_to_client']['comp']) ?
+ $preferred['server_to_client']['comp'] :
+ $this->getSupportedCompressionAlgorithms();
+ $c2s_compression_algorithms = isset($preferred['client_to_server']['comp']) ?
+ $preferred['client_to_server']['comp'] :
+ $this->getSupportedCompressionAlgorithms();
// some SSH servers have buggy implementations of some of the above algorithms
switch (true) {
case $this->server_identifier == 'SSH-2.0-SSHD':
case substr($this->server_identifier, 0, 13) == 'SSH-2.0-DLINK':
- $mac_algorithms = array_values(array_diff(
- $mac_algorithms,
- array('hmac-sha1-96', 'hmac-md5-96')
- ));
+ if (!isset($preferred['server_to_client']['mac'])) {
+ $s2c_mac_algorithms = array_values(array_diff(
+ $s2c_mac_algorithms,
+ array('hmac-sha1-96', 'hmac-md5-96')
+ ));
+ }
+ if (!isset($preferred['client_to_server']['mac'])) {
+ $c2s_mac_algorithms = array_values(array_diff(
+ $c2s_mac_algorithms,
+ array('hmac-sha1-96', 'hmac-md5-96')
+ ));
+ }
}
$str_kex_algorithms = implode(',', $kex_algorithms);
$str_server_host_key_algorithms = implode(',', $server_host_key_algorithms);
- $encryption_algorithms_server_to_client = $encryption_algorithms_client_to_server = implode(',', $encryption_algorithms);
- $mac_algorithms_server_to_client = $mac_algorithms_client_to_server = implode(',', $mac_algorithms);
- $compression_algorithms_server_to_client = $compression_algorithms_client_to_server = implode(',', $compression_algorithms);
+ $encryption_algorithms_server_to_client = implode(',', $s2c_encryption_algorithms);
+ $encryption_algorithms_client_to_server = implode(',', $c2s_encryption_algorithms);
+ $mac_algorithms_server_to_client = implode(',', $s2c_mac_algorithms);
+ $mac_algorithms_client_to_server = implode(',', $c2s_mac_algorithms);
+ $compression_algorithms_server_to_client = implode(',', $s2c_compression_algorithms);
+ $compression_algorithms_client_to_server = implode(',', $c2s_compression_algorithms);
$client_cookie = Random::string(16);
@@ -1459,6 +1412,7 @@ class SSH2
$kexinit_payload_server = $this->_get_binary_packet();
if ($kexinit_payload_server === false) {
+ $this->bitmap = 0;
user_error('Connection closed by server');
return false;
}
@@ -1546,14 +1500,14 @@ class SSH2
// we need to decide upon the symmetric encryption algorithms before we do the diffie-hellman key exchange
// we don't initialize any crypto-objects, yet - we do that, later. for now, we need the lengths to make the
// diffie-hellman key exchange as fast as possible
- $decrypt = $this->_array_intersect_first($encryption_algorithms, $this->encryption_algorithms_server_to_client);
+ $decrypt = $this->_array_intersect_first($s2c_encryption_algorithms, $this->encryption_algorithms_server_to_client);
$decryptKeyLength = $this->_encryption_algorithm_to_key_size($decrypt);
if ($decryptKeyLength === null) {
user_error('No compatible server to client encryption algorithms found');
return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
}
- $encrypt = $this->_array_intersect_first($encryption_algorithms, $this->encryption_algorithms_client_to_server);
+ $encrypt = $this->_array_intersect_first($c2s_encryption_algorithms, $this->encryption_algorithms_client_to_server);
$encryptKeyLength = $this->_encryption_algorithm_to_key_size($encrypt);
if ($encryptKeyLength === null) {
user_error('No compatible client to server encryption algorithms found');
@@ -1561,7 +1515,7 @@ class SSH2
}
// through diffie-hellman key exchange a symmetric key is obtained
- $kex_algorithm = $this->_array_intersect_first($kex_algorithms, $this->kex_algorithms);
+ $this->kex_algorithm = $kex_algorithm = $this->_array_intersect_first($kex_algorithms, $this->kex_algorithms);
if ($kex_algorithm === false) {
user_error('No compatible key exchange algorithms found');
return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
@@ -1572,7 +1526,7 @@ class SSH2
if ($kex_algorithm === 'curve25519-sha256@libssh.org') {
$x = Random::string(32);
- $eBytes = \Sodium\crypto_box_publickey_from_secretkey($x);
+ $eBytes = sodium_crypto_box_publickey_from_secretkey($x);
$clientKexInitMessage = NET_SSH2_MSG_KEX_ECDH_INIT;
$serverKexReplyMessage = NET_SSH2_MSG_KEX_ECDH_REPLY;
$kexHash = new Hash('sha256');
@@ -1595,6 +1549,7 @@ class SSH2
$response = $this->_get_binary_packet();
if ($response === false) {
+ $this->bitmap = 0;
user_error('Connection closed by server');
return false;
}
@@ -1687,12 +1642,14 @@ class SSH2
$data = pack('CNa*', $clientKexInitMessage, strlen($eBytes), $eBytes);
if (!$this->_send_binary_packet($data)) {
+ $this->bitmap = 0;
user_error('Connection closed by server');
return false;
}
$response = $this->_get_binary_packet();
if ($response === false) {
+ $this->bitmap = 0;
user_error('Connection closed by server');
return false;
}
@@ -1741,8 +1698,8 @@ class SSH2
user_error('Received curve25519 public key of invalid length.');
return false;
}
- $key = new BigInteger(\Sodium\crypto_scalarmult($x, $fBytes), 256);
- \Sodium\memzero($x);
+ $key = new BigInteger(sodium_crypto_scalarmult($x, $fBytes), 256);
+ sodium_memzero($x);
} else {
$f = new BigInteger($fBytes, -256);
$key = $f->modPow($x, $prime);
@@ -1782,9 +1739,25 @@ class SSH2
return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
}
- if ($public_key_format != $server_host_key_algorithm || $this->signature_format != $server_host_key_algorithm) {
- user_error('Server Host Key Algorithm Mismatch');
- return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+ switch ($server_host_key_algorithm) {
+ case 'ssh-dss':
+ $expected_key_format = 'ssh-dss';
+ break;
+ //case 'rsa-sha2-256':
+ //case 'rsa-sha2-512':
+ //case 'ssh-rsa':
+ default:
+ $expected_key_format = 'ssh-rsa';
+ }
+
+ if ($public_key_format != $expected_key_format || $this->signature_format != $server_host_key_algorithm) {
+ switch (true) {
+ case $this->signature_format == $server_host_key_algorithm:
+ case $server_host_key_algorithm != 'rsa-sha2-256' && $server_host_key_algorithm != 'rsa-sha2-512':
+ case $this->signature_format != 'ssh-rsa':
+ user_error('Server Host Key Algorithm Mismatch');
+ return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+ }
}
$packet = pack(
@@ -1799,6 +1772,7 @@ class SSH2
$response = $this->_get_binary_packet();
if ($response === false) {
+ $this->bitmap = 0;
user_error('Connection closed by server');
return false;
}
@@ -1813,14 +1787,12 @@ class SSH2
return false;
}
- $this->decrypt_algorithm = $decrypt;
-
$keyBytes = pack('Na*', strlen($keyBytes), $keyBytes);
$this->encrypt = $this->_encryption_algorithm_to_crypt_instance($encrypt);
if ($this->encrypt) {
if ($this->crypto_engine) {
- $this->encrypt->setEngine($this->crypto_engine);
+ $this->encrypt->setPreferredEngine($this->crypto_engine);
}
if ($this->encrypt->block_size) {
$this->encrypt_block_size = $this->encrypt->block_size;
@@ -1828,6 +1800,10 @@ class SSH2
$this->encrypt->enableContinuousBuffer();
$this->encrypt->disablePadding();
+ if ($this->encrypt->getBlockLength()) {
+ $this->encrypt_block_size = $this->encrypt->getBlockLength() >> 3;
+ }
+
$iv = $kexHash->hash($keyBytes . $this->exchange_hash . 'A' . $this->session_id);
while ($this->encrypt_block_size > strlen($iv)) {
$iv.= $kexHash->hash($keyBytes . $this->exchange_hash . $iv);
@@ -1839,12 +1815,14 @@ class SSH2
$key.= $kexHash->hash($keyBytes . $this->exchange_hash . $key);
}
$this->encrypt->setKey(substr($key, 0, $encryptKeyLength));
+
+ $this->encrypt->name = $decrypt;
}
$this->decrypt = $this->_encryption_algorithm_to_crypt_instance($decrypt);
if ($this->decrypt) {
if ($this->crypto_engine) {
- $this->decrypt->setEngine($this->crypto_engine);
+ $this->decrypt->setPreferredEngine($this->crypto_engine);
}
if ($this->decrypt->block_size) {
$this->decrypt_block_size = $this->decrypt->block_size;
@@ -1852,6 +1830,10 @@ class SSH2
$this->decrypt->enableContinuousBuffer();
$this->decrypt->disablePadding();
+ if ($this->decrypt->getBlockLength()) {
+ $this->decrypt_block_size = $this->decrypt->getBlockLength() >> 3;
+ }
+
$iv = $kexHash->hash($keyBytes . $this->exchange_hash . 'B' . $this->session_id);
while ($this->decrypt_block_size > strlen($iv)) {
$iv.= $kexHash->hash($keyBytes . $this->exchange_hash . $iv);
@@ -1863,6 +1845,8 @@ class SSH2
$key.= $kexHash->hash($keyBytes . $this->exchange_hash . $key);
}
$this->decrypt->setKey(substr($key, 0, $decryptKeyLength));
+
+ $this->decrypt->name = $decrypt;
}
/* The "arcfour128" algorithm is the RC4 cipher, as described in
@@ -1879,7 +1863,7 @@ class SSH2
$this->decrypt->decrypt(str_repeat("\0", 1536));
}
- $mac_algorithm = $this->_array_intersect_first($mac_algorithms, $this->mac_algorithms_client_to_server);
+ $mac_algorithm = $this->_array_intersect_first($c2s_mac_algorithms, $this->mac_algorithms_client_to_server);
if ($mac_algorithm === false) {
user_error('No compatible client to server message authentication algorithms found');
return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
@@ -1907,8 +1891,9 @@ class SSH2
$this->hmac_create = new Hash('md5-96');
$createKeyLength = 16;
}
+ $this->hmac_create->name = $mac_algorithm;
- $mac_algorithm = $this->_array_intersect_first($mac_algorithms, $this->mac_algorithms_server_to_client);
+ $mac_algorithm = $this->_array_intersect_first($s2c_mac_algorithms, $this->mac_algorithms_server_to_client);
if ($mac_algorithm === false) {
user_error('No compatible server to client message authentication algorithms found');
return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
@@ -1942,6 +1927,7 @@ class SSH2
$checkKeyLength = 16;
$this->hmac_size = 12;
}
+ $this->hmac_check->name = $mac_algorithm;
$key = $kexHash->hash($keyBytes . $this->exchange_hash . 'E' . $this->session_id);
while ($createKeyLength > strlen($key)) {
@@ -1955,19 +1941,19 @@ class SSH2
}
$this->hmac_check->setKey(substr($key, 0, $checkKeyLength));
- $compression_algorithm = $this->_array_intersect_first($compression_algorithms, $this->compression_algorithms_server_to_client);
+ $compression_algorithm = $this->_array_intersect_first($c2s_compression_algorithms, $this->compression_algorithms_client_to_server);
if ($compression_algorithm === false) {
- user_error('No compatible server to client compression algorithms found');
+ user_error('No compatible client to server compression algorithms found');
return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
}
- $this->decompress = $compression_algorithm == 'zlib';
+ //$this->decompress = $compression_algorithm == 'zlib';
- $compression_algorithm = $this->_array_intersect_first($compression_algorithms, $this->compression_algorithms_client_to_server);
+ $compression_algorithm = $this->_array_intersect_first($s2c_compression_algorithms, $this->compression_algorithms_client_to_server);
if ($compression_algorithm === false) {
- user_error('No compatible client to server compression algorithms found');
+ user_error('No compatible server to client compression algorithms found');
return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
}
- $this->compress = $compression_algorithm == 'zlib';
+ //$this->compress = $compression_algorithm == 'zlib';
return true;
}
@@ -2059,7 +2045,7 @@ class SSH2
return null;
}
- /*
+ /**
* Tests whether or not proposed algorithm has a potential for issues
*
* @link https://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/ssh2-aesctr-openssh.html
@@ -2095,6 +2081,7 @@ class SSH2
function login($username)
{
$args = func_get_args();
+ $this->auth[] = $args;
return call_user_func_array(array(&$this, '_login'), $args);
}
@@ -2166,6 +2153,7 @@ class SSH2
}
return $this->_login_helper($username, $password);
}
+ $this->bitmap = 0;
user_error('Connection closed by server');
return false;
}
@@ -2218,6 +2206,7 @@ class SSH2
$response = $this->_get_binary_packet();
if ($response === false) {
+ $this->bitmap = 0;
user_error('Connection closed by server');
return false;
}
@@ -2276,6 +2265,7 @@ class SSH2
$response = $this->_get_binary_packet();
if ($response === false) {
+ $this->bitmap = 0;
user_error('Connection closed by server');
return false;
}
@@ -2294,7 +2284,7 @@ class SSH2
return false;
}
extract(unpack('Nlength', $this->_string_shift($response, 4)));
- $this->errors[] = 'SSH_MSG_USERAUTH_PASSWD_CHANGEREQ: ' . utf8_decode($this->_string_shift($response, $length));
+ $this->errors[] = 'SSH_MSG_USERAUTH_PASSWD_CHANGEREQ: ' . $this->_string_shift($response, $length);
return $this->_disconnect(NET_SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER);
case NET_SSH2_MSG_USERAUTH_FAILURE:
// can we use keyboard-interactive authentication? if not then either the login is bad or the server employees
@@ -2376,6 +2366,7 @@ class SSH2
} else {
$orig = $response = $this->_get_binary_packet();
if ($response === false) {
+ $this->bitmap = 0;
user_error('Connection closed by server');
return false;
}
@@ -2545,6 +2536,21 @@ class SSH2
$publickey['n']
);
+ switch ($this->signature_format) {
+ case 'rsa-sha2-512':
+ $hash = 'sha512';
+ $signatureType = 'rsa-sha2-512';
+ break;
+ case 'rsa-sha2-256':
+ $hash = 'sha256';
+ $signatureType = 'rsa-sha2-256';
+ break;
+ //case 'ssh-rsa':
+ default:
+ $hash = 'sha1';
+ $signatureType = 'ssh-rsa';
+ }
+
$part1 = pack(
'CNa*Na*Na*',
NET_SSH2_MSG_USERAUTH_REQUEST,
@@ -2555,7 +2561,7 @@ class SSH2
strlen('publickey'),
'publickey'
);
- $part2 = pack('Na*Na*', strlen('ssh-rsa'), 'ssh-rsa', strlen($publickey), $publickey);
+ $part2 = pack('Na*Na*', strlen($signatureType), $signatureType, strlen($publickey), $publickey);
$packet = $part1 . chr(0) . $part2;
if (!$this->_send_binary_packet($packet)) {
@@ -2564,6 +2570,7 @@ class SSH2
$response = $this->_get_binary_packet();
if ($response === false) {
+ $this->bitmap = 0;
user_error('Connection closed by server');
return false;
}
@@ -2595,8 +2602,9 @@ class SSH2
$packet = $part1 . chr(1) . $part2;
$privatekey->setSignatureMode(RSA::SIGNATURE_PKCS1);
+ $privatekey->setHash($hash);
$signature = $privatekey->sign(pack('Na*a*', strlen($this->session_id), $this->session_id, $packet));
- $signature = pack('Na*Na*', strlen('ssh-rsa'), 'ssh-rsa', strlen($signature), $signature);
+ $signature = pack('Na*Na*', strlen($signatureType), $signatureType, strlen($signature), $signature);
$packet.= pack('Na*', strlen($signature), $signature);
if (!$this->_send_binary_packet($packet)) {
@@ -2605,6 +2613,7 @@ class SSH2
$response = $this->_get_binary_packet();
if ($response === false) {
+ $this->bitmap = 0;
user_error('Connection closed by server');
return false;
}
@@ -2731,6 +2740,7 @@ class SSH2
$response = $this->_get_binary_packet();
if ($response === false) {
+ $this->bitmap = 0;
user_error('Connection closed by server');
return false;
}
@@ -2870,6 +2880,7 @@ class SSH2
$response = $this->_get_binary_packet();
if ($response === false) {
+ $this->bitmap = 0;
user_error('Connection closed by server');
return false;
}
@@ -3185,6 +3196,69 @@ class SSH2
}
/**
+ * Pings a server connection, or tries to reconnect if the connection has gone down
+ *
+ * Inspired by http://php.net/manual/en/mysqli.ping.php
+ *
+ * @return bool
+ * @access public
+ */
+ function ping()
+ {
+ if (!$this->isAuthenticated()) {
+ if (!empty($this->auth)) {
+ return $this->_reconnect();
+ }
+ return false;
+ }
+
+ $this->window_size_server_to_client[self::CHANNEL_KEEP_ALIVE] = $this->window_size;
+ $packet_size = 0x4000;
+ $packet = pack(
+ 'CNa*N3',
+ NET_SSH2_MSG_CHANNEL_OPEN,
+ strlen('session'),
+ 'session',
+ self::CHANNEL_KEEP_ALIVE,
+ $this->window_size_server_to_client[self::CHANNEL_KEEP_ALIVE],
+ $packet_size
+ );
+
+ if (!@$this->_send_binary_packet($packet)) {
+ return $this->_reconnect();
+ }
+
+ $this->channel_status[self::CHANNEL_KEEP_ALIVE] = NET_SSH2_MSG_CHANNEL_OPEN;
+
+ $response = @$this->_get_channel_packet(self::CHANNEL_KEEP_ALIVE);
+ if ($response !== false) {
+ $this->_close_channel(self::CHANNEL_KEEP_ALIVE);
+ return true;
+ }
+
+ return $this->_reconnect();
+ }
+
+ /**
+ * In situ reconnect method
+ *
+ * @return boolean
+ * @access private
+ */
+ function _reconnect()
+ {
+ $this->_reset_connection(NET_SSH2_DISCONNECT_CONNECTION_LOST);
+ $this->retry_connect = true;
+ if (!$this->_connect()) {
+ return false;
+ }
+ foreach ($this->auth as $auth) {
+ $result = call_user_func_array(array(&$this, 'login'), $auth);
+ }
+ return $result;
+ }
+
+ /**
* Resets a connection for re-use
*
* @param int $reason
@@ -3214,8 +3288,8 @@ class SSH2
function _get_binary_packet($skip_channel_filter = false)
{
if (!is_resource($this->fsock) || feof($this->fsock)) {
- user_error('Connection closed prematurely');
$this->bitmap = 0;
+ user_error('Connection closed prematurely');
return false;
}
@@ -3245,7 +3319,7 @@ class SSH2
// "implementations SHOULD check that the packet length is reasonable"
// PuTTY uses 0x9000 as the actual max packet size and so to shall we
if ($remaining_length < -$this->decrypt_block_size || $remaining_length > 0x9000 || $remaining_length % $this->decrypt_block_size != 0) {
- if (!$this->bad_key_size_fix && $this->_bad_algorithm_candidate($this->decrypt_algorithm) && !($this->bitmap & SSH2::MASK_LOGIN)) {
+ if (!$this->bad_key_size_fix && $this->_bad_algorithm_candidate($this->decrypt->name) && !($this->bitmap & SSH2::MASK_LOGIN)) {
$this->bad_key_size_fix = true;
$this->_reset_connection(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
return false;
@@ -3258,8 +3332,8 @@ class SSH2
while ($remaining_length > 0) {
$temp = stream_get_contents($this->fsock, $remaining_length);
if ($temp === false || feof($this->fsock)) {
- user_error('Error reading from socket');
$this->bitmap = 0;
+ user_error('Error reading from socket');
return false;
}
$buffer.= $temp;
@@ -3277,8 +3351,8 @@ class SSH2
if ($this->hmac_check !== false) {
$hmac = stream_get_contents($this->fsock, $this->hmac_size);
if ($hmac === false || strlen($hmac) != $this->hmac_size) {
- user_error('Error reading socket');
$this->bitmap = 0;
+ user_error('Error reading socket');
return false;
} elseif ($hmac != $this->hmac_check->hash(pack('NNCa*', $this->get_seq_no, $packet_length, $padding_length, $payload . $padding))) {
user_error('Invalid HMAC');
@@ -3322,7 +3396,7 @@ class SSH2
return false;
}
extract(unpack('Nreason_code/Nlength', $this->_string_shift($payload, 8)));
- $this->errors[] = 'SSH_MSG_DISCONNECT: ' . $this->disconnect_reasons[$reason_code] . "\r\n" . utf8_decode($this->_string_shift($payload, $length));
+ $this->errors[] = 'SSH_MSG_DISCONNECT: ' . $this->disconnect_reasons[$reason_code] . "\r\n" . $this->_string_shift($payload, $length);
$this->bitmap = 0;
return false;
case NET_SSH2_MSG_IGNORE:
@@ -3334,7 +3408,7 @@ class SSH2
return false;
}
extract(unpack('Nlength', $this->_string_shift($payload, 4)));
- $this->errors[] = 'SSH_MSG_DEBUG: ' . utf8_decode($this->_string_shift($payload, $length));
+ $this->errors[] = 'SSH_MSG_DEBUG: ' . $this->_string_shift($payload, $length);
$payload = $this->_get_binary_packet($skip_channel_filter);
break;
case NET_SSH2_MSG_UNIMPLEMENTED:
@@ -3357,7 +3431,7 @@ class SSH2
return false;
}
extract(unpack('Nlength', $this->_string_shift($payload, 4)));
- $this->banner_message = utf8_decode($this->_string_shift($payload, $length));
+ $this->banner_message = $this->_string_shift($payload, $length);
$payload = $this->_get_binary_packet();
}
@@ -3561,7 +3635,12 @@ class SSH2
$response = $this->binary_packet_buffer;
$this->binary_packet_buffer = false;
} else {
- if ($this->curTimeout) {
+ $read = array($this->fsock);
+ $write = $except = null;
+
+ if (!$this->curTimeout) {
+ @stream_select($read, $write, $except, null);
+ } else {
if ($this->curTimeout < 0) {
$this->is_timeout = true;
return true;
@@ -3576,6 +3655,9 @@ class SSH2
// on windows this returns a "Warning: Invalid CRT parameters detected" error
if (!@stream_select($read, $write, $except, $sec, $usec) && !count($read)) {
$this->is_timeout = true;
+ if ($client_channel == self::CHANNEL_EXEC && !$this->request_pty) {
+ $this->_close_channel($client_channel);
+ }
return true;
}
$elapsed = microtime(true) - $start;
@@ -3584,6 +3666,7 @@ class SSH2
$response = $this->_get_binary_packet(true);
if ($response === false) {
+ $this->bitmap = 0;
user_error('Connection closed by server');
return false;
}
@@ -3593,10 +3676,6 @@ class SSH2
return true;
}
if (!strlen($response)) {
- return '';
- }
-
- if (!strlen($response)) {
return false;
}
extract(unpack('Ctype', $this->_string_shift($response, 1)));
@@ -3626,7 +3705,7 @@ class SSH2
switch ($type) {
case NET_SSH2_MSG_CHANNEL_EXTENDED_DATA:
/*
- if ($client_channel == NET_SSH2_CHANNEL_EXEC) {
+ if ($client_channel == self::CHANNEL_EXEC) {
$this->_send_channel_packet($client_channel, chr(0));
}
*/
@@ -3818,8 +3897,8 @@ class SSH2
function _send_binary_packet($data, $logged = null)
{
if (!is_resource($this->fsock) || feof($this->fsock)) {
- user_error('Connection closed prematurely');
$this->bitmap = 0;
+ user_error('Connection closed prematurely');
return false;
}
@@ -4037,10 +4116,14 @@ class SSH2
if ($this->bitmap & self::MASK_CONNECTED) {
$data = pack('CNNa*Na*', NET_SSH2_MSG_DISCONNECT, $reason, 0, '', 0, '');
$this->_send_binary_packet($data);
- $this->bitmap = 0;
+ }
+
+ $this->bitmap = 0;
+ if (is_resource($this->fsock) && get_resource_type($this->fsock) == 'stream') {
fclose($this->fsock);
- return false;
}
+
+ return false;
}
/**
@@ -4362,6 +4445,309 @@ class SSH2
}
/**
+ * Returns a list of algorithms the server supports
+ *
+ * @return array
+ * @access public
+ */
+ public function getServerAlgorithms()
+ {
+ $this->_connect();
+
+ return array(
+ 'kex' => $this->kex_algorithms,
+ 'hostkey' => $this->server_host_key_algorithms,
+ 'client_to_server' => array(
+ 'crypt' => $this->encryption_algorithms_client_to_server,
+ 'mac' => $this->mac_algorithms_client_to_server,
+ 'comp' => $this->compression_algorithms_client_to_server,
+ 'lang' => $this->languages_client_to_server
+ ),
+ 'server_to_client' => array(
+ 'crypt' => $this->encryption_algorithms_server_to_client,
+ 'mac' => $this->mac_algorithms_server_to_client,
+ 'comp' => $this->compression_algorithms_server_to_client,
+ 'lang' => $this->languages_server_to_client
+ )
+ );
+ }
+
+ /**
+ * Returns a list of KEX algorithms that phpseclib supports
+ *
+ * @return array
+ * @access public
+ */
+ function getSupportedKEXAlgorithms()
+ {
+ $kex_algorithms = array(
+ // Elliptic Curve Diffie-Hellman Key Agreement (ECDH) using
+ // Curve25519. See doc/curve25519-sha256@libssh.org.txt in the
+ // libssh repository for more information.
+ 'curve25519-sha256@libssh.org',
+
+ 'diffie-hellman-group-exchange-sha256',// RFC 4419
+ 'diffie-hellman-group-exchange-sha1', // RFC 4419
+
+ // Diffie-Hellman Key Agreement (DH) using integer modulo prime
+ // groups.
+ 'diffie-hellman-group14-sha1', // REQUIRED
+ 'diffie-hellman-group1-sha1', // REQUIRED
+ );
+
+ if (!function_exists('sodium_crypto_box_publickey_from_secretkey')) {
+ $kex_algorithms = array_diff(
+ $kex_algorithms,
+ array('curve25519-sha256@libssh.org')
+ );
+ }
+
+ return $kex_algorithms;
+ }
+
+ /**
+ * Returns a list of host key algorithms that phpseclib supports
+ *
+ * @return array
+ * @access public
+ */
+ function getSupportedHostKeyAlgorithms()
+ {
+ return array(
+ 'rsa-sha2-256', // RFC 8332
+ 'rsa-sha2-512', // RFC 8332
+ 'ssh-rsa', // RECOMMENDED sign Raw RSA Key
+ 'ssh-dss' // REQUIRED sign Raw DSS Key
+ );
+ }
+
+ /**
+ * Returns a list of symmetric key algorithms that phpseclib supports
+ *
+ * @return array
+ * @access public
+ */
+ function getSupportedEncryptionAlgorithms()
+ {
+ $algos = array(
+ // from <http://tools.ietf.org/html/rfc4345#section-4>:
+ 'arcfour256',
+ 'arcfour128',
+
+ //'arcfour', // OPTIONAL the ARCFOUR stream cipher with a 128-bit key
+
+ // CTR modes from <http://tools.ietf.org/html/rfc4344#section-4>:
+ 'aes128-ctr', // RECOMMENDED AES (Rijndael) in SDCTR mode, with 128-bit key
+ 'aes192-ctr', // RECOMMENDED AES with 192-bit key
+ 'aes256-ctr', // RECOMMENDED AES with 256-bit key
+
+ 'twofish128-ctr', // OPTIONAL Twofish in SDCTR mode, with 128-bit key
+ 'twofish192-ctr', // OPTIONAL Twofish with 192-bit key
+ 'twofish256-ctr', // OPTIONAL Twofish with 256-bit key
+
+ 'aes128-cbc', // RECOMMENDED AES with a 128-bit key
+ 'aes192-cbc', // OPTIONAL AES with a 192-bit key
+ 'aes256-cbc', // OPTIONAL AES in CBC mode, with a 256-bit key
+
+ 'twofish128-cbc', // OPTIONAL Twofish with a 128-bit key
+ 'twofish192-cbc', // OPTIONAL Twofish with a 192-bit key
+ 'twofish256-cbc',
+ 'twofish-cbc', // OPTIONAL alias for "twofish256-cbc"
+ // (this is being retained for historical reasons)
+
+ 'blowfish-ctr', // OPTIONAL Blowfish in SDCTR mode
+
+ 'blowfish-cbc', // OPTIONAL Blowfish in CBC mode
+
+ '3des-ctr', // RECOMMENDED Three-key 3DES in SDCTR mode
+
+ '3des-cbc', // REQUIRED three-key 3DES in CBC mode
+
+ //'none' // OPTIONAL no encryption; NOT RECOMMENDED
+ );
+
+ $engines = array(
+ Base::ENGINE_OPENSSL,
+ Base::ENGINE_MCRYPT,
+ Base::ENGINE_INTERNAL
+ );
+
+ $ciphers = array();
+ foreach ($engines as $engine) {
+ foreach ($algos as $algo) {
+ $obj = $this->_encryption_algorithm_to_crypt_instance($algo);
+ if ($obj instanceof Rijndael) {
+ $obj->setKeyLength(preg_replace('#[^\d]#', '', $algo));
+ }
+ switch ($algo) {
+ case 'arcfour128':
+ case 'arcfour256':
+ if ($engine == Base::ENGINE_INTERNAL) {
+ $algos = array_diff($algos, array($algo));
+ $ciphers[] = $algo;
+ } else {
+ continue 2;
+ }
+ }
+ if ($obj->isValidEngine($engine)) {
+ $algos = array_diff($algos, array($algo));
+ $ciphers[] = $algo;
+ }
+ }
+ }
+
+ return $ciphers;
+ }
+
+ /**
+ * Returns a list of MAC algorithms that phpseclib supports
+ *
+ * @return array
+ * @access public
+ */
+ function getSupportedMACAlgorithms()
+ {
+ return array(
+ // from <http://www.ietf.org/rfc/rfc6668.txt>:
+ 'hmac-sha2-256',// RECOMMENDED HMAC-SHA256 (digest length = key length = 32)
+
+ 'hmac-sha1-96', // RECOMMENDED first 96 bits of HMAC-SHA1 (digest length = 12, key length = 20)
+ 'hmac-sha1', // REQUIRED HMAC-SHA1 (digest length = key length = 20)
+ 'hmac-md5-96', // OPTIONAL first 96 bits of HMAC-MD5 (digest length = 12, key length = 16)
+ 'hmac-md5', // OPTIONAL HMAC-MD5 (digest length = key length = 16)
+ //'none' // OPTIONAL no MAC; NOT RECOMMENDED
+ );
+ }
+
+ /**
+ * Returns a list of compression algorithms that phpseclib supports
+ *
+ * @return array
+ * @access public
+ */
+ function getSupportedCompressionAlgorithms()
+ {
+ return array(
+ 'none' // REQUIRED no compression
+ //'zlib' // OPTIONAL ZLIB (LZ77) compression
+ );
+ }
+
+ /**
+ * Return list of negotiated algorithms
+ *
+ * Uses the same format as https://www.php.net/ssh2-methods-negotiated
+ *
+ * @return array
+ * @access public
+ */
+ function getAlgorithmsNegotiated()
+ {
+ $this->_connect();
+
+ return array(
+ 'kex' => $this->kex_algorithm,
+ 'hostkey' => $this->signature_format,
+ 'client_to_server' => array(
+ 'crypt' => $this->encrypt->name,
+ 'mac' => $this->hmac_create->name,
+ 'comp' => 'none',
+ ),
+ 'server_to_client' => array(
+ 'crypt' => $this->decrypt->name,
+ 'mac' => $this->hmac_check->name,
+ 'comp' => 'none',
+ )
+ );
+ }
+
+ /**
+ * Accepts an associative array with up to four parameters as described at
+ * <https://www.php.net/manual/en/function.ssh2-connect.php>
+ *
+ * @param array $methods
+ * @access public
+ */
+ function setPreferredAlgorithms($methods)
+ {
+ $preferred = $methods;
+
+ if (isset($preferred['kex'])) {
+ $preferred['kex'] = array_intersect(
+ $preferred['kex'],
+ $this->getSupportedKEXAlgorithms()
+ );
+ }
+
+ if (isset($preferred['hostkey'])) {
+ $preferred['hostkey'] = array_intersect(
+ $preferred['hostkey'],
+ $this->getSupportedHostKeyAlgorithms()
+ );
+ }
+
+ $keys = array('client_to_server', 'server_to_client');
+ foreach ($keys as $key) {
+ if (isset($preferred[$key])) {
+ $a = &$preferred[$key];
+ if (isset($a['crypt'])) {
+ $a['crypt'] = array_intersect(
+ $a['crypt'],
+ $this->getSupportedEncryptionAlgorithms()
+ );
+ }
+ if (isset($a['comp'])) {
+ $a['comp'] = array_intersect(
+ $a['comp'],
+ $this->getSupportedCompressionAlgorithms()
+ );
+ }
+ if (isset($a['mac'])) {
+ $a['mac'] = array_intersect(
+ $a['mac'],
+ $this->getSupportedMACAlgorithms()
+ );
+ }
+ }
+ }
+
+ $keys = array(
+ 'kex',
+ 'hostkey',
+ 'client_to_server/crypt',
+ 'client_to_server/comp',
+ 'client_to_server/mac',
+ 'server_to_client/crypt',
+ 'server_to_client/comp',
+ 'server_to_client/mac',
+ );
+ foreach ($keys as $key) {
+ $p = $preferred;
+ $m = $methods;
+
+ $subkeys = explode('/', $key);
+ foreach ($subkeys as $subkey) {
+ if (!isset($p[$subkey])) {
+ continue 2;
+ }
+ $p = $p[$subkey];
+ $m = $m[$subkey];
+ }
+
+ if (count($p) != count($m)) {
+ $diff = array_diff($m, $p);
+ $msg = count($diff) == 1 ?
+ ' is not a supported algorithm' :
+ ' are not supported algorithms';
+ user_error(implode(', ', $diff) . $msg);
+ return false;
+ }
+ }
+
+ $this->preferred = $preferred;
+ }
+
+ /**
* Returns the banner message.
*
* Quoting from the RFC, "in some jurisdictions, sending a warning message before
@@ -4480,6 +4866,8 @@ class SSH2
break;
case 'ssh-rsa':
+ case 'rsa-sha2-256':
+ case 'rsa-sha2-512':
if (strlen($server_public_host_key) < 4) {
return false;
}
@@ -4502,8 +4890,21 @@ class SSH2
$signature = $this->_string_shift($signature, $temp['length']);
$rsa = new RSA();
+ switch ($this->signature_format) {
+ case 'rsa-sha2-512':
+ $hash = 'sha512';
+ break;
+ case 'rsa-sha2-256':
+ $hash = 'sha256';
+ break;
+ //case 'ssh-rsa':
+ default:
+ $hash = 'sha1';
+ }
+ $rsa->setHash($hash);
$rsa->setSignatureMode(RSA::SIGNATURE_PKCS1);
$rsa->loadKey(array('e' => $e, 'n' => $n), RSA::PUBLIC_FORMAT_RAW);
+
if (!$rsa->verify($this->exchange_hash, $signature)) {
user_error('Bad server signature');
return $this->_disconnect(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE);
@@ -4530,7 +4931,30 @@ class SSH2
$s = $s->modPow($e, $n);
$s = $s->toBytes();
- $h = pack('N4H*', 0x00302130, 0x0906052B, 0x0E03021A, 0x05000414, sha1($this->exchange_hash));
+ switch ($this->signature_format) {
+ case 'rsa-sha2-512':
+ $hash = 'sha512';
+ break;
+ case 'rsa-sha2-256':
+ $hash = 'sha256';
+ break;
+ //case 'ssh-rsa':
+ default:
+ $hash = 'sha1';
+ }
+ $hashObj = new Hash($hash);
+ switch ($this->signature_format) {
+ case 'rsa-sha2-512':
+ $h = pack('N5a*', 0x00305130, 0x0D060960, 0x86480165, 0x03040203, 0x05000440, $hashObj->hash($this->exchange_hash));
+ break;
+ case 'rsa-sha2-256':
+ $h = pack('N5a*', 0x00303130, 0x0D060960, 0x86480165, 0x03040201, 0x05000420, $hashObj->hash($this->exchange_hash));
+ break;
+ //case 'ssh-rsa':
+ default:
+ $hash = 'sha1';
+ $h = pack('N4a*', 0x00302130, 0x0906052B, 0x0E03021A, 0x05000414, $hashObj->hash($this->exchange_hash));
+ }
$h = chr(0x01) . str_repeat(chr(0xFF), $nLength - 2 - strlen($h)) . $h;
if ($s != $h) {
diff --git a/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent.php b/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent.php
index a4ff0549d..99dcecfe6 100644
--- a/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent.php
+++ b/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent.php
@@ -43,7 +43,7 @@ use phpseclib\System\SSH\Agent\Identity;
*
* @package SSH\Agent
* @author Jim Wigginton <terrafrost@php.net>
- * @access internal
+ * @access public
*/
class Agent
{
@@ -117,18 +117,20 @@ class Agent
* @return \phpseclib\System\SSH\Agent
* @access public
*/
- function __construct()
+ function __construct($address = null)
{
- switch (true) {
- case isset($_SERVER['SSH_AUTH_SOCK']):
- $address = $_SERVER['SSH_AUTH_SOCK'];
- break;
- case isset($_ENV['SSH_AUTH_SOCK']):
- $address = $_ENV['SSH_AUTH_SOCK'];
- break;
- default:
- user_error('SSH_AUTH_SOCK not found');
- return false;
+ if (!$address) {
+ switch (true) {
+ case isset($_SERVER['SSH_AUTH_SOCK']):
+ $address = $_SERVER['SSH_AUTH_SOCK'];
+ break;
+ case isset($_ENV['SSH_AUTH_SOCK']):
+ $address = $_ENV['SSH_AUTH_SOCK'];
+ break;
+ default:
+ user_error('SSH_AUTH_SOCK not found');
+ return false;
+ }
}
$this->fsock = fsockopen('unix://' . $address, 0, $errno, $errstr);
@@ -155,12 +157,14 @@ class Agent
$packet = pack('NC', 1, self::SSH_AGENTC_REQUEST_IDENTITIES);
if (strlen($packet) != fputs($this->fsock, $packet)) {
user_error('Connection closed while requesting identities');
+ return array();
}
$length = current(unpack('N', fread($this->fsock, 4)));
$type = ord(fread($this->fsock, 1));
if ($type != self::SSH_AGENT_IDENTITIES_ANSWER) {
user_error('Unable to request identities');
+ return array();
}
$identities = array();
diff --git a/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent/Identity.php b/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent/Identity.php
index b8cc6cded..b4649046a 100644
--- a/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent/Identity.php
+++ b/vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent/Identity.php
@@ -32,6 +32,17 @@ use phpseclib\System\SSH\Agent;
*/
class Identity
{
+ /**@+
+ * Signature Flags
+ *
+ * See https://tools.ietf.org/html/draft-miller-ssh-agent-00#section-5.3
+ *
+ * @access private
+ */
+ const SSH_AGENT_RSA2_256 = 2;
+ const SSH_AGENT_RSA2_512 = 4;
+ /**#@-*/
+
/**
* Key Object
*
@@ -60,6 +71,16 @@ class Identity
var $fsock;
/**
+ * Signature flags
+ *
+ * @var int
+ * @access private
+ * @see self::sign()
+ * @see self::setHash()
+ */
+ var $flags = 0;
+
+ /**
* Default Constructor.
*
* @param resource $fsock
@@ -127,6 +148,31 @@ class Identity
}
/**
+ * Set Hash
+ *
+ * ssh-agent doesn't support using hashes for RSA other than SHA1
+ *
+ * @param string $hash
+ * @access public
+ */
+ function setHash($hash)
+ {
+ $this->flags = 0;
+ switch ($hash) {
+ case 'sha1':
+ break;
+ case 'sha256':
+ $this->flags = self::SSH_AGENT_RSA2_256;
+ break;
+ case 'sha512':
+ $this->flags = self::SSH_AGENT_RSA2_512;
+ break;
+ default:
+ user_error('The only supported hashes for RSA are sha1, sha256 and sha512');
+ }
+ }
+
+ /**
* Create a signature
*
* See "2.6.2 Protocol 2 private key signature request"
@@ -138,7 +184,7 @@ class Identity
function sign($message)
{
// the last parameter (currently 0) is for flags and ssh-agent only defines one flag (for ssh-dss): SSH_AGENT_OLD_SIGNATURE
- $packet = pack('CNa*Na*N', Agent::SSH_AGENTC_SIGN_REQUEST, strlen($this->key_blob), $this->key_blob, strlen($message), $message, 0);
+ $packet = pack('CNa*Na*N', Agent::SSH_AGENTC_SIGN_REQUEST, strlen($this->key_blob), $this->key_blob, strlen($message), $message, $this->flags);
$packet = pack('Na*', strlen($packet), $packet);
if (strlen($packet) != fputs($this->fsock, $packet)) {
user_error('Connection closed during signing');
@@ -151,8 +197,34 @@ class Identity
}
$signature_blob = fread($this->fsock, $length - 1);
- // the only other signature format defined - ssh-dss - is the same length as ssh-rsa
- // the + 12 is for the other various SSH added length fields
- return substr($signature_blob, strlen('ssh-rsa') + 12);
+ $length = current(unpack('N', $this->_string_shift($signature_blob, 4)));
+ if ($length != strlen($signature_blob)) {
+ user_error('Malformed signature blob');
+ }
+ $length = current(unpack('N', $this->_string_shift($signature_blob, 4)));
+ if ($length > strlen($signature_blob) + 4) {
+ user_error('Malformed signature blob');
+ }
+ $type = $this->_string_shift($signature_blob, $length);
+ $this->_string_shift($signature_blob, 4);
+
+ return $signature_blob;
+ }
+
+ /**
+ * String Shift
+ *
+ * Inspired by array_shift
+ *
+ * @param string $string
+ * @param int $index
+ * @return string
+ * @access private
+ */
+ function _string_shift(&$string, $index = 1)
+ {
+ $substr = substr($string, 0, $index);
+ $string = substr($string, $index);
+ return $substr;
}
}
diff --git a/vendor/simplepie/simplepie/composer.json b/vendor/simplepie/simplepie/composer.json
index b5965b26f..dd1346150 100644
--- a/vendor/simplepie/simplepie/composer.json
+++ b/vendor/simplepie/simplepie/composer.json
@@ -24,17 +24,30 @@
}
],
"require": {
- "php": ">=5.3.0"
+ "php": ">=5.6.0",
+ "ext-pcre": "*",
+ "ext-xml": "*",
+ "ext-xmlreader": "*"
},
"require-dev": {
- "phpunit/phpunit": "~4 || ~5"
+ "phpunit/phpunit": "~5.4.3 || ~6.5"
},
"suggest": {
+ "ext-curl": "",
+ "ext-iconv": "",
+ "ext-intl": "",
+ "ext-mbstring": "",
"mf2/mf2": "Microformat module that allows for parsing HTML for microformats"
},
"autoload": {
"psr-0": {
"SimplePie": "library"
}
- }
+ },
+ "config": {
+ "bin-dir": "bin"
+ },
+ "scripts": {
+ "test": "phpunit"
+ }
}
diff --git a/vendor/simplepie/simplepie/idn/idna_convert.class.php b/vendor/simplepie/simplepie/idn/idna_convert.class.php
index eb9d5f516..ec137dc4c 100644
--- a/vendor/simplepie/simplepie/idn/idna_convert.class.php
+++ b/vendor/simplepie/simplepie/idn/idna_convert.class.php
@@ -306,20 +306,20 @@ class idna_convert
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]);
+ }
+
+ // 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)));
}
- $last_begin = $k + 1;
+ $output .= chr($decoded[$k]);
}
+ $last_begin = $k + 1;
}
}
// Catch the rest of the string
@@ -333,13 +333,13 @@ class idna_convert
$output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($inp_len)-$last_begin)));
}
return $output;
- } else {
- if ($output = $this->_encode($decoded)) {
- return $output;
- } else {
- return $this->_ucs4_to_utf8($decoded);
- }
}
+
+ if ($output = $this->_encode($decoded)) {
+ return $output;
+ }
+
+ return $this->_ucs4_to_utf8($decoded);
}
/**
diff --git a/vendor/simplepie/simplepie/library/SimplePie.php b/vendor/simplepie/simplepie/library/SimplePie.php
index 34b6ca0c9..c4c6f611c 100755
--- a/vendor/simplepie/simplepie/library/SimplePie.php
+++ b/vendor/simplepie/simplepie/library/SimplePie.php
@@ -33,7 +33,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*
* @package SimplePie
- * @version 1.5.1
+ * @version 1.5.3
* @copyright 2004-2017 Ryan Parman, Geoffrey Sneddon, Ryan McCue
* @author Ryan Parman
* @author Geoffrey Sneddon
@@ -50,7 +50,7 @@ define('SIMPLEPIE_NAME', 'SimplePie');
/**
* SimplePie Version
*/
-define('SIMPLEPIE_VERSION', '1.5.1');
+define('SIMPLEPIE_VERSION', '1.5.3');
/**
* SimplePie Build
@@ -648,7 +648,7 @@ class SimplePie
* @access private
*/
public $enable_exceptions = false;
-
+
/**
* The SimplePie class contains feed level data and options
*
@@ -1387,7 +1387,7 @@ class SimplePie
list($headers, $sniffed) = $fetched;
}
-
+
// Empty response check
if(empty($this->raw_data)){
$this->error = "A feed could not be found at `$this->feed_url`. Empty body.";
@@ -1471,7 +1471,7 @@ class SimplePie
// Cache the file if caching is enabled
if ($cache && !$cache->save($this))
{
- trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
+ trigger_error("$this->cache_location is not writable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
}
return true;
}
@@ -1640,7 +1640,7 @@ class SimplePie
if (!$this->force_feed)
{
// Check if the supplied URL is a feed, if it isn't, look for it.
- $locate = $this->registry->create('Locator', array(&$file, $this->timeout, $this->useragent, $this->max_checked_feeds));
+ $locate = $this->registry->create('Locator', array(&$file, $this->timeout, $this->useragent, $this->max_checked_feeds, $this->force_fsockopen, $this->curl_options));
if (!$locate->is_feed($file))
{
@@ -1708,7 +1708,7 @@ class SimplePie
$this->data = array('url' => $this->feed_url, 'feed_url' => $file->url, 'build' => SIMPLEPIE_BUILD);
if (!$cache->save($this))
{
- trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
+ trigger_error("$this->cache_location is not writable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
}
$cache = $this->registry->call('Cache', 'get_handler', array($this->cache_location, call_user_func($this->cache_name_function, $file->url), 'spc'));
}
@@ -1904,7 +1904,7 @@ class SimplePie
/**
* Get the URL for the feed
- *
+ *
* When the 'permanent' mode is enabled, returns the original feed URL,
* except in the case of an `HTTP 301 Moved Permanently` status response,
* in which case the location of the first redirection is returned.
@@ -2138,10 +2138,8 @@ class SimplePie
{
return $this->get_link();
}
- else
- {
- return $this->subscribe_url();
- }
+
+ return $this->subscribe_url();
}
/**
@@ -2211,10 +2209,8 @@ class SimplePie
{
return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -2231,10 +2227,8 @@ class SimplePie
{
return $categories[$key];
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -2296,10 +2290,8 @@ class SimplePie
{
return array_unique($categories);
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -2316,10 +2308,8 @@ class SimplePie
{
return $authors[$key];
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -2394,10 +2384,8 @@ class SimplePie
{
return array_unique($authors);
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -2414,10 +2402,8 @@ class SimplePie
{
return $contributors[$key];
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -2480,10 +2466,8 @@ class SimplePie
{
return array_unique($contributors);
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -2501,10 +2485,8 @@ class SimplePie
{
return $links[$key];
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -2606,10 +2588,8 @@ class SimplePie
{
return $this->data['links'][$rel];
}
- else
- {
- return null;
- }
+
+ return null;
}
public function get_all_discovered_feeds()
@@ -2664,10 +2644,8 @@ class SimplePie
{
return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -2700,10 +2678,8 @@ class SimplePie
{
return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -2744,10 +2720,8 @@ class SimplePie
{
return $this->sanitize($this->data['headers']['content-language'], SIMPLEPIE_CONSTRUCT_TEXT);
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -2773,10 +2747,8 @@ class SimplePie
{
return (float) $match[1];
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -2805,10 +2777,8 @@ class SimplePie
{
return (float) $match[2];
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -2842,10 +2812,8 @@ class SimplePie
{
return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -2885,10 +2853,8 @@ class SimplePie
{
return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
}
- else
- {
- return null;
- }
+
+ return null;
}
@@ -2917,10 +2883,8 @@ class SimplePie
{
return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -2943,10 +2907,8 @@ class SimplePie
{
return 88.0;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -2969,10 +2931,8 @@ class SimplePie
{
return 31.0;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -2992,10 +2952,8 @@ class SimplePie
{
return $qty;
}
- else
- {
- return ($qty > $max) ? $max : $qty;
- }
+
+ return ($qty > $max) ? $max : $qty;
}
/**
@@ -3017,10 +2975,8 @@ class SimplePie
{
return $items[$key];
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -3115,10 +3071,8 @@ class SimplePie
{
return array_slice($items, $start);
}
- else
- {
- return array_slice($items, $start, $end);
- }
+
+ return array_slice($items, $start, $end);
}
/**
@@ -3241,16 +3195,12 @@ class SimplePie
{
return array_slice($items, $start);
}
- else
- {
- return array_slice($items, $start, $end);
- }
- }
- else
- {
- trigger_error('Cannot merge zero SimplePie objects', E_USER_WARNING);
- return array();
+
+ return array_slice($items, $start, $end);
}
+
+ trigger_error('Cannot merge zero SimplePie objects', E_USER_WARNING);
+ return array();
}
/**
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Author.php b/vendor/simplepie/simplepie/library/SimplePie/Author.php
index e6768ff29..14794cf27 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Author.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Author.php
@@ -113,10 +113,8 @@ class SimplePie_Author
{
return $this->name;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -130,10 +128,8 @@ class SimplePie_Author
{
return $this->link;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -147,10 +143,7 @@ class SimplePie_Author
{
return $this->email;
}
- else
- {
- return null;
- }
+
+ return null;
}
}
-
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Cache/File.php b/vendor/simplepie/simplepie/library/SimplePie/Cache/File.php
index 6ba6c5f6e..a09dea637 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Cache/File.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Cache/File.php
@@ -101,7 +101,7 @@ class SimplePie_Cache_File implements SimplePie_Cache_Base
*/
public function save($data)
{
- if (file_exists($this->name) && is_writeable($this->name) || file_exists($this->location) && is_writeable($this->location))
+ if (file_exists($this->name) && is_writable($this->name) || file_exists($this->location) && is_writable($this->location))
{
if ($data instanceof SimplePie)
{
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Cache/MySQL.php b/vendor/simplepie/simplepie/library/SimplePie/Cache/MySQL.php
index 8686b6c67..061ed043a 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Cache/MySQL.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Cache/MySQL.php
@@ -96,7 +96,7 @@ class SimplePie_Cache_MySQL extends SimplePie_Cache_DB
'cache_purge_time' => 2592000
),
);
-
+
$this->options = SimplePie_Misc::array_merge_recursive($this->options, SimplePie_Cache::parse_URL($location));
// Path is prefixed with a "/"
@@ -395,10 +395,8 @@ class SimplePie_Cache_MySQL extends SimplePie_Cache_DB
{
return $time;
}
- else
- {
- return false;
- }
+
+ return false;
}
/**
@@ -416,14 +414,8 @@ class SimplePie_Cache_MySQL extends SimplePie_Cache_DB
$query = $this->mysql->prepare('UPDATE `' . $this->options['extras']['prefix'] . 'cache_data` SET `mtime` = :time WHERE `id` = :id');
$query->bindValue(':time', time());
$query->bindValue(':id', $this->id);
- if ($query->execute() && $query->rowCount() > 0)
- {
- return true;
- }
- else
- {
- return false;
- }
+
+ return $query->execute() && $query->rowCount() > 0;
}
/**
@@ -442,13 +434,7 @@ class SimplePie_Cache_MySQL extends SimplePie_Cache_DB
$query->bindValue(':id', $this->id);
$query2 = $this->mysql->prepare('DELETE FROM `' . $this->options['extras']['prefix'] . 'items` WHERE `feed_id` = :id');
$query2->bindValue(':id', $this->id);
- if ($query->execute() && $query2->execute())
- {
- return true;
- }
- else
- {
- return false;
- }
+
+ return $query->execute() && $query2->execute();
}
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Cache/Redis.php b/vendor/simplepie/simplepie/library/SimplePie/Cache/Redis.php
index 04d72c79a..dbc88e829 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Cache/Redis.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Cache/Redis.php
@@ -65,6 +65,12 @@ class SimplePie_Cache_Redis implements SimplePie_Cache_Base {
$parsed = SimplePie_Cache::parse_URL($location);
$redis = new Redis();
$redis->connect($parsed['host'], $parsed['port']);
+ if (isset($parsed['pass'])) {
+ $redis->auth($parsed['pass']);
+ }
+ if (isset($parsed['path'])) {
+ $redis->select((int)substr($parsed['path'], 1));
+ }
$this->cache = $redis;
if (!is_null($options) && is_array($options)) {
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Caption.php b/vendor/simplepie/simplepie/library/SimplePie/Caption.php
index abf07de1b..854857603 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Caption.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Caption.php
@@ -131,10 +131,8 @@ class SimplePie_Caption
{
return $this->endTime;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -149,10 +147,8 @@ class SimplePie_Caption
{
return $this->lang;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -166,10 +162,8 @@ class SimplePie_Caption
{
return $this->startTime;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -183,10 +177,8 @@ class SimplePie_Caption
{
return $this->text;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -200,10 +192,7 @@ class SimplePie_Caption
{
return $this->type;
}
- else
- {
- return null;
- }
+
+ return null;
}
}
-
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Content/Type/Sniffer.php b/vendor/simplepie/simplepie/library/SimplePie/Content/Type/Sniffer.php
index ff35de614..b86dfa33c 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Content/Type/Sniffer.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Content/Type/Sniffer.php
@@ -120,24 +120,18 @@ class SimplePie_Content_Type_Sniffer
{
return $return;
}
- else
- {
- return $official;
- }
+
+ return $official;
}
elseif ($official === 'text/html')
{
return $this->feed_or_html();
}
- else
- {
- return $official;
- }
- }
- else
- {
- return $this->unknown();
+
+ return $official;
}
+
+ return $this->unknown();
}
/**
@@ -158,10 +152,8 @@ class SimplePie_Content_Type_Sniffer
{
return 'application/octect-stream';
}
- else
- {
- return 'text/plain';
- }
+
+ return 'text/plain';
}
/**
@@ -207,10 +199,8 @@ class SimplePie_Content_Type_Sniffer
{
return 'image/vnd.microsoft.icon';
}
- else
- {
- return $this->text_or_binary();
- }
+
+ return $this->text_or_binary();
}
/**
@@ -241,10 +231,8 @@ class SimplePie_Content_Type_Sniffer
{
return 'image/vnd.microsoft.icon';
}
- else
- {
- return false;
- }
+
+ return false;
}
/**
@@ -328,4 +316,3 @@ class SimplePie_Content_Type_Sniffer
return 'text/html';
}
}
-
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Copyright.php b/vendor/simplepie/simplepie/library/SimplePie/Copyright.php
index 3f3d07d3b..a57f323e6 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Copyright.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Copyright.php
@@ -103,10 +103,8 @@ class SimplePie_Copyright
{
return $this->url;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -120,10 +118,7 @@ class SimplePie_Copyright
{
return $this->label;
}
- else
- {
- return null;
- }
+
+ return null;
}
}
-
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Credit.php b/vendor/simplepie/simplepie/library/SimplePie/Credit.php
index 9bad9ef34..064a1b864 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Credit.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Credit.php
@@ -112,10 +112,8 @@ class SimplePie_Credit
{
return $this->role;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -129,10 +127,8 @@ class SimplePie_Credit
{
return $this->scheme;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -146,10 +142,7 @@ class SimplePie_Credit
{
return $this->name;
}
- else
- {
- return null;
- }
+
+ return null;
}
}
-
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Decode/HTML/Entities.php b/vendor/simplepie/simplepie/library/SimplePie/Decode/HTML/Entities.php
index de3f2cb53..773481a8c 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Decode/HTML/Entities.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Decode/HTML/Entities.php
@@ -117,10 +117,8 @@ class SimplePie_Decode_HTML_Entities
$this->consumed .= $this->data[$this->position];
return $this->data[$this->position++];
}
- else
- {
- return false;
- }
+
+ return false;
}
/**
@@ -139,10 +137,8 @@ class SimplePie_Decode_HTML_Entities
$this->position += $len;
return $data;
}
- else
- {
- return false;
- }
+
+ return false;
}
/**
@@ -612,4 +608,3 @@ class SimplePie_Decode_HTML_Entities
}
}
}
-
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Enclosure.php b/vendor/simplepie/simplepie/library/SimplePie/Enclosure.php
index 15060e193..ddbbc3c92 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Enclosure.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Enclosure.php
@@ -282,10 +282,8 @@ class SimplePie_Enclosure
{
return $this->bitrate;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -301,10 +299,8 @@ class SimplePie_Enclosure
{
return $captions[$key];
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -318,10 +314,8 @@ class SimplePie_Enclosure
{
return $this->captions;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -337,10 +331,8 @@ class SimplePie_Enclosure
{
return $categories[$key];
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -354,10 +346,8 @@ class SimplePie_Enclosure
{
return $this->categories;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -371,10 +361,8 @@ class SimplePie_Enclosure
{
return $this->channels;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -388,10 +376,8 @@ class SimplePie_Enclosure
{
return $this->copyright;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -407,10 +393,8 @@ class SimplePie_Enclosure
{
return $credits[$key];
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -424,10 +408,8 @@ class SimplePie_Enclosure
{
return $this->credits;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -441,10 +423,8 @@ class SimplePie_Enclosure
{
return $this->description;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -462,15 +442,11 @@ class SimplePie_Enclosure
$time = SimplePie_Misc::time_hms($this->duration);
return $time;
}
- else
- {
- return $this->duration;
- }
- }
- else
- {
- return null;
+
+ return $this->duration;
}
+
+ return null;
}
/**
@@ -484,10 +460,8 @@ class SimplePie_Enclosure
{
return $this->expression;
}
- else
- {
- return 'full';
- }
+
+ return 'full';
}
/**
@@ -519,10 +493,8 @@ class SimplePie_Enclosure
{
return $this->framerate;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -549,10 +521,8 @@ class SimplePie_Enclosure
{
return $hashes[$key];
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -566,10 +536,8 @@ class SimplePie_Enclosure
{
return $this->hashes;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -583,10 +551,8 @@ class SimplePie_Enclosure
{
return $this->height;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -601,10 +567,8 @@ class SimplePie_Enclosure
{
return $this->lang;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -620,10 +584,8 @@ class SimplePie_Enclosure
{
return $keywords[$key];
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -637,10 +599,8 @@ class SimplePie_Enclosure
{
return $this->keywords;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -654,10 +614,8 @@ class SimplePie_Enclosure
{
return $this->length;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -671,10 +629,8 @@ class SimplePie_Enclosure
{
return urldecode($this->link);
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -689,10 +645,8 @@ class SimplePie_Enclosure
{
return $this->medium;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -707,10 +661,8 @@ class SimplePie_Enclosure
{
return $this->player;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -726,10 +678,8 @@ class SimplePie_Enclosure
{
return $ratings[$key];
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -743,10 +693,8 @@ class SimplePie_Enclosure
{
return $this->ratings;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -762,10 +710,8 @@ class SimplePie_Enclosure
{
return $restrictions[$key];
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -779,10 +725,8 @@ class SimplePie_Enclosure
{
return $this->restrictions;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -796,10 +740,8 @@ class SimplePie_Enclosure
{
return $this->samplingrate;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -814,10 +756,8 @@ class SimplePie_Enclosure
{
return round($length/1048576, 2);
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -833,10 +773,8 @@ class SimplePie_Enclosure
{
return $thumbnails[$key];
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -850,10 +788,8 @@ class SimplePie_Enclosure
{
return $this->thumbnails;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -867,10 +803,8 @@ class SimplePie_Enclosure
{
return $this->title;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -885,10 +819,8 @@ class SimplePie_Enclosure
{
return $this->type;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -902,10 +834,8 @@ class SimplePie_Enclosure
{
return $this->width;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -1365,15 +1295,10 @@ class SimplePie_Enclosure
{
return 'mp3';
}
- else
- {
- return null;
- }
- }
- else
- {
- return $type;
+
+ return null;
}
+
+ return $type;
}
}
-
diff --git a/vendor/simplepie/simplepie/library/SimplePie/File.php b/vendor/simplepie/simplepie/library/SimplePie/File.php
index 2bb0a3b44..c73e0fbc9 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/File.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/File.php
@@ -71,7 +71,7 @@ class SimplePie_File
{
$idn = new idna_convert();
$parsed = SimplePie_Misc::parse_url($url);
- $url = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']);
+ $url = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], NULL);
}
$this->url = $url;
$this->permanent_url = $url;
diff --git a/vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php b/vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php
index e982c206f..7d6188dd1 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/HTTP/Parser.php
@@ -155,15 +155,13 @@ class SimplePie_HTTP_Parser
{
return true;
}
- else
- {
- $this->http_version = '';
- $this->status_code = '';
- $this->reason = '';
- $this->headers = array();
- $this->body = '';
- return false;
- }
+
+ $this->http_version = '';
+ $this->status_code = '';
+ $this->reason = '';
+ $this->headers = array();
+ $this->body = '';
+ return false;
}
/**
diff --git a/vendor/simplepie/simplepie/library/SimplePie/IRI.php b/vendor/simplepie/simplepie/library/SimplePie/IRI.php
index 2b3fbaf07..ffba232b1 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/IRI.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/IRI.php
@@ -211,10 +211,8 @@ class SimplePie_IRI
{
return $this->normalization[$this->scheme][$name];
}
- else
- {
- return $return;
- }
+
+ return $return;
}
/**
@@ -225,14 +223,7 @@ class SimplePie_IRI
*/
public function __isset($name)
{
- if (method_exists($this, 'get_' . $name) || isset($this->$name))
- {
- return true;
- }
- else
- {
- return false;
- }
+ return method_exists($this, 'get_' . $name) || isset($this->$name);
}
/**
@@ -356,10 +347,8 @@ class SimplePie_IRI
$target->scheme_normalization();
return $target;
}
- else
- {
- return false;
- }
+
+ return false;
}
}
@@ -396,11 +385,9 @@ class SimplePie_IRI
}
return $match;
}
- else
- {
- // This can occur when a paragraph is accidentally parsed as a URI
- return false;
- }
+
+ // This can occur when a paragraph is accidentally parsed as a URI
+ return false;
}
/**
@@ -804,7 +791,7 @@ class SimplePie_IRI
public function set_iri($iri, $clear_cache = false)
{
static $cache;
- if ($clear_cache)
+ if ($clear_cache)
{
$cache = null;
return;
@@ -830,30 +817,28 @@ class SimplePie_IRI
$return) = $cache[$iri];
return $return;
}
- else
- {
- $parsed = $this->parse_iri((string) $iri);
- if (!$parsed)
- {
- return false;
- }
- $return = $this->set_scheme($parsed['scheme'])
- && $this->set_authority($parsed['authority'])
- && $this->set_path($parsed['path'])
- && $this->set_query($parsed['query'])
- && $this->set_fragment($parsed['fragment']);
-
- $cache[$iri] = array($this->scheme,
- $this->iuserinfo,
- $this->ihost,
- $this->port,
- $this->ipath,
- $this->iquery,
- $this->ifragment,
- $return);
- return $return;
+ $parsed = $this->parse_iri((string) $iri);
+ if (!$parsed)
+ {
+ return false;
}
+
+ $return = $this->set_scheme($parsed['scheme'])
+ && $this->set_authority($parsed['authority'])
+ && $this->set_path($parsed['path'])
+ && $this->set_query($parsed['query'])
+ && $this->set_fragment($parsed['fragment']);
+
+ $cache[$iri] = array($this->scheme,
+ $this->iuserinfo,
+ $this->ihost,
+ $this->port,
+ $this->ipath,
+ $this->iquery,
+ $this->ifragment,
+ $return);
+ return $return;
}
/**
@@ -915,42 +900,40 @@ class SimplePie_IRI
return $return;
}
+
+ $remaining = $authority;
+ if (($iuserinfo_end = strrpos($remaining, '@')) !== false)
+ {
+ $iuserinfo = substr($remaining, 0, $iuserinfo_end);
+ $remaining = substr($remaining, $iuserinfo_end + 1);
+ }
else
{
- $remaining = $authority;
- if (($iuserinfo_end = strrpos($remaining, '@')) !== false)
- {
- $iuserinfo = substr($remaining, 0, $iuserinfo_end);
- $remaining = substr($remaining, $iuserinfo_end + 1);
- }
- else
- {
- $iuserinfo = null;
- }
- if (($port_start = strpos($remaining, ':', strpos($remaining, ']'))) !== false)
- {
- if (($port = substr($remaining, $port_start + 1)) === false)
- {
- $port = null;
- }
- $remaining = substr($remaining, 0, $port_start);
- }
- else
+ $iuserinfo = null;
+ }
+ if (($port_start = strpos($remaining, ':', strpos($remaining, ']'))) !== false)
+ {
+ if (($port = substr($remaining, $port_start + 1)) === false)
{
$port = null;
}
+ $remaining = substr($remaining, 0, $port_start);
+ }
+ else
+ {
+ $port = null;
+ }
- $return = $this->set_userinfo($iuserinfo) &&
- $this->set_host($remaining) &&
- $this->set_port($port);
+ $return = $this->set_userinfo($iuserinfo) &&
+ $this->set_host($remaining) &&
+ $this->set_port($port);
- $cache[$authority] = array($this->iuserinfo,
- $this->ihost,
- $this->port,
- $return);
+ $cache[$authority] = array($this->iuserinfo,
+ $this->ihost,
+ $this->port,
+ $return);
- return $return;
- }
+ return $return;
}
/**
@@ -1050,11 +1033,9 @@ class SimplePie_IRI
$this->scheme_normalization();
return true;
}
- else
- {
- $this->port = null;
- return false;
- }
+
+ $this->port = null;
+ return false;
}
/**
@@ -1066,7 +1047,7 @@ class SimplePie_IRI
public function set_path($ipath, $clear_cache = false)
{
static $cache;
- if ($clear_cache)
+ if ($clear_cache)
{
$cache = null;
return;
@@ -1185,7 +1166,7 @@ class SimplePie_IRI
{
$iri .= $this->ipath;
}
- elseif (!empty($this->normalization[$this->scheme]['ipath']) && $iauthority !== null && $iauthority !== '')
+ elseif (!empty($this->normalization[$this->scheme]['ipath']) && $iauthority !== null && $iauthority !== '')
{
$iri .= $this->normalization[$this->scheme]['ipath'];
}
@@ -1229,16 +1210,14 @@ class SimplePie_IRI
{
$iauthority .= $this->ihost;
}
- if ($this->port !== null)
+ if ($this->port !== null && $this->port !== 0)
{
$iauthority .= ':' . $this->port;
}
return $iauthority;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -1251,7 +1230,7 @@ class SimplePie_IRI
$iauthority = $this->get_iauthority();
if (is_string($iauthority))
return $this->to_uri($iauthority);
- else
- return $iauthority;
+
+ return $iauthority;
}
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Item.php b/vendor/simplepie/simplepie/library/SimplePie/Item.php
index 2083e7a92..9b9c1f5db 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Item.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Item.php
@@ -147,10 +147,8 @@ class SimplePie_Item
{
return $this->data['child'][$namespace][$tag];
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -366,10 +364,8 @@ class SimplePie_Item
{
return $this->get_content(true);
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -407,18 +403,16 @@ class SimplePie_Item
{
return $this->get_description(true);
}
- else
- {
- return null;
- }
+
+ return null;
}
-
+
/**
* Get the media:thumbnail of the item
*
* Uses `<media:thumbnail>`
*
- *
+ *
* @return array|null
*/
public function get_thumbnail()
@@ -435,7 +429,7 @@ class SimplePie_Item
}
}
return $this->data['thumbnail'];
- }
+ }
/**
* Get a category for the item
@@ -451,10 +445,8 @@ class SimplePie_Item
{
return $categories[$key];
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -519,10 +511,8 @@ class SimplePie_Item
{
return array_unique($categories);
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -539,10 +529,8 @@ class SimplePie_Item
{
return $authors[$key];
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -559,10 +547,8 @@ class SimplePie_Item
{
return $contributors[$key];
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -571,7 +557,7 @@ class SimplePie_Item
* Uses `<atom:contributor>`
*
* @since 1.1
- * @return array|null List of {@see SimplePie_Author} objects
+ * @return SimplePie_Author[]|null List of {@see SimplePie_Author} objects
*/
public function get_contributors()
{
@@ -625,10 +611,8 @@ class SimplePie_Item
{
return array_unique($contributors);
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -637,7 +621,7 @@ class SimplePie_Item
* Uses `<atom:author>`, `<author>`, `<dc:creator>` or `<itunes:author>`
*
* @since Beta 2
- * @return array|null List of {@see SimplePie_Author} objects
+ * @return SimplePie_Author[]|null List of {@see SimplePie_Author} objects
*/
public function get_authors()
{
@@ -715,10 +699,8 @@ class SimplePie_Item
{
return $authors;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -743,10 +725,8 @@ class SimplePie_Item
{
return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -825,10 +805,8 @@ class SimplePie_Item
return date($date_format, $this->data['date']['parsed']);
}
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -876,10 +854,8 @@ class SimplePie_Item
return date($date_format, $this->data['updated']['parsed']);
}
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -905,10 +881,8 @@ class SimplePie_Item
{
return strftime($date_format, $date);
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -969,10 +943,8 @@ class SimplePie_Item
{
return $enclosure->get_link();
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -990,10 +962,8 @@ class SimplePie_Item
{
return $links[$key];
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -1073,10 +1043,8 @@ class SimplePie_Item
{
return $this->data['links'][$rel];
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -1096,10 +1064,8 @@ class SimplePie_Item
{
return $enclosures[$key];
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -2922,10 +2888,8 @@ class SimplePie_Item
{
return $this->data['enclosures'];
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -2950,10 +2914,8 @@ class SimplePie_Item
{
return (float) $match[1];
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -2982,10 +2944,8 @@ class SimplePie_Item
{
return (float) $match[2];
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -3000,10 +2960,7 @@ class SimplePie_Item
{
return $this->registry->create('Source', array($this, $return[0]));
}
- else
- {
- return null;
- }
+
+ return null;
}
}
-
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Locator.php b/vendor/simplepie/simplepie/library/SimplePie/Locator.php
index bc314c2cd..12bc15e15 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Locator.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Locator.php
@@ -62,14 +62,18 @@ class SimplePie_Locator
var $base_location = 0;
var $checked_feeds = 0;
var $max_checked_feeds = 10;
+ var $force_fsockopen = false;
+ var $curl_options = array();
protected $registry;
- public function __construct(SimplePie_File $file, $timeout = 10, $useragent = null, $max_checked_feeds = 10)
+ public function __construct(SimplePie_File $file, $timeout = 10, $useragent = null, $max_checked_feeds = 10, $force_fsockopen = false, $curl_options = array())
{
$this->file = $file;
$this->useragent = $useragent;
$this->timeout = $timeout;
$this->max_checked_feeds = $max_checked_feeds;
+ $this->force_fsockopen = $force_fsockopen;
+ $this->curl_options = $curl_options;
if (class_exists('DOMDocument'))
{
@@ -154,14 +158,8 @@ class SimplePie_Locator
{
$mime_types[] = 'text/html';
}
- if (in_array($sniffed, $mime_types))
- {
- return true;
- }
- else
- {
- return false;
- }
+
+ return in_array($sniffed, $mime_types);
}
elseif ($file->method & SIMPLEPIE_FILE_SOURCE_LOCAL)
{
@@ -210,10 +208,8 @@ class SimplePie_Locator
{
return array_values($feeds);
}
- else
- {
- return null;
- }
+
+ return null;
}
protected function search_elements_by_tag($name, &$done, $feeds)
@@ -254,7 +250,7 @@ class SimplePie_Locator
$headers = array(
'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
);
- $feed = $this->registry->create('File', array($href, $this->timeout, 5, $headers, $this->useragent));
+ $feed = $this->registry->create('File', array($href, $this->timeout, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options));
if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed, true))
{
$feeds[$href] = $feed;
@@ -384,7 +380,7 @@ class SimplePie_Locator
$headers = array(
'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
);
- $feed = $this->registry->create('File', array($value, $this->timeout, 5, $headers, $this->useragent));
+ $feed = $this->registry->create('File', array($value, $this->timeout, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options));
if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed))
{
return array($feed);
@@ -406,13 +402,13 @@ class SimplePie_Locator
{
break;
}
- if (preg_match('/(rss|rdf|atom|xml)/i', $value))
+ if (preg_match('/(feed|rss|rdf|atom|xml)/i', $value))
{
$this->checked_feeds++;
$headers = array(
'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
);
- $feed = $this->registry->create('File', array($value, $this->timeout, 5, null, $this->useragent));
+ $feed = $this->registry->create('File', array($value, $this->timeout, 5, null, $this->useragent, $this->force_fsockopen, $this->curl_options));
if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed))
{
return array($feed);
@@ -426,4 +422,3 @@ class SimplePie_Locator
return null;
}
}
-
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Misc.php b/vendor/simplepie/simplepie/library/SimplePie/Misc.php
index 2e3107eb4..2a2ecc575 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Misc.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Misc.php
@@ -217,10 +217,8 @@ class SimplePie_Misc
{
return substr_replace($url, 'itpc', 0, 4);
}
- else
- {
- return $url;
- }
+
+ return $url;
}
public static function array_merge_recursive($array1, $array2)
@@ -234,9 +232,9 @@ class SimplePie_Misc
else
{
$array1[$key] = $value;
- }
+ }
}
-
+
return $array1;
}
@@ -276,10 +274,8 @@ class SimplePie_Misc
{
return chr($integer);
}
- else
- {
- return strtoupper($match[0]);
- }
+
+ return strtoupper($match[0]);
}
/**
@@ -343,11 +339,9 @@ class SimplePie_Misc
{
return $return;
}
+
// If we can't do anything, just fail
- else
- {
- return false;
- }
+ return false;
}
protected static function change_encoding_mbstring($data, $input, $output)
@@ -1858,10 +1852,8 @@ class SimplePie_Misc
{
return trim($mime);
}
- else
- {
- return trim(substr($mime, 0, $pos));
- }
+
+ return trim(substr($mime, 0, $pos));
}
public static function atom_03_construct_type($attribs)
@@ -1894,10 +1886,8 @@ class SimplePie_Misc
return SIMPLEPIE_CONSTRUCT_NONE | $mode;
}
}
- else
- {
- return SIMPLEPIE_CONSTRUCT_TEXT | $mode;
- }
+
+ return SIMPLEPIE_CONSTRUCT_TEXT | $mode;
}
public static function atom_10_construct_type($attribs)
@@ -1947,10 +1937,8 @@ class SimplePie_Misc
return SIMPLEPIE_CONSTRUCT_BASE64;
}
}
- else
- {
- return SIMPLEPIE_CONSTRUCT_TEXT;
- }
+
+ return SIMPLEPIE_CONSTRUCT_TEXT;
}
public static function is_isegment_nz_nc($string)
@@ -2007,11 +1995,9 @@ class SimplePie_Misc
{
return chr(0xf0 | ($codepoint >> 18)) . chr(0x80 | (($codepoint >> 12) & 0x3f)) . chr(0x80 | (($codepoint >> 6) & 0x3f)) . chr(0x80 | ($codepoint & 0x3f));
}
- else
- {
- // U+FFFD REPLACEMENT CHARACTER
- return "\xEF\xBF\xBD";
- }
+
+ // U+FFFD REPLACEMENT CHARACTER
+ return "\xEF\xBF\xBD";
}
/**
@@ -2215,10 +2201,8 @@ function embed_wmedia(width, height, link) {
{
return filemtime(dirname(__FILE__) . '/Core.php');
}
- else
- {
- return filemtime(__FILE__);
- }
+
+ return filemtime(__FILE__);
}
/**
@@ -2276,4 +2260,3 @@ function embed_wmedia(width, height, link) {
// No-op
}
}
-
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Net/IPv6.php b/vendor/simplepie/simplepie/library/SimplePie/Net/IPv6.php
index 47658aff2..a054e8be5 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Net/IPv6.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Net/IPv6.php
@@ -173,10 +173,8 @@ class SimplePie_Net_IPv6
{
return implode(':', $ip_parts);
}
- else
- {
- return $ip_parts[0];
- }
+
+ return $ip_parts[0];
}
/**
@@ -200,10 +198,8 @@ class SimplePie_Net_IPv6
$ipv4_part = substr($ip, $pos + 1);
return array($ipv6_part, $ipv4_part);
}
- else
- {
- return array($ip, '');
- }
+
+ return array($ip, '');
}
/**
@@ -253,10 +249,8 @@ class SimplePie_Net_IPv6
}
return true;
}
- else
- {
- return false;
- }
+
+ return false;
}
/**
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Parse/Date.php b/vendor/simplepie/simplepie/library/SimplePie/Parse/Date.php
index 1f2156655..95843c5e9 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Parse/Date.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Parse/Date.php
@@ -145,6 +145,14 @@ class SimplePie_Parse_Date
'ΠαÏ' => 5,
'Σαβ' => 6,
'ΚυÏ' => 7,
+ // Russian
+ 'Пн.' => 1,
+ 'Ð’Ñ‚.' => 2,
+ 'Ср.' => 3,
+ 'Чт.' => 4,
+ 'Пт.' => 5,
+ 'Сб.' => 6,
+ 'Ð’Ñ.' => 7,
);
/**
@@ -289,7 +297,33 @@ class SimplePie_Parse_Date
'Σεπ' => 9,
'Οκτ' => 10,
'Îοέ' => 11,
- 'Δεκ' => 12,
+ 'Δεκ' => 12,
+ // Russian
+ 'Янв' => 1,
+ 'ÑнварÑ' => 1,
+ 'Фев' => 2,
+ 'февралÑ' => 2,
+ 'Мар' => 3,
+ 'марта' => 3,
+ 'Ðпр' => 4,
+ 'апрелÑ' => 4,
+ 'Май' => 5,
+ 'маÑ' => 5,
+ 'Июн' => 6,
+ 'июнÑ' => 6,
+ 'Июл' => 7,
+ 'июлÑ' => 7,
+ 'Ðвг' => 8,
+ 'авгуÑта' => 8,
+ 'Сен' => 9,
+ 'ÑентÑбрÑ' => 9,
+ 'Окт' => 10,
+ 'октÑбрÑ' => 10,
+ 'ÐоÑ' => 11,
+ 'ноÑбрÑ' => 11,
+ 'Дек' => 12,
+ 'декабрÑ' => 12,
+
);
/**
@@ -541,8 +575,8 @@ class SimplePie_Parse_Date
*/
public function __construct()
{
- $this->day_pcre = '(' . implode(array_keys($this->day), '|') . ')';
- $this->month_pcre = '(' . implode(array_keys($this->month), '|') . ')';
+ $this->day_pcre = '(' . implode('|', array_keys($this->day)) . ')';
+ $this->month_pcre = '(' . implode('|', array_keys($this->month)) . ')';
static $cache;
if (!isset($cache[get_class($this)]))
@@ -690,14 +724,12 @@ class SimplePie_Parse_Date
}
// Convert the number of seconds to an integer, taking decimals into account
- $second = round((int)$match[6] + (int)$match[7] / pow(10, strlen($match[7])));
+ $second = round((int)$match[6] + (int)$match[7] / (10 ** strlen($match[7])));
return gmmktime($match[4], $match[5], $second, $match[2], $match[3], $match[1]) - $timezone;
}
- else
- {
- return false;
- }
+
+ return false;
}
/**
@@ -848,10 +880,8 @@ class SimplePie_Parse_Date
return gmmktime($match[5], $match[6], $second, $month, $match[2], $match[4]) - $timezone;
}
- else
- {
- return false;
- }
+
+ return false;
}
/**
@@ -913,10 +943,8 @@ class SimplePie_Parse_Date
return gmmktime($match[5], $match[6], $match[7], $month, $match[2], $match[4]) - $timezone;
}
- else
- {
- return false;
- }
+
+ return false;
}
/**
@@ -955,10 +983,8 @@ class SimplePie_Parse_Date
$month = $this->month[strtolower($match[2])];
return gmmktime($match[4], $match[5], $match[6], $month, $match[3], $match[7]);
}
- else
- {
- return false;
- }
+
+ return false;
}
/**
@@ -974,10 +1000,7 @@ class SimplePie_Parse_Date
{
return false;
}
- else
- {
- return $strtotime;
- }
+
+ return $strtotime;
}
}
-
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Parser.php b/vendor/simplepie/simplepie/library/SimplePie/Parser.php
index df1234023..3cef2287d 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Parser.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Parser.php
@@ -176,76 +176,72 @@ class SimplePie_Parser
xml_parser_free($xml);
return $return;
}
- else
+
+ libxml_clear_errors();
+ $xml = new XMLReader();
+ $xml->xml($data);
+ while (@$xml->read())
{
- libxml_clear_errors();
- $xml = new XMLReader();
- $xml->xml($data);
- while (@$xml->read())
+ switch ($xml->nodeType)
{
- switch ($xml->nodeType)
- {
- case constant('XMLReader::END_ELEMENT'):
+ case constant('XMLReader::END_ELEMENT'):
+ if ($xml->namespaceURI !== '')
+ {
+ $tagName = $xml->namespaceURI . $this->separator . $xml->localName;
+ }
+ else
+ {
+ $tagName = $xml->localName;
+ }
+ $this->tag_close(null, $tagName);
+ break;
+ case constant('XMLReader::ELEMENT'):
+ $empty = $xml->isEmptyElement;
+ if ($xml->namespaceURI !== '')
+ {
+ $tagName = $xml->namespaceURI . $this->separator . $xml->localName;
+ }
+ else
+ {
+ $tagName = $xml->localName;
+ }
+ $attributes = array();
+ while ($xml->moveToNextAttribute())
+ {
if ($xml->namespaceURI !== '')
{
- $tagName = $xml->namespaceURI . $this->separator . $xml->localName;
+ $attrName = $xml->namespaceURI . $this->separator . $xml->localName;
}
else
{
- $tagName = $xml->localName;
+ $attrName = $xml->localName;
}
+ $attributes[$attrName] = $xml->value;
+ }
+ $this->tag_open(null, $tagName, $attributes);
+ if ($empty)
+ {
$this->tag_close(null, $tagName);
- break;
- case constant('XMLReader::ELEMENT'):
- $empty = $xml->isEmptyElement;
- if ($xml->namespaceURI !== '')
- {
- $tagName = $xml->namespaceURI . $this->separator . $xml->localName;
- }
- else
- {
- $tagName = $xml->localName;
- }
- $attributes = array();
- while ($xml->moveToNextAttribute())
- {
- if ($xml->namespaceURI !== '')
- {
- $attrName = $xml->namespaceURI . $this->separator . $xml->localName;
- }
- else
- {
- $attrName = $xml->localName;
- }
- $attributes[$attrName] = $xml->value;
- }
- $this->tag_open(null, $tagName, $attributes);
- if ($empty)
- {
- $this->tag_close(null, $tagName);
- }
- break;
- case constant('XMLReader::TEXT'):
+ }
+ break;
+ case constant('XMLReader::TEXT'):
- case constant('XMLReader::CDATA'):
- $this->cdata(null, $xml->value);
- break;
- }
- }
- if ($error = libxml_get_last_error())
- {
- $this->error_code = $error->code;
- $this->error_string = $error->message;
- $this->current_line = $error->line;
- $this->current_column = $error->column;
- return false;
- }
- else
- {
- return true;
+ case constant('XMLReader::CDATA'):
+ $this->cdata(null, $xml->value);
+ break;
}
}
+ if ($error = libxml_get_last_error())
+ {
+ $this->error_code = $error->code;
+ $this->error_string = $error->message;
+ $this->current_line = $error->line;
+ $this->current_column = $error->column;
+ return false;
+ }
+
+ return true;
}
public function get_error_code()
@@ -662,4 +658,4 @@ class SimplePie_Parser
// html is allowed, but the xml specification says they must be declared.
return '<!DOCTYPE html [ <!ENTITY nbsp "&#x00A0;"> <!ENTITY iexcl "&#x00A1;"> <!ENTITY cent "&#x00A2;"> <!ENTITY pound "&#x00A3;"> <!ENTITY curren "&#x00A4;"> <!ENTITY yen "&#x00A5;"> <!ENTITY brvbar "&#x00A6;"> <!ENTITY sect "&#x00A7;"> <!ENTITY uml "&#x00A8;"> <!ENTITY copy "&#x00A9;"> <!ENTITY ordf "&#x00AA;"> <!ENTITY laquo "&#x00AB;"> <!ENTITY not "&#x00AC;"> <!ENTITY shy "&#x00AD;"> <!ENTITY reg "&#x00AE;"> <!ENTITY macr "&#x00AF;"> <!ENTITY deg "&#x00B0;"> <!ENTITY plusmn "&#x00B1;"> <!ENTITY sup2 "&#x00B2;"> <!ENTITY sup3 "&#x00B3;"> <!ENTITY acute "&#x00B4;"> <!ENTITY micro "&#x00B5;"> <!ENTITY para "&#x00B6;"> <!ENTITY middot "&#x00B7;"> <!ENTITY cedil "&#x00B8;"> <!ENTITY sup1 "&#x00B9;"> <!ENTITY ordm "&#x00BA;"> <!ENTITY raquo "&#x00BB;"> <!ENTITY frac14 "&#x00BC;"> <!ENTITY frac12 "&#x00BD;"> <!ENTITY frac34 "&#x00BE;"> <!ENTITY iquest "&#x00BF;"> <!ENTITY Agrave "&#x00C0;"> <!ENTITY Aacute "&#x00C1;"> <!ENTITY Acirc "&#x00C2;"> <!ENTITY Atilde "&#x00C3;"> <!ENTITY Auml "&#x00C4;"> <!ENTITY Aring "&#x00C5;"> <!ENTITY AElig "&#x00C6;"> <!ENTITY Ccedil "&#x00C7;"> <!ENTITY Egrave "&#x00C8;"> <!ENTITY Eacute "&#x00C9;"> <!ENTITY Ecirc "&#x00CA;"> <!ENTITY Euml "&#x00CB;"> <!ENTITY Igrave "&#x00CC;"> <!ENTITY Iacute "&#x00CD;"> <!ENTITY Icirc "&#x00CE;"> <!ENTITY Iuml "&#x00CF;"> <!ENTITY ETH "&#x00D0;"> <!ENTITY Ntilde "&#x00D1;"> <!ENTITY Ograve "&#x00D2;"> <!ENTITY Oacute "&#x00D3;"> <!ENTITY Ocirc "&#x00D4;"> <!ENTITY Otilde "&#x00D5;"> <!ENTITY Ouml "&#x00D6;"> <!ENTITY times "&#x00D7;"> <!ENTITY Oslash "&#x00D8;"> <!ENTITY Ugrave "&#x00D9;"> <!ENTITY Uacute "&#x00DA;"> <!ENTITY Ucirc "&#x00DB;"> <!ENTITY Uuml "&#x00DC;"> <!ENTITY Yacute "&#x00DD;"> <!ENTITY THORN "&#x00DE;"> <!ENTITY szlig "&#x00DF;"> <!ENTITY agrave "&#x00E0;"> <!ENTITY aacute "&#x00E1;"> <!ENTITY acirc "&#x00E2;"> <!ENTITY atilde "&#x00E3;"> <!ENTITY auml "&#x00E4;"> <!ENTITY aring "&#x00E5;"> <!ENTITY aelig "&#x00E6;"> <!ENTITY ccedil "&#x00E7;"> <!ENTITY egrave "&#x00E8;"> <!ENTITY eacute "&#x00E9;"> <!ENTITY ecirc "&#x00EA;"> <!ENTITY euml "&#x00EB;"> <!ENTITY igrave "&#x00EC;"> <!ENTITY iacute "&#x00ED;"> <!ENTITY icirc "&#x00EE;"> <!ENTITY iuml "&#x00EF;"> <!ENTITY eth "&#x00F0;"> <!ENTITY ntilde "&#x00F1;"> <!ENTITY ograve "&#x00F2;"> <!ENTITY oacute "&#x00F3;"> <!ENTITY ocirc "&#x00F4;"> <!ENTITY otilde "&#x00F5;"> <!ENTITY ouml "&#x00F6;"> <!ENTITY divide "&#x00F7;"> <!ENTITY oslash "&#x00F8;"> <!ENTITY ugrave "&#x00F9;"> <!ENTITY uacute "&#x00FA;"> <!ENTITY ucirc "&#x00FB;"> <!ENTITY uuml "&#x00FC;"> <!ENTITY yacute "&#x00FD;"> <!ENTITY thorn "&#x00FE;"> <!ENTITY yuml "&#x00FF;"> <!ENTITY OElig "&#x0152;"> <!ENTITY oelig "&#x0153;"> <!ENTITY Scaron "&#x0160;"> <!ENTITY scaron "&#x0161;"> <!ENTITY Yuml "&#x0178;"> <!ENTITY fnof "&#x0192;"> <!ENTITY circ "&#x02C6;"> <!ENTITY tilde "&#x02DC;"> <!ENTITY Alpha "&#x0391;"> <!ENTITY Beta "&#x0392;"> <!ENTITY Gamma "&#x0393;"> <!ENTITY Epsilon "&#x0395;"> <!ENTITY Zeta "&#x0396;"> <!ENTITY Eta "&#x0397;"> <!ENTITY Theta "&#x0398;"> <!ENTITY Iota "&#x0399;"> <!ENTITY Kappa "&#x039A;"> <!ENTITY Lambda "&#x039B;"> <!ENTITY Mu "&#x039C;"> <!ENTITY Nu "&#x039D;"> <!ENTITY Xi "&#x039E;"> <!ENTITY Omicron "&#x039F;"> <!ENTITY Pi "&#x03A0;"> <!ENTITY Rho "&#x03A1;"> <!ENTITY Sigma "&#x03A3;"> <!ENTITY Tau "&#x03A4;"> <!ENTITY Upsilon "&#x03A5;"> <!ENTITY Phi "&#x03A6;"> <!ENTITY Chi "&#x03A7;"> <!ENTITY Psi "&#x03A8;"> <!ENTITY Omega "&#x03A9;"> <!ENTITY alpha "&#x03B1;"> <!ENTITY beta "&#x03B2;"> <!ENTITY gamma "&#x03B3;"> <!ENTITY delta "&#x03B4;"> <!ENTITY epsilon "&#x03B5;"> <!ENTITY zeta "&#x03B6;"> <!ENTITY eta "&#x03B7;"> <!ENTITY theta "&#x03B8;"> <!ENTITY iota "&#x03B9;"> <!ENTITY kappa "&#x03BA;"> <!ENTITY lambda "&#x03BB;"> <!ENTITY mu "&#x03BC;"> <!ENTITY nu "&#x03BD;"> <!ENTITY xi "&#x03BE;"> <!ENTITY omicron "&#x03BF;"> <!ENTITY pi "&#x03C0;"> <!ENTITY rho "&#x03C1;"> <!ENTITY sigmaf "&#x03C2;"> <!ENTITY sigma "&#x03C3;"> <!ENTITY tau "&#x03C4;"> <!ENTITY upsilon "&#x03C5;"> <!ENTITY phi "&#x03C6;"> <!ENTITY chi "&#x03C7;"> <!ENTITY psi "&#x03C8;"> <!ENTITY omega "&#x03C9;"> <!ENTITY thetasym "&#x03D1;"> <!ENTITY upsih "&#x03D2;"> <!ENTITY piv "&#x03D6;"> <!ENTITY ensp "&#x2002;"> <!ENTITY emsp "&#x2003;"> <!ENTITY thinsp "&#x2009;"> <!ENTITY zwnj "&#x200C;"> <!ENTITY zwj "&#x200D;"> <!ENTITY lrm "&#x200E;"> <!ENTITY rlm "&#x200F;"> <!ENTITY ndash "&#x2013;"> <!ENTITY mdash "&#x2014;"> <!ENTITY lsquo "&#x2018;"> <!ENTITY rsquo "&#x2019;"> <!ENTITY sbquo "&#x201A;"> <!ENTITY ldquo "&#x201C;"> <!ENTITY rdquo "&#x201D;"> <!ENTITY bdquo "&#x201E;"> <!ENTITY dagger "&#x2020;"> <!ENTITY Dagger "&#x2021;"> <!ENTITY bull "&#x2022;"> <!ENTITY hellip "&#x2026;"> <!ENTITY permil "&#x2030;"> <!ENTITY prime "&#x2032;"> <!ENTITY Prime "&#x2033;"> <!ENTITY lsaquo "&#x2039;"> <!ENTITY rsaquo "&#x203A;"> <!ENTITY oline "&#x203E;"> <!ENTITY frasl "&#x2044;"> <!ENTITY euro "&#x20AC;"> <!ENTITY image "&#x2111;"> <!ENTITY weierp "&#x2118;"> <!ENTITY real "&#x211C;"> <!ENTITY trade "&#x2122;"> <!ENTITY alefsym "&#x2135;"> <!ENTITY larr "&#x2190;"> <!ENTITY uarr "&#x2191;"> <!ENTITY rarr "&#x2192;"> <!ENTITY darr "&#x2193;"> <!ENTITY harr "&#x2194;"> <!ENTITY crarr "&#x21B5;"> <!ENTITY lArr "&#x21D0;"> <!ENTITY uArr "&#x21D1;"> <!ENTITY rArr "&#x21D2;"> <!ENTITY dArr "&#x21D3;"> <!ENTITY hArr "&#x21D4;"> <!ENTITY forall "&#x2200;"> <!ENTITY part "&#x2202;"> <!ENTITY exist "&#x2203;"> <!ENTITY empty "&#x2205;"> <!ENTITY nabla "&#x2207;"> <!ENTITY isin "&#x2208;"> <!ENTITY notin "&#x2209;"> <!ENTITY ni "&#x220B;"> <!ENTITY prod "&#x220F;"> <!ENTITY sum "&#x2211;"> <!ENTITY minus "&#x2212;"> <!ENTITY lowast "&#x2217;"> <!ENTITY radic "&#x221A;"> <!ENTITY prop "&#x221D;"> <!ENTITY infin "&#x221E;"> <!ENTITY ang "&#x2220;"> <!ENTITY and "&#x2227;"> <!ENTITY or "&#x2228;"> <!ENTITY cap "&#x2229;"> <!ENTITY cup "&#x222A;"> <!ENTITY int "&#x222B;"> <!ENTITY there4 "&#x2234;"> <!ENTITY sim "&#x223C;"> <!ENTITY cong "&#x2245;"> <!ENTITY asymp "&#x2248;"> <!ENTITY ne "&#x2260;"> <!ENTITY equiv "&#x2261;"> <!ENTITY le "&#x2264;"> <!ENTITY ge "&#x2265;"> <!ENTITY sub "&#x2282;"> <!ENTITY sup "&#x2283;"> <!ENTITY nsub "&#x2284;"> <!ENTITY sube "&#x2286;"> <!ENTITY supe "&#x2287;"> <!ENTITY oplus "&#x2295;"> <!ENTITY otimes "&#x2297;"> <!ENTITY perp "&#x22A5;"> <!ENTITY sdot "&#x22C5;"> <!ENTITY lceil "&#x2308;"> <!ENTITY rceil "&#x2309;"> <!ENTITY lfloor "&#x230A;"> <!ENTITY rfloor "&#x230B;"> <!ENTITY lang "&#x2329;"> <!ENTITY rang "&#x232A;"> <!ENTITY loz "&#x25CA;"> <!ENTITY spades "&#x2660;"> <!ENTITY clubs "&#x2663;"> <!ENTITY hearts "&#x2665;"> <!ENTITY diams "&#x2666;"> ]>';
}
-} \ No newline at end of file
+}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Rating.php b/vendor/simplepie/simplepie/library/SimplePie/Rating.php
index eaf57080c..108dd22bf 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Rating.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Rating.php
@@ -103,10 +103,8 @@ class SimplePie_Rating
{
return $this->scheme;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -120,9 +118,7 @@ class SimplePie_Rating
{
return $this->value;
}
- else
- {
- return null;
- }
+
+ return null;
}
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Restriction.php b/vendor/simplepie/simplepie/library/SimplePie/Restriction.php
index 001a5cd28..803d84fde 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Restriction.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Restriction.php
@@ -112,10 +112,8 @@ class SimplePie_Restriction
{
return $this->relationship;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -129,10 +127,8 @@ class SimplePie_Restriction
{
return $this->type;
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -146,9 +142,7 @@ class SimplePie_Restriction
{
return $this->value;
}
- else
- {
- return null;
- }
+
+ return null;
}
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Sanitize.php b/vendor/simplepie/simplepie/library/SimplePie/Sanitize.php
index 5a11721df..40b066266 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Sanitize.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Sanitize.php
@@ -354,7 +354,7 @@ class SimplePie_Sanitize
}
else
{
- trigger_error("$this->cache_location is not writeable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
+ trigger_error("$this->cache_location is not writable. Make sure you've set the correct relative or absolute path, and that the location is server-writable.", E_USER_WARNING);
}
}
}
diff --git a/vendor/simplepie/simplepie/library/SimplePie/Source.php b/vendor/simplepie/simplepie/library/SimplePie/Source.php
index 1a66a392d..8fac13ef7 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/Source.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/Source.php
@@ -79,10 +79,8 @@ class SimplePie_Source
{
return $this->data['child'][$namespace][$tag];
}
- else
- {
- return null;
- }
+
+ return null;
}
public function get_base($element = array())
@@ -130,10 +128,8 @@ class SimplePie_Source
{
return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
}
- else
- {
- return null;
- }
+
+ return null;
}
public function get_category($key = 0)
@@ -143,10 +139,8 @@ class SimplePie_Source
{
return $categories[$key];
}
- else
- {
- return null;
- }
+
+ return null;
}
public function get_categories()
@@ -200,10 +194,8 @@ class SimplePie_Source
{
return array_unique($categories);
}
- else
- {
- return null;
- }
+
+ return null;
}
public function get_author($key = 0)
@@ -213,10 +205,8 @@ class SimplePie_Source
{
return $authors[$key];
}
- else
- {
- return null;
- }
+
+ return null;
}
public function get_authors()
@@ -283,10 +273,8 @@ class SimplePie_Source
{
return array_unique($authors);
}
- else
- {
- return null;
- }
+
+ return null;
}
public function get_contributor($key = 0)
@@ -296,10 +284,8 @@ class SimplePie_Source
{
return $contributors[$key];
}
- else
- {
- return null;
- }
+
+ return null;
}
public function get_contributors()
@@ -354,10 +340,8 @@ class SimplePie_Source
{
return array_unique($contributors);
}
- else
- {
- return null;
- }
+
+ return null;
}
public function get_link($key = 0, $rel = 'alternate')
@@ -367,10 +351,8 @@ class SimplePie_Source
{
return $links[$key];
}
- else
- {
- return null;
- }
+
+ return null;
}
/**
@@ -449,10 +431,8 @@ class SimplePie_Source
{
return $this->data['links'][$rel];
}
- else
- {
- return null;
- }
+
+ return null;
}
public function get_description()
@@ -493,10 +473,8 @@ class SimplePie_Source
{
return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
}
- else
- {
- return null;
- }
+
+ return null;
}
public function get_copyright()
@@ -521,10 +499,8 @@ class SimplePie_Source
{
return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
}
- else
- {
- return null;
- }
+
+ return null;
}
public function get_language()
@@ -545,10 +521,8 @@ class SimplePie_Source
{
return $this->sanitize($this->data['xml_lang'], SIMPLEPIE_CONSTRUCT_TEXT);
}
- else
- {
- return null;
- }
+
+ return null;
}
public function get_latitude()
@@ -561,10 +535,8 @@ class SimplePie_Source
{
return (float) $match[1];
}
- else
- {
- return null;
- }
+
+ return null;
}
public function get_longitude()
@@ -581,10 +553,8 @@ class SimplePie_Source
{
return (float) $match[2];
}
- else
- {
- return null;
- }
+
+ return null;
}
public function get_image_url()
@@ -601,10 +571,7 @@ class SimplePie_Source
{
return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_IRI, $this->get_base($return[0]));
}
- else
- {
- return null;
- }
+
+ return null;
}
}
-
diff --git a/vendor/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php b/vendor/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php
index 99e751672..18ca1b79b 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/XML/Declaration/Parser.php
@@ -136,13 +136,11 @@ class SimplePie_XML_Declaration_Parser
{
return true;
}
- else
- {
- $this->version = '';
- $this->encoding = '';
- $this->standalone = '';
- return false;
- }
+
+ $this->version = '';
+ $this->encoding = '';
+ $this->standalone = '';
+ return false;
}
/**
diff --git a/vendor/simplepie/simplepie/library/SimplePie/gzdecode.php b/vendor/simplepie/simplepie/library/SimplePie/gzdecode.php
index 0e8bc8fc6..f4aeafa28 100644
--- a/vendor/simplepie/simplepie/library/SimplePie/gzdecode.php
+++ b/vendor/simplepie/simplepie/library/SimplePie/gzdecode.php
@@ -338,10 +338,8 @@ class SimplePie_gzdecode
{
return false;
}
- else
- {
- $this->position = $this->compressed_size - 8;
- }
+
+ $this->position = $this->compressed_size - 8;
// Check CRC of data
$crc = current(unpack('V', substr($this->compressed_data, $this->position, 4)));
@@ -362,9 +360,7 @@ class SimplePie_gzdecode
// Wow, against all odds, we've actually got a valid gzip string
return true;
}
- else
- {
- return false;
- }
+
+ return false;
}
}
diff --git a/vendor/splitbrain/php-archive/src/Archive.php b/vendor/splitbrain/php-archive/src/Archive.php
index d672cc6ec..45c87fda6 100644
--- a/vendor/splitbrain/php-archive/src/Archive.php
+++ b/vendor/splitbrain/php-archive/src/Archive.php
@@ -10,12 +10,15 @@ abstract class Archive
const COMPRESS_GZIP = 1;
const COMPRESS_BZIP = 2;
+ /** @var callable */
+ protected $callback;
+
/**
* Set the compression level and type
*
* @param int $level Compression level (0 to 9)
* @param int $type Type of compression to use (use COMPRESS_* constants)
- * @return mixed
+ * @throws ArchiveIllegalCompressionException
*/
abstract public function setCompression($level = 9, $type = Archive::COMPRESS_AUTO);
@@ -117,16 +120,16 @@ abstract class Archive
*/
abstract public function save($file);
-}
-
-class ArchiveIOException extends \Exception
-{
-}
-
-class ArchiveIllegalCompressionException extends \Exception
-{
-}
-
-class ArchiveCorruptedException extends \Exception
-{
+ /**
+ * Set a callback function to be called whenever a file is added or extracted.
+ *
+ * The callback is called with a FileInfo object as parameter. You can use this to show progress
+ * info during an operation.
+ *
+ * @param callable $callback
+ */
+ public function setCallback($callback)
+ {
+ $this->callback = $callback;
+ }
}
diff --git a/vendor/splitbrain/php-archive/src/ArchiveCorruptedException.php b/vendor/splitbrain/php-archive/src/ArchiveCorruptedException.php
new file mode 100644
index 000000000..a87cff4ff
--- /dev/null
+++ b/vendor/splitbrain/php-archive/src/ArchiveCorruptedException.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace splitbrain\PHPArchive;
+
+/**
+ * The archive is unreadable
+ */
+class ArchiveCorruptedException extends \Exception
+{
+} \ No newline at end of file
diff --git a/vendor/splitbrain/php-archive/src/ArchiveIOException.php b/vendor/splitbrain/php-archive/src/ArchiveIOException.php
new file mode 100644
index 000000000..6128caf2f
--- /dev/null
+++ b/vendor/splitbrain/php-archive/src/ArchiveIOException.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace splitbrain\PHPArchive;
+
+/**
+ * Read/Write Errors
+ */
+class ArchiveIOException extends \Exception
+{
+} \ No newline at end of file
diff --git a/vendor/splitbrain/php-archive/src/ArchiveIllegalCompressionException.php b/vendor/splitbrain/php-archive/src/ArchiveIllegalCompressionException.php
new file mode 100644
index 000000000..40a680f37
--- /dev/null
+++ b/vendor/splitbrain/php-archive/src/ArchiveIllegalCompressionException.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace splitbrain\PHPArchive;
+
+/**
+ * Bad or unsupported compression settings requested
+ */
+class ArchiveIllegalCompressionException extends \Exception
+{
+} \ No newline at end of file
diff --git a/vendor/splitbrain/php-archive/src/FileInfo.php b/vendor/splitbrain/php-archive/src/FileInfo.php
index 99f60c0fe..11fca7e4f 100644
--- a/vendor/splitbrain/php-archive/src/FileInfo.php
+++ b/vendor/splitbrain/php-archive/src/FileInfo.php
@@ -288,7 +288,6 @@ class FileInfo
* the prefix will be stripped. It is recommended to give prefixes with a trailing slash.
*
* @param int|string $strip
- * @return FileInfo
*/
public function strip($strip)
{
@@ -339,6 +338,3 @@ class FileInfo
}
}
-class FileInfoException extends \Exception
-{
-} \ No newline at end of file
diff --git a/vendor/splitbrain/php-archive/src/FileInfoException.php b/vendor/splitbrain/php-archive/src/FileInfoException.php
new file mode 100644
index 000000000..9c6acaac2
--- /dev/null
+++ b/vendor/splitbrain/php-archive/src/FileInfoException.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace splitbrain\PHPArchive;
+
+/**
+ * File meta data problems
+ */
+class FileInfoException extends \Exception
+{
+} \ No newline at end of file
diff --git a/vendor/splitbrain/php-archive/src/Tar.php b/vendor/splitbrain/php-archive/src/Tar.php
index 5f01f39bd..9550b6c91 100644
--- a/vendor/splitbrain/php-archive/src/Tar.php
+++ b/vendor/splitbrain/php-archive/src/Tar.php
@@ -28,12 +28,15 @@ class Tar extends Archive
* Sets the compression to use
*
* @param int $level Compression level (0 to 9)
- * @param int $type Type of compression to use (use COMPRESS_* constants)
- * @return mixed
+ * @param int $type Type of compression to use (use COMPRESS_* constants)
+ * @throws ArchiveIllegalCompressionException
*/
public function setCompression($level = 9, $type = Archive::COMPRESS_AUTO)
{
$this->compressioncheck($type);
+ if ($level < -1 || $level > 9) {
+ throw new ArchiveIllegalCompressionException('Compression level should be between -1 and 9');
+ }
$this->comptype = $type;
$this->complevel = $level;
if($level == 0) $this->comptype = Archive::COMPRESS_NONE;
@@ -45,6 +48,7 @@ class Tar extends Archive
*
* @param string $file
* @throws ArchiveIOException
+ * @throws ArchiveIllegalCompressionException
*/
public function open($file)
{
@@ -79,6 +83,7 @@ class Tar extends Archive
* Reopen the file with open() again if you want to do additional operations
*
* @throws ArchiveIOException
+ * @throws ArchiveCorruptedException
* @returns FileInfo[]
*/
public function contents()
@@ -120,11 +125,12 @@ class Tar extends Archive
* The archive is closed afer reading the contents, because rewinding is not possible in bzip2 streams.
* Reopen the file with open() again if you want to do additional operations
*
- * @param string $outdir the target directory for extracting
- * @param int|string $strip either the number of path components or a fixed prefix to strip
- * @param string $exclude a regular expression of files to exclude
- * @param string $include a regular expression of files to include
+ * @param string $outdir the target directory for extracting
+ * @param int|string $strip either the number of path components or a fixed prefix to strip
+ * @param string $exclude a regular expression of files to exclude
+ * @param string $include a regular expression of files to include
* @throws ArchiveIOException
+ * @throws ArchiveCorruptedException
* @return FileInfo[]
*/
public function extract($outdir, $strip = '', $exclude = '', $include = '')
@@ -178,12 +184,15 @@ class Tar extends Archive
}
fclose($fp);
- touch($output, $fileinfo->getMtime());
- chmod($output, $fileinfo->getMode());
+ @touch($output, $fileinfo->getMtime());
+ @chmod($output, $fileinfo->getMode());
} else {
$this->skipbytes(ceil($header['size'] / 512) * 512); // the size is usually 0 for directories
}
+ if(is_callable($this->callback)) {
+ call_user_func($this->callback, $fileinfo);
+ }
$extracted[] = $fileinfo;
}
@@ -198,6 +207,7 @@ class Tar extends Archive
*
* @param string $file
* @throws ArchiveIOException
+ * @throws ArchiveIllegalCompressionException
*/
public function create($file = '')
{
@@ -234,6 +244,7 @@ class Tar extends Archive
* @param string|FileInfo $fileinfo either the name to us in archive (string) or a FileInfo oject with all meta data, empty to take from original
* @throws ArchiveCorruptedException when the file changes while reading it, the archive will be corrupt and should be deleted
* @throws ArchiveIOException there was trouble reading the given file, it was not added
+ * @throws FileInfoException trouble reading file info, it was not added
*/
public function addFile($file, $fileinfo = '')
{
@@ -273,6 +284,10 @@ class Tar extends Archive
$this->close();
throw new ArchiveCorruptedException("The size of $file changed while reading, archive corrupted. read $read expected ".$fileinfo->getSize());
}
+
+ if(is_callable($this->callback)) {
+ call_user_func($this->callback, $fileinfo);
+ }
}
/**
@@ -299,6 +314,10 @@ class Tar extends Archive
for ($s = 0; $s < $len; $s += 512) {
$this->writebytes(pack("a512", substr($data, $s, 512)));
}
+
+ if (is_callable($this->callback)) {
+ call_user_func($this->callback, $fileinfo);
+ }
}
/**
@@ -311,6 +330,7 @@ class Tar extends Archive
* consists of two 512 blocks of zero bytes"
*
* @link http://www.gnu.org/software/tar/manual/html_chapter/tar_8.html#SEC134
+ * @throws ArchiveIOException
*/
public function close()
{
@@ -346,6 +366,7 @@ class Tar extends Archive
* Returns the created in-memory archive data
*
* This implicitly calls close() on the Archive
+ * @throws ArchiveIOException
*/
public function getArchive()
{
@@ -372,6 +393,7 @@ class Tar extends Archive
*
* @param string $file
* @throws ArchiveIOException
+ * @throws ArchiveIllegalCompressionException
*/
public function save($file)
{
@@ -451,9 +473,10 @@ class Tar extends Archive
}
/**
- * Write the given file metat data as header
+ * Write the given file meta data as header
*
* @param FileInfo $fileinfo
+ * @throws ArchiveIOException
*/
protected function writeFileHeader(FileInfo $fileinfo)
{
@@ -472,12 +495,13 @@ class Tar extends Archive
* Write a file header to the stream
*
* @param string $name
- * @param int $uid
- * @param int $gid
- * @param int $perm
- * @param int $size
- * @param int $mtime
+ * @param int $uid
+ * @param int $gid
+ * @param int $perm
+ * @param int $size
+ * @param int $mtime
* @param string $typeflag Set to '5' for directories
+ * @throws ArchiveIOException
*/
protected function writeRawFileHeader($name, $uid, $gid, $perm, $size, $mtime, $typeflag = '')
{
@@ -664,4 +688,5 @@ class Tar extends Archive
return Archive::COMPRESS_NONE;
}
+
}
diff --git a/vendor/splitbrain/php-archive/src/Zip.php b/vendor/splitbrain/php-archive/src/Zip.php
index e84516b63..3dade8063 100644
--- a/vendor/splitbrain/php-archive/src/Zip.php
+++ b/vendor/splitbrain/php-archive/src/Zip.php
@@ -34,10 +34,13 @@ class Zip extends Archive
*
* @param int $level Compression level (0 to 9)
* @param int $type Type of compression to use ignored for ZIP
- * @return mixed
+ * @throws ArchiveIllegalCompressionException
*/
public function setCompression($level = 9, $type = Archive::COMPRESS_AUTO)
{
+ if ($level < -1 || $level > 9) {
+ throw new ArchiveIllegalCompressionException('Compression level should be between -1 and 9');
+ }
$this->complevel = $level;
}
@@ -152,6 +155,9 @@ class Zip extends Archive
// nothing more to do for directories
if ($fileinfo->getIsdir()) {
+ if(is_callable($this->callback)) {
+ call_user_func($this->callback, $fileinfo);
+ }
continue;
}
@@ -226,8 +232,11 @@ class Zip extends Archive
unlink($extractto); // remove temporary gz file
}
- touch($output, $fileinfo->getMtime());
+ @touch($output, $fileinfo->getMtime());
//FIXME what about permissions?
+ if(is_callable($this->callback)) {
+ call_user_func($this->callback, $fileinfo);
+ }
}
$this->close();
@@ -271,9 +280,10 @@ class Zip extends Archive
/**
* Add a file to the current archive using an existing file in the filesystem
*
- * @param string $file path to the original file
+ * @param string $file path to the original file
* @param string|FileInfo $fileinfo either the name to use in archive (string) or a FileInfo oject with all meta data, empty to take from original
* @throws ArchiveIOException
+ * @throws FileInfoException
*/
public function addFile($file, $fileinfo = '')
{
@@ -350,6 +360,10 @@ class Zip extends Archive
$name,
(bool) $this->complevel
);
+
+ if(is_callable($this->callback)) {
+ call_user_func($this->callback, $fileinfo);
+ }
}
/**
@@ -357,6 +371,7 @@ class Zip extends Archive
*
* After a call to this function no more data can be added to the archive, for
* read access no reading is allowed anymore
+ * @throws ArchiveIOException
*/
public function close()
{
@@ -400,6 +415,7 @@ class Zip extends Archive
* Returns the created in-memory archive data
*
* This implicitly calls close() on the Archive
+ * @throws ArchiveIOException
*/
public function getArchive()
{
diff --git a/vendor/splitbrain/php-cli/src/CLI.php b/vendor/splitbrain/php-cli/src/CLI.php
index 569ec6756..a012e3991 100644
--- a/vendor/splitbrain/php-cli/src/CLI.php
+++ b/vendor/splitbrain/php-cli/src/CLI.php
@@ -77,7 +77,8 @@ abstract class CLI
* Execute the CLI program
*
* Executes the setup() routine, adds default options, initiate the options parsing and argument checking
- * and finally executes main()
+ * and finally executes main() - Each part is split into their own protected function below, so behaviour
+ * can easily be overwritten
*
* @throws Exception
*/
@@ -87,8 +88,24 @@ abstract class CLI
throw new Exception('This has to be run from the command line');
}
- // setup
$this->setup($this->options);
+ $this->registerDefaultOptions();
+ $this->parseOptions();
+ $this->handleDefaultOptions();
+ $this->setupLogging();
+ $this->checkArgments();
+ $this->execute();
+
+ exit(0);
+ }
+
+ // region run handlers - for easier overriding
+
+ /**
+ * Add the default help, color and log options
+ */
+ protected function registerDefaultOptions()
+ {
$this->options->registerOption(
'help',
'Display this help screen and exit immeadiately.',
@@ -105,11 +122,13 @@ abstract class CLI
null,
'level'
);
+ }
- // parse
- $this->options->parseOptions();
-
- // handle defaults
+ /**
+ * Handle the default options
+ */
+ protected function handleDefaultOptions()
+ {
if ($this->options->getOpt('no-colors')) {
$this->colors->disable();
}
@@ -117,22 +136,47 @@ abstract class CLI
echo $this->options->help();
exit(0);
}
+ }
+
+ /**
+ * Handle the logging options
+ */
+ protected function setupLogging()
+ {
$level = $this->options->getOpt('loglevel', $this->logdefault);
if (!isset($this->loglevel[$level])) $this->fatal('Unknown log level');
foreach (array_keys($this->loglevel) as $l) {
if ($l == $level) break;
unset($this->loglevel[$l]);
}
+ }
- // check arguments
+ /**
+ * Wrapper around the option parsing
+ */
+ protected function parseOptions()
+ {
+ $this->options->parseOptions();
+ }
+
+ /**
+ * Wrapper around the argument checking
+ */
+ protected function checkArgments()
+ {
$this->options->checkArguments();
+ }
- // execute
+ /**
+ * Wrapper around main
+ */
+ protected function execute()
+ {
$this->main($this->options);
-
- exit(0);
}
+ // endregion
+
// region logging
/**
@@ -286,7 +330,7 @@ abstract class CLI
/** @var string $color */
/** @var resource $channel */
list($prefix, $color, $channel) = $this->loglevel[$level];
- if(!$this->colors->isEnabled()) $prefix = '';
+ if (!$this->colors->isEnabled()) $prefix = '';
$message = $this->interpolate($message, $context);
$this->colors->ptln($prefix . $message, $color, $channel);
diff --git a/vendor/splitbrain/php-cli/src/Exception.php b/vendor/splitbrain/php-cli/src/Exception.php
index b2aa98115..4d24d587a 100644
--- a/vendor/splitbrain/php-cli/src/Exception.php
+++ b/vendor/splitbrain/php-cli/src/Exception.php
@@ -11,7 +11,7 @@ namespace splitbrain\phpcli;
* @author Andreas Gohr <andi@splitbrain.org>
* @license MIT
*/
-class Exception extends \Exception
+class Exception extends \RuntimeException
{
const E_ANY = -1; // no error code specified
const E_UNKNOWN_OPT = 1; //Unrecognized option
diff --git a/vendor/splitbrain/php-cli/src/TableFormatter.php b/vendor/splitbrain/php-cli/src/TableFormatter.php
index 73fd6b36e..b817bdba2 100644
--- a/vendor/splitbrain/php-cli/src/TableFormatter.php
+++ b/vendor/splitbrain/php-cli/src/TableFormatter.php
@@ -29,15 +29,7 @@ class TableFormatter
public function __construct(Colors $colors = null)
{
// try to get terminal width
- $width = 0;
- if (isset($_SERVER['COLUMNS'])) {
- // from environment
- $width = (int)$_SERVER['COLUMNS'];
- }
- if (!$width) {
- // via tput command
- $width = @exec('tput cols');
- }
+ $width = $this->getTerminalWidth();
if ($width) {
$this->max = $width - 1;
}
@@ -93,6 +85,27 @@ class TableFormatter
}
/**
+ * Tries to figure out the width of the terminal
+ *
+ * @return int terminal width, 0 if unknown
+ */
+ protected function getTerminalWidth()
+ {
+ // from environment
+ if (isset($_SERVER['COLUMNS'])) return (int)$_SERVER['COLUMNS'];
+
+ // via tput
+ $process = proc_open('tput cols', array(
+ 1 => array('pipe', 'w'),
+ 2 => array('pipe', 'w'),
+ ), $pipes);
+ $width = (int)stream_get_contents($pipes[1]);
+ proc_close($process);
+
+ return $width;
+ }
+
+ /**
* Takes an array with dynamic column width and calculates the correct width
*
* Column width can be given as fixed char widths, percentages and a single * width can be given